6
6
*/
7
7
package org .gridsuite .directory .server ;
8
8
9
+ import org .gridsuite .directory .server .dto .elasticsearch .DirectoryElementInfos ;
9
10
import org .gridsuite .directory .server .elasticsearch .DirectoryElementInfosRepository ;
10
11
import org .gridsuite .directory .server .repository .DirectoryElementEntity ;
11
12
import org .gridsuite .directory .server .repository .DirectoryElementRepository ;
13
+ import org .gridsuite .directory .server .services .DirectoryRepositoryService ;
12
14
import org .gridsuite .directory .server .services .SupervisionService ;
13
15
import org .gridsuite .directory .server .utils .elasticsearch .DisableElasticsearch ;
14
16
import org .junit .jupiter .api .AfterEach ;
15
17
import org .junit .jupiter .api .Test ;
18
+ import org .junit .jupiter .params .ParameterizedTest ;
19
+ import org .junit .jupiter .params .provider .CsvSource ;
16
20
import org .springframework .beans .factory .annotation .Autowired ;
17
21
import org .springframework .boot .test .context .SpringBootTest ;
18
22
import org .springframework .boot .test .mock .mockito .MockBean ;
23
+ import org .springframework .boot .test .mock .mockito .SpyBean ;
24
+ import org .springframework .data .elasticsearch .client .elc .ElasticsearchTemplate ;
25
+ import org .springframework .data .elasticsearch .core .IndexOperations ;
26
+ import org .springframework .data .elasticsearch .core .mapping .IndexCoordinates ;
19
27
20
28
import java .time .Instant ;
21
29
import java .util .List ;
22
30
import java .util .UUID ;
23
31
32
+ import static org .assertj .core .api .Assertions .*;
24
33
import static org .junit .jupiter .api .Assertions .assertEquals ;
25
34
import static org .mockito .Mockito .*;
26
35
@@ -39,6 +48,12 @@ class SupervisionTest {
39
48
@ MockBean
40
49
DirectoryElementInfosRepository directoryElementInfosRepository ;
41
50
51
+ @ SpyBean
52
+ DirectoryRepositoryService repositoryService ;
53
+
54
+ @ MockBean (name = "elasticsearchOperations" )
55
+ ElasticsearchTemplate elasticsearchTemplate ;
56
+
42
57
List <DirectoryElementEntity > expectedElements = List .of (
43
58
new DirectoryElementEntity (UUID .randomUUID (), UUID .randomUUID (), "dir1" , "DIRECTORY" , "user1" , null , Instant .now (), Instant .now (), "user1" , true , Instant .now ()),
44
59
new DirectoryElementEntity (UUID .randomUUID (), UUID .randomUUID (), "filter1" , "FILTER" , "user1" , null , Instant .now (), Instant .now (), "user1" , true , Instant .now ()),
@@ -57,14 +72,52 @@ void testGetStashedElements() {
57
72
void testDeleteElements () {
58
73
List <UUID > uuidsToDelete = List .of (UUID .randomUUID (), UUID .randomUUID (), UUID .randomUUID ());
59
74
supervisionService .deleteElementsByIds (uuidsToDelete );
60
-
75
+ verify ( repositoryService ). deleteElements ( uuidsToDelete );
61
76
verify (directoryElementRepository , times (1 )).deleteAllById (uuidsToDelete );
62
77
verify (directoryElementInfosRepository , times (1 )).deleteAllById (uuidsToDelete );
63
78
}
64
79
80
+ @ ParameterizedTest
81
+ @ CsvSource (nullValues = { "null" }, value = {
82
+ "false, null, true, true" , //not existant, juste recreate
83
+ "false, null, false, false" , //not existant, error while creating
84
+ "true, true, true, true" , //delete + create + reindex OK
85
+ "true, true, false, false" , //delete, but error while creating
86
+ "true, false, null, false" //exist, but error while deleting
87
+ })
88
+ void testReindexElements (final boolean exists , final Boolean delete , final Boolean create , final boolean result ) {
89
+ final IndexOperations idxOps = mock (IndexOperations .class );
90
+ when (elasticsearchTemplate .indexOps (any (Class .class ))).thenReturn (idxOps );
91
+ when (idxOps .getIndexCoordinates ()).thenReturn (IndexCoordinates .of ("test-mock-index" )); //for logs
92
+ when (idxOps .exists ()).thenReturn (exists );
93
+ if (delete != null ) {
94
+ when (idxOps .delete ()).thenReturn (delete );
95
+ }
96
+ if (create != null ) {
97
+ when (idxOps .createWithMapping ()).thenReturn (create );
98
+ }
99
+ doNothing ().when (repositoryService ).reindexAllElements (); //intercept call
100
+ assertThat (supervisionService .recreateIndexDirectoryElementInfos ()).as ("service call result" ).isEqualTo (result );
101
+ verify (elasticsearchTemplate ).indexOps (DirectoryElementInfos .class );
102
+ verify (idxOps , atLeastOnce ()).getIndexCoordinates ();
103
+ verify (idxOps ).exists ();
104
+ if (delete != null ) {
105
+ verify (idxOps ).delete ();
106
+ }
107
+ if (create != null ) {
108
+ verify (idxOps ).createWithMapping ();
109
+ }
110
+ if (create == Boolean .TRUE ) {
111
+ verify (repositoryService ).reindexAllElements ();
112
+ }
113
+ verifyNoMoreInteractions (idxOps );
114
+ }
115
+
65
116
@ AfterEach
66
117
public void verifyNoMoreInteractionsMocks () {
67
118
verifyNoMoreInteractions (directoryElementRepository );
68
119
verifyNoMoreInteractions (directoryElementInfosRepository );
120
+ verifyNoMoreInteractions (repositoryService );
121
+ verifyNoMoreInteractions (elasticsearchTemplate );
69
122
}
70
123
}
0 commit comments