Projekt

Obecné

Profil

Stáhnout (19.2 KB) Statistiky
| Větev: | Tag: | Revize:
1
package cz.zcu.kiv.backendapi.catalog;
2

    
3
import cz.zcu.kiv.backendapi.alternativename.AlternativeName;
4
import cz.zcu.kiv.backendapi.bibliography.Bibliography;
5
import cz.zcu.kiv.backendapi.country.Country;
6
import cz.zcu.kiv.backendapi.exception.ApiRequestException;
7
import cz.zcu.kiv.backendapi.path.PathDto;
8
import cz.zcu.kiv.backendapi.type.Type;
9
import cz.zcu.kiv.backendapi.type.TypeServiceImpl;
10
import cz.zcu.kiv.backendapi.writtenform.WrittenForm;
11
import org.junit.jupiter.api.BeforeEach;
12
import org.junit.jupiter.api.Test;
13
import org.junit.jupiter.api.extension.ExtendWith;
14
import org.mockito.ArgumentCaptor;
15
import org.mockito.Mock;
16
import org.mockito.junit.jupiter.MockitoExtension;
17

    
18
import java.util.*;
19
import java.util.stream.Collectors;
20
import java.util.stream.Stream;
21

    
22
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
23
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
24
import static org.junit.jupiter.api.Assertions.assertTrue;
25
import static org.mockito.ArgumentMatchers.any;
26
import static org.mockito.ArgumentMatchers.anyString;
27
import static org.mockito.BDDMockito.given;
28
import static org.mockito.Mockito.never;
29
import static org.mockito.Mockito.verify;
30

    
31
@ExtendWith(MockitoExtension.class)
32
class CatalogItemServiceImplTest {
33

    
34
    @Mock
35
    private CatalogItemRepository catalogItemRepository;
36

    
37
    @Mock
38
    private TypeServiceImpl typeService;
39

    
40

    
41
    private CatalogItemServiceImpl underTest;
42

    
43
    @BeforeEach
44
    void setUp() {
45
        underTest = new CatalogItemServiceImpl(catalogItemRepository, typeService);
46
    }
47

    
48
    @Test
49
    void saveCatalog() {
50
        // given
51
        Type type = new Type("type");
52

    
53
        CatalogItem catalogItem = new CatalogItem();
54
        catalogItem.setName("aaacbbbbbbbaa");
55
        catalogItem.setBibliography(Set.of(new Bibliography("bibl", catalogItem)));
56
        catalogItem.setTypes(Set.of(type));
57
        catalogItem.setAlternativeNames(Set.of(new AlternativeName("altName", catalogItem)));
58
        catalogItem.setCountries(Set.of(new Country("aaaabbaa", catalogItem)));
59
        catalogItem.setWrittenForms(Set.of(new WrittenForm("written", catalogItem)));
60
        catalogItem.setCertainty(0);
61
        catalogItem.setLatitude(0.1);
62
        catalogItem.setLongitude(0.2);
63

    
64
        CatalogItem catalogItem2 = new CatalogItem();
65
        catalogItem2.setName("name");
66
        catalogItem2.setBibliography(Set.of(new Bibliography("bibl", catalogItem2)));
67
        catalogItem2.setTypes(Set.of(type));
68
        catalogItem2.setAlternativeNames(Set.of(new AlternativeName("aaaabbbbbbaa", catalogItem2)));
69
        catalogItem2.setCountries(Set.of(new Country("aaaabbcccefaa", catalogItem2)));
70
        catalogItem2.setWrittenForms(Set.of(new WrittenForm("written", catalogItem2)));
71
        catalogItem2.setCertainty(1);
72
        catalogItem2.setLatitude(1.1);
73
        catalogItem2.setLongitude(1.2);
74

    
75
        List<CatalogItem> catalog = List.of(catalogItem, catalogItem2);
76

    
77
        given(typeService.getTypeByName(anyString())).willReturn(Optional.of(type));
78

    
79
        // when
80
        underTest.saveCatalog(catalog);
81

    
82
        // then
83
        verify(typeService, never()).saveType(type);
84
        verify(catalogItemRepository).save(catalogItem);
85
        verify(catalogItemRepository).save(catalogItem2);
86
    }
87

    
88
    @Test
89
    void testSaveCatalogItem() {
90
        // given
91
        CatalogItemDto catalogItemDto = new CatalogItemDto();
92
        catalogItemDto.setName("name");
93
        catalogItemDto.setBibliography(Set.of("bibl"));
94
        catalogItemDto.setTypes(Set.of("type"));
95
        catalogItemDto.setAlternativeNames(Set.of("altName"));
96
        catalogItemDto.setCountries(Set.of("country"));
97
        catalogItemDto.setWrittenForms(Set.of("written"));
98
        catalogItemDto.setCertainty(0);
99
        catalogItemDto.setLatitude(0.1);
100
        catalogItemDto.setLongitude(0.2);
101
        catalogItemDto.setDescription("description");
102

    
103
        Type type = new Type("type");
104

    
105
        CatalogItem catalogItem = new CatalogItem();
106
        catalogItem.setName("name");
107
        catalogItem.setBibliography(Set.of(new Bibliography("bibl", catalogItem)));
108
        catalogItem.setTypes(Set.of(type));
109
        catalogItem.setAlternativeNames(Set.of(new AlternativeName("altName", catalogItem)));
110
        catalogItem.setCountries(Set.of(new Country("country", catalogItem)));
111
        catalogItem.setWrittenForms(Set.of(new WrittenForm("written", catalogItem)));
112
        catalogItem.setCertainty(0);
113
        catalogItem.setLatitude(0.1);
114
        catalogItem.setLongitude(0.2);
115
        catalogItem.setDescription("description");
116

    
117
        given(typeService.getTypeByName(anyString())).willReturn(Optional.of(type));
118

    
119
        // when
120
        underTest.saveCatalogItem(catalogItemDto);
121

    
122
        // then
123
        ArgumentCaptor<CatalogItem> argumentCaptor = ArgumentCaptor.forClass(CatalogItem.class);
124

    
125
        verify(catalogItemRepository).save(argumentCaptor.capture());
126
        verify(typeService, never()).saveType(type);
127

    
128
        CatalogItem capturedItem = argumentCaptor.getValue();
129

    
130
        assertThat(capturedItem).isEqualTo(catalogItem);
131

    
132
    }
133

    
134
    @Test
135
    void testCanGetCatalogItem() {
136
        // given
137
        UUID id = UUID.randomUUID();
138
        CatalogItem catalogItem = new CatalogItem();
139
        catalogItem.setId(id);
140
        CatalogItemDto catalogItemDto = new CatalogItemDto();
141
        catalogItemDto.setId(id);
142
        given(catalogItemRepository.findById(id)).willReturn(Optional.of(catalogItem));
143

    
144
        // when
145
        CatalogItemDto retrievedItemDto = underTest.getCatalogItem(id);
146

    
147
        // then
148
        verify(catalogItemRepository).findById(id);
149
        assertThat(retrievedItemDto).isEqualTo(catalogItemDto);
150
    }
151

    
152
    @Test
153
    void testCanNotGetCatalogItem() {
154
        // given
155
        UUID id = UUID.randomUUID();
156

    
157
        // when
158
        // then
159
        assertThatThrownBy(() -> underTest.getCatalogItem(id))
160
                .isInstanceOf(ApiRequestException.class)
161
                .hasMessageContaining("Catalog item not found");
162

    
163
        verify(catalogItemRepository).findById(id);
164
    }
165

    
166
    @Test
167
    void testCanUpdateCatalogItem() {
168
        // given
169
        UUID id = UUID.randomUUID();
170

    
171
        CatalogItemDto catalogItemDto = new CatalogItemDto();
172
        catalogItemDto.setName("name");
173
        catalogItemDto.setBibliography(Set.of("bibl"));
174
        catalogItemDto.setTypes(Set.of("type"));
175
        catalogItemDto.setAlternativeNames(Set.of("altName"));
176
        catalogItemDto.setCountries(Set.of("country"));
177
        catalogItemDto.setWrittenForms(Set.of("written"));
178
        catalogItemDto.setCertainty(0);
179
        catalogItemDto.setLatitude(0.1);
180
        catalogItemDto.setLongitude(0.2);
181
        catalogItemDto.setDescription("description");
182

    
183
        Type type = new Type("type");
184
        Type typeOld = new Type("old");
185

    
186
        CatalogItem catalogItem = new CatalogItem();
187
        catalogItem.setName("name");
188
        catalogItem.setBibliography(Set.of(new Bibliography("bibl", catalogItem)));
189
        catalogItem.setTypes(Set.of(type));
190
        catalogItem.setAlternativeNames(Set.of(new AlternativeName("altName", catalogItem)));
191
        catalogItem.setCountries(Set.of(new Country("country", catalogItem)));
192
        catalogItem.setWrittenForms(Set.of(new WrittenForm("written", catalogItem)));
193
        catalogItem.setCertainty(0);
194
        catalogItem.setLatitude(0.1);
195
        catalogItem.setLongitude(0.2);
196
        catalogItem.setDescription("description");
197

    
198
        CatalogItem oldCatalogItem = new CatalogItem();
199
        oldCatalogItem.setName("old");
200
        oldCatalogItem.setBibliography(Set.of(new Bibliography("old", oldCatalogItem)));
201
        oldCatalogItem.setTypes(Set.of(typeOld));
202
        oldCatalogItem.setAlternativeNames(Set.of(new AlternativeName("old", oldCatalogItem)));
203
        oldCatalogItem.setCountries(Set.of(new Country("old", oldCatalogItem)));
204
        oldCatalogItem.setWrittenForms(Set.of(new WrittenForm("old", catalogItem)));
205
        oldCatalogItem.setCertainty(10);
206
        oldCatalogItem.setLatitude(10.1);
207
        oldCatalogItem.setLongitude(10.2);
208

    
209
        given(catalogItemRepository.findById(id)).willReturn(Optional.of(oldCatalogItem));
210
        given(typeService.getTypeByName(anyString())).willReturn(Optional.empty());
211

    
212
        // when
213

    
214
        underTest.updateCatalogItem(id, catalogItemDto);
215

    
216
        // then
217
        verify(typeService).saveType(type);
218

    
219
        ArgumentCaptor<CatalogItem> argumentCaptor = ArgumentCaptor.forClass(CatalogItem.class);
220

    
221
        verify(catalogItemRepository).save(argumentCaptor.capture());
222

    
223
        CatalogItem capturedCatalogItem = argumentCaptor.getValue();
224

    
225
        assertThat(capturedCatalogItem).isEqualTo(catalogItem);
226
    }
227

    
228
    @Test
229
    void testCanNotUpdateCatalogItem() {
230
        // given
231
        UUID id = UUID.randomUUID();
232

    
233
        CatalogItemDto catalogItemDto = new CatalogItemDto();
234
        catalogItemDto.setName("name");
235
        catalogItemDto.setBibliography(Set.of("bibl"));
236
        catalogItemDto.setTypes(Set.of("type"));
237
        catalogItemDto.setAlternativeNames(Set.of("altName"));
238
        catalogItemDto.setCountries(Set.of("country"));
239
        catalogItemDto.setWrittenForms(Set.of("written"));
240
        catalogItemDto.setCertainty(0);
241
        catalogItemDto.setLatitude(0.1);
242
        catalogItemDto.setLongitude(0.2);
243

    
244
        // when
245
        // then
246
        assertThatThrownBy(() -> underTest.updateCatalogItem(id, catalogItemDto))
247
                .isInstanceOf(ApiRequestException.class)
248
                .hasMessageContaining("Catalog item not found");
249

    
250
        verify(catalogItemRepository, never()).save(any());
251
        verify(typeService, never()).saveType(any());
252
    }
253

    
254
    @Test
255
    void testCanDeleteCatalogItem() {
256
        // given
257
        UUID id = UUID.randomUUID();
258
        given(catalogItemRepository.existsById(id)).willReturn(true);
259

    
260
        // when
261
        underTest.deleteCatalogItem(id);
262

    
263
        // then
264
        verify(catalogItemRepository).deleteById(id);
265
    }
266

    
267
    @Test
268
    void testCanNotDeleteCatalogItem() {
269
        // given
270
        UUID id = UUID.randomUUID();
271
        given(catalogItemRepository.existsById(id)).willReturn(false);
272

    
273
        // when
274
        // then
275
        assertThatThrownBy(() -> underTest.deleteCatalogItem(id))
276
                .isInstanceOf(ApiRequestException.class)
277
                .hasMessageContaining("Catalog item not found");
278

    
279
        verify(catalogItemRepository, never()).deleteById(any());
280
    }
281

    
282
    @Test
283
    void getCatalog() {
284
        // given
285
        String name = "aaa?bb*aa";
286
        String country = "aaa?bb*aa";
287
        String type = "aaa?bb*aa";
288
        String nameChanged = "aaa_bb%aa";
289
        String countryChanged = "aaa_bb%aa";
290
        String typeChanged = "aaa_bb%aa";
291

    
292
        Type typeEntity = new Type(type);
293

    
294
        CatalogItem catalogItem = new CatalogItem();
295
        catalogItem.setName("aaacbbbbbbbaa");
296
        catalogItem.setBibliography(Set.of(new Bibliography("bibl", catalogItem)));
297
        catalogItem.setTypes(Set.of(typeEntity));
298
        catalogItem.setAlternativeNames(Set.of(new AlternativeName("altName", catalogItem)));
299
        catalogItem.setCountries(Set.of(new Country("aaaabbaa", catalogItem)));
300
        catalogItem.setWrittenForms(Set.of(new WrittenForm("written", catalogItem)));
301
        catalogItem.setCertainty(0);
302
        catalogItem.setLatitude(0.1);
303
        catalogItem.setLongitude(0.2);
304

    
305
        CatalogItem catalogItem2 = new CatalogItem();
306
        catalogItem2.setName("name");
307
        catalogItem2.setBibliography(Set.of(new Bibliography("bibl", catalogItem2)));
308
        catalogItem2.setTypes(Set.of(typeEntity));
309
        catalogItem2.setAlternativeNames(Set.of(new AlternativeName("aaaabbbbbbaa", catalogItem2)));
310
        catalogItem2.setCountries(Set.of(new Country("aaaabbcccefaa", catalogItem2)));
311
        catalogItem2.setWrittenForms(Set.of(new WrittenForm("written", catalogItem2)));
312
        catalogItem2.setCertainty(1);
313
        catalogItem2.setLatitude(1.1);
314
        catalogItem2.setLongitude(1.2);
315

    
316
        CatalogItemDto catalogItemDto = new CatalogItemDto();
317
        catalogItemDto.setName("aaacbbbbbbbaa");
318
        catalogItemDto.setBibliography(Set.of("bibl"));
319
        catalogItemDto.setTypes(Set.of("aaa?bb*aa"));
320
        catalogItemDto.setAlternativeNames(Set.of("altName"));
321
        catalogItemDto.setCountries(Set.of("aaaabbaa"));
322
        catalogItemDto.setWrittenForms(Set.of("written"));
323
        catalogItemDto.setCertainty(0);
324
        catalogItemDto.setLatitude(0.1);
325
        catalogItemDto.setLongitude(0.2);
326

    
327
        CatalogItemDto catalogItemDto2 = new CatalogItemDto();
328
        catalogItemDto2.setName("name");
329
        catalogItemDto2.setBibliography(Set.of("bibl"));
330
        catalogItemDto2.setTypes(Set.of("aaa?bb*aa"));
331
        catalogItemDto2.setAlternativeNames(Set.of("aaaabbbbbbaa"));
332
        catalogItemDto2.setCountries(Set.of("aaaabbcccefaa"));
333
        catalogItemDto2.setWrittenForms(Set.of("written"));
334
        catalogItemDto2.setCertainty(1);
335
        catalogItemDto2.setLatitude(1.1);
336
        catalogItemDto2.setLongitude(1.2);
337

    
338
        given(catalogItemRepository.filterCatalog(nameChanged, countryChanged, typeChanged)).willReturn(Set.of(catalogItem, catalogItem2));
339

    
340
        // when
341
        List<CatalogItemDto> results = underTest.getCatalog(name, country, type);
342

    
343
        // then
344
        assertThat(results.size()).isEqualTo(2);
345
        assertTrue(results.contains(catalogItemDto));
346
        assertTrue(results.contains(catalogItemDto2));
347

    
348
        verify(catalogItemRepository).filterCatalog(nameChanged, countryChanged, typeChanged);
349
    }
350

    
351
    @Test
352
    void testSearchedTest() {
353
        // given
354
        String text = "The city of Azbar was found in first century near the ocean. " +
355
                "⌈U-re-me-re⌉, another town, was found " +
356
                "in 1956. The location of Huga and Duga is not known, but it was probably near Puga.";
357
        String highlightedText = "The <b>city</b> of <span style='color:green'>Azbar</span> was found in first century near the <b>ocean</b>. " +
358
                "⌈<span style='color:green'>U-re-me-re</span>⌉, another town, was found " +
359
                "in 1956. The location of <span style='color:red'>Huga</span> and <span style='color:red'>Duga</span> is not known, but it was probably near Puga.";
360

    
361
        CatalogItem catalogItem1 = new CatalogItem();
362
        catalogItem1.setAlternativeNames(Stream.of(new AlternativeName("Azbar", catalogItem1)).collect(Collectors.toSet()));
363
        catalogItem1.setLatitude(5);
364
        catalogItem1.setLongitude(5);
365

    
366
        CatalogItem catalogItem2 = new CatalogItem();
367
        catalogItem2.setAlternativeNames(Stream.of(new AlternativeName("Azbar", catalogItem2), new AlternativeName("Azbarasdf", catalogItem2)).collect(Collectors.toSet()));
368
        catalogItem2.setLatitude(0.0);
369
        catalogItem2.setLongitude(0.0);
370

    
371
        CatalogItem catalogItem3 = new CatalogItem();
372
        catalogItem3.setAlternativeNames(Stream.of(new AlternativeName("U-re-me-re", catalogItem3)).collect(Collectors.toSet()));
373
        catalogItem3.setLatitude(55);
374
        catalogItem3.setLongitude(68);
375

    
376
        CatalogItem catalogItem4 = new CatalogItem();
377
        catalogItem4.setAlternativeNames(Stream.of(new AlternativeName("Huga", catalogItem4)).collect(Collectors.toSet()));
378
        catalogItem4.setLatitude(0.0);
379
        catalogItem4.setLongitude(0.0);
380

    
381
        CatalogItem catalogItem5 = new CatalogItem();
382
        catalogItem5.setAlternativeNames(Stream.of(new AlternativeName("Huga", catalogItem5), new AlternativeName("Hugaa", catalogItem5)).collect(Collectors.toSet()));
383
        catalogItem5.setLatitude(0.0);
384
        catalogItem5.setLongitude(0.0);
385

    
386
        CatalogItem catalogItem6 = new CatalogItem();
387
        catalogItem6.setAlternativeNames(Stream.of(new AlternativeName("Duga", catalogItem6)).collect(Collectors.toSet()));
388
        catalogItem6.setLatitude(0.0);
389
        catalogItem6.setLongitude(0.0);
390

    
391
        CatalogItemDto catalogItemDto1 = new CatalogItemDto();
392
        catalogItemDto1.setAlternativeNames(Stream.of("Azbar").collect(Collectors.toSet()));
393
        catalogItemDto1.setLatitude(5);
394
        catalogItemDto1.setLongitude(5);
395

    
396
        CatalogItemDto catalogItemDto2 = new CatalogItemDto();
397
        catalogItemDto2.setAlternativeNames(Stream.of("Azbar", "Azbarasdf").collect(Collectors.toSet()));
398
        catalogItemDto2.setLatitude(0.0);
399
        catalogItemDto2.setLongitude(0.0);
400

    
401
        CatalogItemDto catalogItemDto3 = new CatalogItemDto();
402
        catalogItemDto3.setAlternativeNames(Stream.of("U-re-me-re").collect(Collectors.toSet()));
403
        catalogItemDto3.setLatitude(55);
404
        catalogItemDto3.setLongitude(68);
405

    
406
        CatalogItemDto catalogItemDto4 = new CatalogItemDto();
407
        catalogItemDto4.setAlternativeNames(Stream.of("Huga").collect(Collectors.toSet()));
408
        catalogItemDto4.setLatitude(0.0);
409
        catalogItemDto4.setLongitude(0.0);
410

    
411
        CatalogItemDto catalogItemDto5 = new CatalogItemDto();
412
        catalogItemDto5.setAlternativeNames(Stream.of("Huga", "Hugaa").collect(Collectors.toSet()));
413
        catalogItemDto5.setLatitude(0.0);
414
        catalogItemDto5.setLongitude(0.0);
415

    
416
        CatalogItemDto catalogItemDto6 = new CatalogItemDto();
417
        catalogItemDto6.setAlternativeNames(Stream.of("Duga").collect(Collectors.toSet()));
418
        catalogItemDto6.setLatitude(0.0);
419
        catalogItemDto6.setLongitude(0.0);
420

    
421

    
422
        given(typeService.getAllTypesAsString()).willReturn(Stream.of("city", "ocean").collect(Collectors.toSet()));
423
        given(catalogItemRepository.getItemsByName(anyString())).willReturn(Collections.emptyList());
424
        given(catalogItemRepository.getItemsByName("Azbar")).willReturn(Stream.of(catalogItem1, catalogItem2).collect(Collectors.toList()));
425
        given(catalogItemRepository.getItemsByName("U-re-me-re")).willReturn(Stream.of(catalogItem3).collect(Collectors.toList()));
426
        given(catalogItemRepository.getItemsByName("Huga")).willReturn(Stream.of(catalogItem4, catalogItem5).collect(Collectors.toList()));
427
        given(catalogItemRepository.getItemsByName("Duga")).willReturn(Stream.of(catalogItem6).collect(Collectors.toList()));
428

    
429
        // when
430
        PathDto pathDto = underTest.getPath(text);
431

    
432
        // then
433
        verify(catalogItemRepository).getItemsByName("Azbar");
434
        verify(catalogItemRepository).getItemsByName("U-re-me-re");
435
        verify(catalogItemRepository).getItemsByName("Huga");
436
        verify(catalogItemRepository).getItemsByName("Duga");
437
        verify(catalogItemRepository).getItemsByName("Puga");
438

    
439
        assertThat(pathDto.getText()).isEqualTo(highlightedText);
440

    
441
        assertThat(pathDto.getFoundCatalogItems().size()).isEqualTo(4);
442

    
443
        assertThat(pathDto.getFoundCatalogItems().get(0).size()).isEqualTo(2);
444
        assertThat(pathDto.getFoundCatalogItems().get(0).get(0)).isEqualTo(catalogItemDto1);
445
        assertThat(pathDto.getFoundCatalogItems().get(0).get(1)).isEqualTo(catalogItemDto2);
446

    
447
        assertThat(pathDto.getFoundCatalogItems().get(1).size()).isEqualTo(1);
448
        assertThat(pathDto.getFoundCatalogItems().get(1).get(0)).isEqualTo(catalogItemDto3);
449

    
450
        assertThat(pathDto.getFoundCatalogItems().get(2).size()).isEqualTo(2);
451
        assertThat(pathDto.getFoundCatalogItems().get(2).get(0)).isEqualTo(catalogItemDto4);
452
        assertThat(pathDto.getFoundCatalogItems().get(2).get(1)).isEqualTo(catalogItemDto5);
453

    
454
        assertThat(pathDto.getFoundCatalogItems().get(3).size()).isEqualTo(1);
455
        assertThat(pathDto.getFoundCatalogItems().get(3).get(0)).isEqualTo(catalogItemDto6);
456
    }
457
}
(2-2/2)