33import com .objectcomputing .checkins .exceptions .AlreadyExistsException ;
44import com .objectcomputing .checkins .exceptions .BadArgException ;
55import com .objectcomputing .checkins .services .TestContainersSuite ;
6+ import com .objectcomputing .checkins .services .fixture .SkillFixture ;
7+ import com .objectcomputing .checkins .services .fixture .MemberProfileFixture ;
8+ import com .objectcomputing .checkins .services .fixture .MemberSkillFixture ;
69import com .objectcomputing .checkins .services .memberprofile .MemberProfile ;
710import com .objectcomputing .checkins .services .memberprofile .MemberProfileRepository ;
811import com .objectcomputing .checkins .services .skills .Skill ;
12+ import com .objectcomputing .checkins .services .member_skill .skillsreport .SkillLevel ;
913import com .objectcomputing .checkins .services .skills .SkillRepository ;
10- import org .junit .jupiter .api .AfterAll ;
11- import org .junit .jupiter .api .BeforeAll ;
12- import org .junit .jupiter .api .BeforeEach ;
1314import org .junit .jupiter .api .Test ;
14- import org .junit .jupiter .api .condition .DisabledInNativeImage ;
15- import org .mockito .InjectMocks ;
16- import org .mockito .Mock ;
17- import org .mockito .MockitoAnnotations ;
15+ import jakarta .inject .Inject ;
16+ import jakarta .validation .ConstraintViolationException ;
1817
1918import java .util .HashSet ;
2019import java .util .List ;
2120import java .util .Optional ;
2221import java .util .Set ;
2322import java .util .UUID ;
23+ import java .time .LocalDate ;
2424
2525import static org .junit .jupiter .api .Assertions .assertEquals ;
26+ import static org .junit .jupiter .api .Assertions .assertFalse ;
2627import static org .junit .jupiter .api .Assertions .assertNull ;
2728import static org .junit .jupiter .api .Assertions .assertThrows ;
28- import static org .mockito .ArgumentMatchers .any ;
29- import static org .mockito .Mockito .doAnswer ;
30- import static org .mockito .Mockito .never ;
31- import static org .mockito .Mockito .reset ;
32- import static org .mockito .Mockito .times ;
33- import static org .mockito .Mockito .verify ;
34- import static org .mockito .Mockito .when ;
3529
36- // Disabled in nativeTest, as we get an exception from Mockito
37- // => java.lang.NoClassDefFoundError: Could not initialize class org.mockito.internal.configuration.plugins.Plugins
38- @ DisabledInNativeImage
39- class MemberSkillServiceImplTest extends TestContainersSuite {
40-
41- @ Mock
42- private MemberSkillRepository memberSkillRepository ;
43-
44- @ Mock
45- private MemberProfileRepository memberProfileRepository ;
46-
47- @ Mock
48- private SkillRepository skillRepository ;
49-
50- @ InjectMocks
30+ class MemberSkillServiceImplTest extends TestContainersSuite
31+ implements MemberProfileFixture , MemberSkillFixture , SkillFixture {
32+ @ Inject
5133 private MemberSkillServiceImpl memberSkillsServices ;
5234
53- private AutoCloseable mockFinalizer ;
54-
55- @ BeforeAll
56- void initMocks () {
57- mockFinalizer = MockitoAnnotations .openMocks (this );
58- }
59-
60- @ BeforeEach
61- void resetMocks () {
62- reset (memberSkillRepository , skillRepository , memberProfileRepository );
63- }
64-
65- @ AfterAll
66- void closeMocks () throws Exception {
67- mockFinalizer .close ();
68- }
69-
7035 @ Test
7136 void testRead () {
72- MemberSkill memberSkill = new MemberSkill (UUID .randomUUID (), UUID .randomUUID (), UUID .randomUUID ());
73-
74- when (memberSkillRepository .findById (memberSkill .getId ())).thenReturn (Optional .of (memberSkill ));
75-
37+ Skill skill = createSkill ("Skill1" , false , "First" , false );
38+ MemberProfile member = createADefaultMemberProfile ();
39+ MemberSkill memberSkill = createMemberSkill (member , skill , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
7640 assertEquals (memberSkill , memberSkillsServices .read (memberSkill .getId ()));
77-
78- verify (memberSkillRepository , times (1 )).findById (any (UUID .class ));
7941 }
8042
8143 @ Test
8244 void testReadNullId () {
83- assertNull (memberSkillsServices .read (null ));
84-
85- verify (memberSkillRepository , never ()).findById (any (UUID .class ));
45+ assertThrows (ConstraintViolationException .class , () -> memberSkillsServices .read (null ));
8646 }
8747
8848 @ Test
8949 void testSave () {
90- MemberSkill memberSkill = new MemberSkill (UUID .randomUUID (), UUID .randomUUID ());
91- Skill skill = new Skill ();
92-
93- when (skillRepository .findById (memberSkill .getSkillid ())).thenReturn (Optional .of (skill ));
94- when (memberProfileRepository .findById (memberSkill .getMemberid ())).thenReturn (Optional .of (new MemberProfile ()));
95- when (memberSkillRepository .save (memberSkill )).thenReturn (memberSkill );
96-
50+ Skill skill = createSkill ("Skill1" , false , "First" , false );
51+ MemberProfile member = createADefaultMemberProfile ();
52+ MemberSkill memberSkill = new MemberSkill (member .getId (), skill .getId ());
9753 assertEquals (memberSkill , memberSkillsServices .save (memberSkill ));
98-
99- verify (skillRepository , times (1 )).findById (any (UUID .class ));
100- verify (memberProfileRepository , times (1 )).findById (any (UUID .class ));
101- verify (memberSkillRepository , times (1 )).save (any (MemberSkill .class ));
10254 }
10355
10456 @ Test
@@ -107,10 +59,6 @@ void testSaveWithId() {
10759
10860 BadArgException exception = assertThrows (BadArgException .class , () -> memberSkillsServices .save (memberSkill ));
10961 assertEquals (String .format ("Found unexpected id %s for member skill" , memberSkill .getId ()), exception .getMessage ());
110-
111- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
112- verify (skillRepository , never ()).findById (any (UUID .class ));
113- verify (memberProfileRepository , never ()).findById (any (UUID .class ));
11462 }
11563
11664 @ Test
@@ -119,10 +67,6 @@ void testSaveActionItemNullMemberId() {
11967
12068 BadArgException exception = assertThrows (BadArgException .class , () -> memberSkillsServices .save (memberSkill ));
12169 assertEquals (String .format ("Invalid member skill %s" , memberSkill ), exception .getMessage ());
122-
123- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
124- verify (skillRepository , never ()).findById (any (UUID .class ));
125- verify (memberProfileRepository , never ()).findById (any (UUID .class ));
12670 }
12771
12872 @ Test
@@ -131,178 +75,135 @@ void testSaveActionItemNullSkillId() {
13175
13276 BadArgException exception = assertThrows (BadArgException .class , () -> memberSkillsServices .save (memberSkill ));
13377 assertEquals (String .format ("Invalid member skill %s" , memberSkill ), exception .getMessage ());
134-
135- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
136- verify (skillRepository , never ()).findById (any (UUID .class ));
137- verify (memberProfileRepository , never ()).findById (any (UUID .class ));
13878 }
13979
14080 @ Test
14181 void testSaveNullMemberSkill () {
14282 assertNull (memberSkillsServices .save (null ));
143-
144- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
145- verify (skillRepository , never ()).findById (any (UUID .class ));
146- verify (memberProfileRepository , never ()).findById (any (UUID .class ));
14783 }
14884
14985 @ Test
15086 void testSaveMemberSkillAlreadyExistingSkill () {
151- MemberSkill memberSkill = new MemberSkill (UUID .randomUUID (), UUID .randomUUID ());
152-
153- when (skillRepository .findById (memberSkill .getSkillid ())).thenReturn (Optional .of (new Skill ()));
154- when (memberProfileRepository .findById (memberSkill .getMemberid ())).thenReturn (Optional .of (new MemberProfile ()));
155- when (memberSkillRepository .findByMemberidAndSkillid (memberSkill .getMemberid (), memberSkill .getSkillid ()))
156- .thenReturn (Optional .of (memberSkill ));
157-
87+ Skill skill = createSkill ("Skill1" , false , "First" , false );
88+ MemberProfile member = createADefaultMemberProfile ();
89+ MemberSkill savedSkill = createMemberSkill (member , skill , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
90+ MemberSkill memberSkill = new MemberSkill (member .getId (), skill .getId (), SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
15891 AlreadyExistsException exception = assertThrows (AlreadyExistsException .class , () -> memberSkillsServices .save (memberSkill ));
15992 assertEquals (String .format ("Member %s already has this skill %s" ,
16093 memberSkill .getMemberid (), memberSkill .getSkillid ()), exception .getMessage ());
161-
162- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
163- verify (skillRepository , times (1 )).findById (any (UUID .class ));
164- verify (memberProfileRepository , times (1 )).findById (any (UUID .class ));
165- verify (memberSkillRepository , times (1 )).findByMemberidAndSkillid (any (UUID .class ), any (UUID .class ));
16694 }
16795
16896 @ Test
16997 void testSaveMemberSkillNonExistingSkill () {
170- MemberSkill memberSkill = new MemberSkill (UUID .randomUUID (), UUID .randomUUID ());
171-
172- when (skillRepository .findById (memberSkill .getSkillid ())).thenReturn (Optional .empty ());
173- when (memberProfileRepository .findById (memberSkill .getMemberid ())).thenReturn (Optional .of (new MemberProfile ()));
98+ MemberProfile member = createADefaultMemberProfile ();
99+ MemberSkill memberSkill = new MemberSkill (member .getId (), UUID .randomUUID ());
174100
175101 BadArgException exception = assertThrows (BadArgException .class , () -> memberSkillsServices .save (memberSkill ));
176102 assertEquals (String .format ("Skill %s doesn't exist" , memberSkill .getSkillid ()), exception .getMessage ());
177-
178- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
179- verify (skillRepository , times (1 )).findById (any (UUID .class ));
180- verify (memberProfileRepository , times (1 )).findById (any (UUID .class ));
181103 }
182104
183105 @ Test
184106 void testSaveMemberSkillNonExistingMember () {
185- MemberSkill memberSkill = new MemberSkill (UUID .randomUUID (), UUID .randomUUID ());
186-
187- when (skillRepository .findById (memberSkill .getSkillid ())).thenReturn (Optional .of (new Skill ()));
188- when (memberProfileRepository .findById (memberSkill .getMemberid ())).thenReturn (Optional .empty ());
107+ Skill skill = createSkill ("Skill1" , false , "First" , false );
108+ MemberSkill memberSkill = new MemberSkill (UUID .randomUUID (), skill .getId ());
189109
190110 BadArgException exception = assertThrows (BadArgException .class , () -> memberSkillsServices .save (memberSkill ));
191111 assertEquals (String .format ("Member Profile %s doesn't exist" , memberSkill .getMemberid ()), exception .getMessage ());
192-
193- verify (memberSkillRepository , never ()).save (any (MemberSkill .class ));
194- verify (skillRepository , never ()).findById (any (UUID .class ));
195- verify (memberProfileRepository , times (1 )).findById (any (UUID .class ));
196112 }
197113
198114 @ Test
199115 void testFindByFieldsNullParams () {
200- Set <MemberSkill > memberSkillSet = Set .of (
201- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
202- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
203- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ())
204- );
205-
206- when (memberSkillRepository .findAll ()).thenReturn (memberSkillSet .stream ().toList ());
207-
116+ Skill skill1 = createSkill ("Skill1" , false , "First" , false );
117+ Skill skill2 = createSkill ("Skill2" , false , "Second" , false );
118+ Skill skill3 = createSkill ("Skill3" , false , "Third" , false );
119+ MemberProfile member1 = createADefaultMemberProfile ();
120+ MemberSkill ms1 = createMemberSkill (member1 , skill1 , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
121+ MemberSkill ms2 = createMemberSkill (member1 , skill2 , SkillLevel .ADVANCED_LEVEL , LocalDate .now ());
122+ MemberSkill ms3 = createMemberSkill (member1 , skill3 , SkillLevel .NOVICE_LEVEL , LocalDate .now ());
123+
124+ Set <MemberSkill > memberSkillSet = Set .of (ms1 , ms2 , ms3 );
208125 assertEquals (memberSkillSet , memberSkillsServices .findByFields (null , null ));
209-
210- verify (memberSkillRepository , times (1 )).findAll ();
211- verify (memberSkillRepository , never ()).findByMemberid (any (UUID .class ));
212- verify (memberSkillRepository , never ()).findBySkillid (any (UUID .class ));
213126 }
214127
215128 @ Test
216129 void testFindByFieldsMemberId () {
217- List <MemberSkill > memberSkillSet = List .of (
218- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
219- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
220- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ())
221- );
222-
130+ Skill skill1 = createSkill ("Skill1" , false , "First" , false );
131+ Skill skill2 = createSkill ("Skill2" , false , "Second" , false );
132+ Skill skill3 = createSkill ("Skill3" , false , "Third" , false );
133+ MemberProfile member1 = createADefaultMemberProfile ();
134+ MemberProfile member2 = createASecondDefaultMemberProfile ();
135+ MemberSkill ms1 = createMemberSkill (member1 , skill1 , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
136+ MemberSkill ms2 = createMemberSkill (member2 , skill2 , SkillLevel .ADVANCED_LEVEL , LocalDate .now ());
137+ MemberSkill ms3 = createMemberSkill (member1 , skill3 , SkillLevel .NOVICE_LEVEL , LocalDate .now ());
138+
139+ List <MemberSkill > memberSkillSet = List .of (ms1 , ms2 , ms3 );
223140 List <MemberSkill > memberSkillsToFind = List .of (memberSkillSet .get (1 ));
224141 MemberSkill memberSkill = memberSkillsToFind .get (0 );
225142
226- when (memberSkillRepository .findAll ()).thenReturn (memberSkillSet );
227- when (memberSkillRepository .findByMemberid (memberSkill .getMemberid ())).thenReturn (memberSkillsToFind );
228-
229143 assertEquals (new HashSet <>(memberSkillsToFind ), memberSkillsServices .findByFields (memberSkill .getMemberid (), null ));
230-
231- verify (memberSkillRepository , times (1 )).findAll ();
232- verify (memberSkillRepository , times (1 )).findByMemberid (any (UUID .class ));
233- verify (memberSkillRepository , never ()).findBySkillid (any (UUID .class ));
234144 }
235145
236146 @ Test
237147 void testFindByFieldsSkillId () {
238- List <MemberSkill > memberSkillSet = List .of (
239- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
240- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
241- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ())
242- );
148+ Skill skill1 = createSkill ("Skill1" , false , "First" , false );
149+ Skill skill2 = createSkill ("Skill2" , false , "Second" , false );
150+ Skill skill3 = createSkill ("Skill3" , false , "Third" , false );
151+ MemberProfile member1 = createADefaultMemberProfile ();
152+ MemberProfile member2 = createASecondDefaultMemberProfile ();
153+ MemberSkill ms1 = createMemberSkill (member1 , skill1 , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
154+ MemberSkill ms2 = createMemberSkill (member2 , skill2 , SkillLevel .ADVANCED_LEVEL , LocalDate .now ());
155+ MemberSkill ms3 = createMemberSkill (member1 , skill3 , SkillLevel .NOVICE_LEVEL , LocalDate .now ());
156+
157+ List <MemberSkill > memberSkillSet = List .of (ms1 , ms2 , ms3 );
243158
244159 List <MemberSkill > memberSkillsToFind = List .of (memberSkillSet .get (1 ));
245160 MemberSkill memberSkill = memberSkillsToFind .get (0 );
246161
247- when (memberSkillRepository .findAll ()).thenReturn (memberSkillSet );
248- when (memberSkillRepository .findBySkillid (memberSkill .getSkillid ())).thenReturn (memberSkillsToFind );
249-
250162 assertEquals (new HashSet <>(memberSkillsToFind ), memberSkillsServices .findByFields (null , memberSkill .getSkillid ()));
251-
252- verify (memberSkillRepository , times (1 )).findAll ();
253- verify (memberSkillRepository , times (1 )).findBySkillid (any (UUID .class ));
254- verify (memberSkillRepository , never ()).findByMemberid (any (UUID .class ));
255163 }
256164
257165 @ Test
258166 void testFindByFieldsAll () {
259- List <MemberSkill > memberSkillSet = List .of (
260- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
261- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
262- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ())
263- );
167+ Skill skill1 = createSkill ("Skill1" , false , "First" , false );
168+ Skill skill2 = createSkill ("Skill2" , false , "Second" , false );
169+ Skill skill3 = createSkill ("Skill3" , false , "Third" , false );
170+ MemberProfile member1 = createADefaultMemberProfile ();
171+ MemberProfile member2 = createASecondDefaultMemberProfile ();
172+ MemberSkill ms1 = createMemberSkill (member1 , skill1 , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
173+ MemberSkill ms2 = createMemberSkill (member2 , skill2 , SkillLevel .ADVANCED_LEVEL , LocalDate .now ());
174+ MemberSkill ms3 = createMemberSkill (member1 , skill3 , SkillLevel .NOVICE_LEVEL , LocalDate .now ());
175+
176+ List <MemberSkill > memberSkillSet = List .of (ms1 , ms2 , ms3 );
264177
265178 List <MemberSkill > memberSkillsToFind = List .of (memberSkillSet .get (1 ));
266179
267180 MemberSkill memberSkill = memberSkillsToFind .get (0 );
268- when (memberSkillRepository .findAll ()).thenReturn (memberSkillSet );
269- when (memberSkillRepository .findBySkillid (memberSkill .getSkillid ())).thenReturn (memberSkillsToFind );
270- when (memberSkillRepository .findByMemberid (memberSkill .getMemberid ())).thenReturn (memberSkillsToFind );
271181
272182 assertEquals (new HashSet <>(memberSkillsToFind ), memberSkillsServices
273183 .findByFields (memberSkill .getMemberid (), memberSkill .getSkillid ()));
274-
275- verify (memberSkillRepository , times (1 )).findAll ();
276- verify (memberSkillRepository , times (1 )).findByMemberid (any (UUID .class ));
277- verify (memberSkillRepository , times (1 )).findBySkillid (any (UUID .class ));
278184 }
279185
280186 @ Test
281187 void testReadAll () {
282- Set <MemberSkill > memberSkillSet = Set .of (
283- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
284- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ()),
285- new MemberSkill (UUID .randomUUID (), UUID .randomUUID ())
286- );
188+ Skill skill1 = createSkill ("Skill1" , false , "First" , false );
189+ Skill skill2 = createSkill ("Skill2" , false , "Second" , false );
190+ Skill skill3 = createSkill ("Skill3" , false , "Third" , false );
191+ MemberProfile member1 = createADefaultMemberProfile ();
192+ MemberProfile member2 = createASecondDefaultMemberProfile ();
193+ MemberSkill ms1 = createMemberSkill (member1 , skill1 , SkillLevel .INTERMEDIATE_LEVEL , LocalDate .now ());
194+ MemberSkill ms2 = createMemberSkill (member2 , skill2 , SkillLevel .ADVANCED_LEVEL , LocalDate .now ());
195+ MemberSkill ms3 = createMemberSkill (member1 , skill3 , SkillLevel .NOVICE_LEVEL , LocalDate .now ());
287196
288- when ( memberSkillRepository . findAll ()). thenReturn ( memberSkillSet . stream (). toList () );
197+ Set < MemberSkill > memberSkillSet = Set . of ( ms1 , ms2 , ms3 );
289198
290199 assertEquals (memberSkillSet , memberSkillsServices .findByFields (null ,null ));
291-
292- verify (memberSkillRepository , times (1 )).findAll ();
293200 }
294201
295202 @ Test
296203 void testDelete () {
297- UUID uuid = UUID .randomUUID ();
298-
299- doAnswer (an -> {
300- assertEquals (uuid , an .getArgument (0 ));
301- return null ;
302- }).when (memberSkillRepository ).deleteById (any (UUID .class ));
303-
304- memberSkillsServices .delete (uuid );
305-
306- verify (memberSkillRepository , times (1 )).deleteById (any (UUID .class ));
204+ Skill skill = createSkill ("Skill1" , false , "First" , false );
205+ memberSkillsServices .delete (skill .getId ());
206+ assertFalse (getMemberSkillRepository ().findById (skill .getId ())
207+ .isPresent ());
307208 }
308209}
0 commit comments