11package com .objectcomputing .checkins .services .memberprofile .csvreport ;
22
33import com .objectcomputing .checkins .services .TestContainersSuite ;
4+ import com .objectcomputing .checkins .services .fixture .MemberProfileFixture ;
5+ import com .objectcomputing .checkins .services .memberprofile .MemberProfile ;
6+ import com .objectcomputing .checkins .services .memberprofile .MemberProfileServices ;
47import org .apache .commons .csv .CSVFormat ;
58import org .apache .commons .csv .CSVParser ;
69import org .apache .commons .csv .CSVRecord ;
710import org .junit .jupiter .api .AfterAll ;
811import org .junit .jupiter .api .BeforeAll ;
912import org .junit .jupiter .api .BeforeEach ;
1013import org .junit .jupiter .api .Test ;
11- import org .junit .jupiter .api .condition .DisabledInNativeImage ;
12- import org .mockito .InjectMocks ;
13- import org .mockito .Mock ;
14- import org .mockito .Mockito ;
15- import org .mockito .MockitoAnnotations ;
14+
15+ import jakarta .inject .Inject ;
1616
1717import java .io .File ;
1818import java .io .FileReader ;
2525import static org .junit .jupiter .api .Assertions .assertEquals ;
2626import static org .junit .jupiter .api .Assertions .assertNotNull ;
2727import static org .junit .jupiter .api .Assertions .assertThrows ;
28- import static org .mockito .Mockito .when ;
29-
30- // Disabled in nativeTest, as we get an exception from Mockito
31- // => java.lang.NoClassDefFoundError: Could not initialize class org.mockito.internal.configuration.plugins.Plugins
32- @ DisabledInNativeImage
33- class MemberProfileReportServicesImplTest extends TestContainersSuite {
3428
35- @ Mock
36- private MemberProfileReportRepository memberProfileReportRepository ;
29+ class MemberProfileReportServicesImplTest extends TestContainersSuite
30+ implements MemberProfileFixture {
31+ @ Inject
32+ private MemberProfileServices memberProfileServices ;
3733
38- @ Mock
39- private MemberProfileFileProvider memberProfileFileProvider ;
40-
41- @ InjectMocks
34+ @ Inject
4235 private MemberProfileReportServicesImpl memberProfileReportServices ;
4336
44- private AutoCloseable mockFinalizer ;
45-
46- @ BeforeAll
47- void initMocks () {
48- mockFinalizer = MockitoAnnotations .openMocks (this );
49- }
50-
51- @ BeforeEach
52- void resetMocks () {
53- Mockito .reset (memberProfileReportRepository );
54- }
55-
56- @ AfterAll
57- void close () throws Exception {
58- mockFinalizer .close ();
59- }
60-
6137 @ Test
6238 void testGenerateFileWithAllMemberProfiles () throws IOException {
6339 List <MemberProfileRecord > expectedRecords = createSampleRecords ();
64- when (memberProfileReportRepository .findAll ()).thenReturn (expectedRecords );
6540 File tmpFile = File .createTempFile ("member" ,".csv" );
6641 tmpFile .deleteOnExit ();
67- when (memberProfileFileProvider .provideFile ()).thenReturn (tmpFile );
6842
6943 // Generate a file with all members
7044 File file = memberProfileReportServices .generateFile (null );
@@ -85,12 +59,9 @@ void testGenerateFileWithAllMemberProfiles() throws IOException {
8559 void testGenerateFileWithSelectedMemberProfiles () throws IOException {
8660 List <MemberProfileRecord > allRecords = createSampleRecords ();
8761 MemberProfileRecord expectedRecord = allRecords .get (1 );
88- when (memberProfileReportRepository
89- .findAllByMemberIds (List .of (expectedRecord .getId ().toString ())))
90- .thenReturn (List .of (expectedRecord ));
9162 File tmpFile = File .createTempFile ("member" ,".csv" );
9263 tmpFile .deleteOnExit ();
93- when ( memberProfileFileProvider . provideFile ()). thenReturn ( tmpFile );
64+
9465 // Generate a file with selected members
9566 MemberProfileReportQueryDTO dto = new MemberProfileReportQueryDTO ();
9667 dto .setMemberIds (List .of (expectedRecord .getId ()));
@@ -104,26 +75,6 @@ void testGenerateFileWithSelectedMemberProfiles() throws IOException {
10475 assertRecordEquals (expectedRecord , csvRecord1 );
10576 }
10677
107- @ Test
108- void testGenerateFileNotGenerated () throws IOException {
109- List <MemberProfileRecord > allRecords = createSampleRecords ();
110- MemberProfileRecord expectedRecord = allRecords .get (1 );
111- when (memberProfileReportRepository
112- .findAllByMemberIds (List .of (expectedRecord .getId ().toString ())))
113- .thenReturn (List .of (expectedRecord ));
114-
115- when (memberProfileFileProvider .provideFile ()).thenThrow (new RuntimeException ());
116- // Generate a file with selected members
117- MemberProfileReportQueryDTO dto = new MemberProfileReportQueryDTO ();
118- dto .setMemberIds (List .of (expectedRecord .getId ()));
119-
120- assertThrows (RuntimeException .class , () -> {
121- memberProfileReportServices .generateFile (dto );
122- });
123- }
124-
125-
126-
12778 private static void assertRecordEquals (MemberProfileRecord record , CSVRecord csvRecord ) {
12879 assertEquals (record .getFirstName (), csvRecord .get ("First Name" ));
12980 assertEquals (record .getLastName (), csvRecord .get ("Last Name" ));
@@ -146,45 +97,43 @@ static List<CSVRecord> parseRecordsFromFile(File file) throws IOException {
14697 return parser .getRecords ();
14798 }
14899
149- private static List < MemberProfileRecord > createSampleRecords ( ) {
100+ MemberProfileRecord from ( MemberProfile profile ) {
150101 MemberProfileRecord record1 = new MemberProfileRecord ();
151- record1 .setId (UUID .randomUUID ());
152- record1 .setFirstName ("John" );
153- record1 .setLastName ("Doe" );
154- record1 .setTitle ("Software Engineer" );
155- record1 .setLocation ("St. Louis" );
156- record1 .
setWorkEmail (
"[email protected] " );
157- record1 .setStartDate (LocalDate .of (2024 , 1 , 1 ));
158- record1 .setPdlName ("Jane Miller" );
159- record1 .
setPdlEmail (
"[email protected] " );
160- record1 .setSupervisorName ("Tom Smith" );
161- record1 .
setSupervisorEmail (
"[email protected] " );
162-
163- MemberProfileRecord record2 = new MemberProfileRecord ();
164- record2 .setId (UUID .randomUUID ());
165- record2 .setFirstName ("Jane" );
166- record2 .setLastName ("Miller" );
167- record2 .setTitle ("Principal Software Engineer" );
168- record2 .setLocation ("St. Louis" );
169- record2 .
setWorkEmail (
"[email protected] " );
170- record2 .setStartDate (LocalDate .of (2023 , 1 , 1 ));
171- record2 .setPdlName ("Eve Williams" );
172- record2 .
setPdlEmail (
"[email protected] " );
173- record2 .setSupervisorName ("Tom Smith" );
174- record2 .
setSupervisorEmail (
"[email protected] " );
175-
176- MemberProfileRecord record3 = new MemberProfileRecord ();
177- record3 .setId (UUID .randomUUID ());
178- record3 .setFirstName ("Tom" );
179- record3 .setLastName ("Smith" );
180- record3 .setTitle ("Manager, HR, and Head of Sales" );
181- record3 .setLocation ("New York City, New York" );
182- record3 .
setWorkEmail (
"[email protected] " );
183- record3 .setStartDate (LocalDate .of (2022 , 1 , 1 ));
184- record3 .setPdlName (null );
185- record3 .setPdlEmail (null );
186- record3 .setSupervisorName (null );
187- record3 .setSupervisorEmail (null );
102+ record1 .setId (profile .getId ());
103+ record1 .setFirstName (profile .getFirstName ());
104+ record1 .setLastName (profile .getLastName ());
105+ record1 .setTitle (profile .getTitle ());
106+ record1 .setLocation (profile .getLocation ());
107+ record1 .setWorkEmail (profile .getWorkEmail ());
108+ record1 .setStartDate (profile .getStartDate ());
109+ UUID pdlId = profile .getPdlId ();
110+ if (pdlId != null ) {
111+ MemberProfile pdl = memberProfileServices .getById (pdlId );
112+ if (pdl != null ) {
113+ record1 .setPdlName (pdl .getFirstName () + " " + pdl .getLastName ());
114+ record1 .setPdlEmail (pdl .getWorkEmail ());
115+ }
116+ }
117+ UUID supervisorId = profile .getSupervisorid ();
118+ if (supervisorId != null ) {
119+ MemberProfile supervisor =
120+ memberProfileServices .getById (supervisorId );
121+ if (supervisor != null ) {
122+ record1 .setSupervisorName (supervisor .getFirstName () + " " +
123+ supervisor .getLastName ());
124+ record1 .setSupervisorEmail (supervisor .getWorkEmail ());
125+ }
126+ }
127+ return record1 ;
128+ }
129+
130+ private List <MemberProfileRecord > createSampleRecords () {
131+ // The createADefaultMemberProfileForPdl() method actually sets both
132+ // the PDL and Supervisor to the id of the member profile passed in.
133+ MemberProfile pdl = createADefaultMemberProfile ();
134+ MemberProfileRecord record1 = from (pdl );
135+ MemberProfileRecord record2 = from (createADefaultMemberProfileForPdl (pdl ));
136+ MemberProfileRecord record3 = from (createAThirdDefaultMemberProfile ());
188137
189138 return List .of (record1 , record2 , record3 );
190139 }
0 commit comments