Projekt

Obecné

Profil

Stáhnout (19.1 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.mockito.ArgumentMatchers.any;
25
import static org.mockito.ArgumentMatchers.anyString;
26
import static org.mockito.BDDMockito.given;
27
import static org.mockito.Mockito.never;
28
import static org.mockito.Mockito.verify;
29

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

    
33
    @Mock
34
    private CatalogItemRepository catalogItemRepository;
35

    
36
    @Mock
37
    private TypeServiceImpl typeService;
38

    
39
    private CatalogItemServiceImpl underTest;
40

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

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

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

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

    
73
        List<CatalogItem> catalog = List.of(catalogItem, catalogItem2);
74

    
75
        given(typeService.getTypeByName(anyString())).willReturn(Optional.of(type));
76

    
77
        // when
78
        underTest.saveCatalog(catalog);
79

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

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

    
101
        Type type = new Type("type");
102

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

    
115
        given(typeService.getTypeByName(anyString())).willReturn(Optional.of(type));
116

    
117
        // when
118
        underTest.saveCatalogItem(catalogItemDto);
119

    
120
        // then
121
        ArgumentCaptor<CatalogItem> argumentCaptor = ArgumentCaptor.forClass(CatalogItem.class);
122

    
123
        verify(catalogItemRepository).save(argumentCaptor.capture());
124
        verify(typeService, never()).saveType(type);
125

    
126
        CatalogItem capturedItem = argumentCaptor.getValue();
127

    
128
        assertThat(capturedItem.getName()).isEqualTo(catalogItem.getName());
129
        assertThat(capturedItem.getLongitude()).isEqualTo(catalogItem.getLongitude());
130
        assertThat(capturedItem.getLatitude()).isEqualTo(catalogItem.getLatitude());
131
        assertThat(capturedItem.getCertainty()).isEqualTo(catalogItem.getCertainty());
132
        assertThat(capturedItem.getAlternativeNames().size()).isEqualTo(catalogItem.getAlternativeNames().size());
133
        assertThat(capturedItem.getBibliography().size()).isEqualTo(catalogItem.getBibliography().size());
134
        assertThat(capturedItem.getCountries().size()).isEqualTo(catalogItem.getCountries().size());
135
        assertThat(capturedItem.getWrittenForms().size()).isEqualTo(catalogItem.getWrittenForms().size());
136
        assertThat(capturedItem.getTypes().size()).isEqualTo(catalogItem.getTypes().size());
137
        assertThat(capturedItem.getDescription()).isEqualTo(catalogItem.getDescription());
138

    
139
    }
140

    
141
    @Test
142
    void testCanGetCatalogItem() {
143
        // given
144
        UUID id = UUID.randomUUID();
145
        CatalogItem catalogItem = new CatalogItem();
146
        catalogItem.setId(id);
147
        CatalogItemDto catalogItemDto = new CatalogItemDto();
148
        catalogItemDto.setId(id);
149
        given(catalogItemRepository.findById(id)).willReturn(Optional.of(catalogItem));
150

    
151
        // when
152
        CatalogItemDto retrievedItemDto = underTest.getCatalogItem(id);
153

    
154
        // then
155
        verify(catalogItemRepository).findById(id);
156
        assertThat(retrievedItemDto).isEqualTo(catalogItemDto);
157
    }
158

    
159
    @Test
160
    void testCanNotGetCatalogItem() {
161
        // given
162
        UUID id = UUID.randomUUID();
163

    
164
        // when
165
        // then
166
        assertThatThrownBy(() -> underTest.getCatalogItem(id))
167
                .isInstanceOf(ApiRequestException.class)
168
                .hasMessageContaining("Catalog item not found");
169

    
170
        verify(catalogItemRepository).findById(id);
171
    }
172

    
173
    @Test
174
    void testCanUpdateCatalogItem() {
175
        // given
176
        UUID id = UUID.randomUUID();
177

    
178
        CatalogItemDto catalogItemDto = new CatalogItemDto();
179
        catalogItemDto.setName("name");
180
        catalogItemDto.setBibliography(Set.of("bibl"));
181
        catalogItemDto.setTypes(Set.of("type"));
182
        catalogItemDto.setAlternativeNames(Set.of("altName"));
183
        catalogItemDto.setCountries(Set.of("country"));
184
        catalogItemDto.setWrittenForms(Set.of("written"));
185
        catalogItemDto.setCertainty(0);
186
        catalogItemDto.setLatitude(0.1);
187
        catalogItemDto.setLongitude(0.2);
188
        catalogItemDto.setDescription("description");
189

    
190
        Type type = new Type("type");
191
        Type typeOld = new Type("old");
192

    
193
        CatalogItem catalogItem = new CatalogItem();
194
        catalogItem.setId(id);
195
        catalogItem.setName("name");
196
        catalogItem.setBibliography(Stream.of(new Bibliography("bibl", catalogItem)).collect(Collectors.toSet()));
197
        catalogItem.setTypes(Stream.of(type).collect(Collectors.toSet()));
198
        catalogItem.setAlternativeNames(Stream.of(new AlternativeName("altName", catalogItem)).collect(Collectors.toSet()));
199
        catalogItem.setCountries(Stream.of(new Country("country", catalogItem)).collect(Collectors.toSet()));
200
        catalogItem.setWrittenForms(Stream.of(new WrittenForm("written", catalogItem)).collect(Collectors.toSet()));
201
        catalogItem.setCertainty(0);
202
        catalogItem.setLatitude(0.1);
203
        catalogItem.setLongitude(0.2);
204
        catalogItem.setDescription("description");
205

    
206
        CatalogItem oldCatalogItem = new CatalogItem();
207
        oldCatalogItem.setId(id);
208
        oldCatalogItem.setName("old");
209
        oldCatalogItem.setBibliography(Stream.of(new Bibliography("old", oldCatalogItem)).collect(Collectors.toSet()));
210
        oldCatalogItem.setTypes(Stream.of(typeOld).collect(Collectors.toSet()));
211
        oldCatalogItem.setAlternativeNames(Stream.of(new AlternativeName("old", oldCatalogItem)).collect(Collectors.toSet()));
212
        oldCatalogItem.setCountries(Stream.of(new Country("old", oldCatalogItem)).collect(Collectors.toSet()));
213
        oldCatalogItem.setWrittenForms(Stream.of(new WrittenForm("old", catalogItem)).collect(Collectors.toSet()));
214
        oldCatalogItem.setCertainty(10);
215
        oldCatalogItem.setLatitude(10.1);
216
        oldCatalogItem.setLongitude(10.2);
217

    
218
        given(catalogItemRepository.findById(id)).willReturn(Optional.of(oldCatalogItem));
219
        given(typeService.getTypeByName(anyString())).willReturn(Optional.empty());
220

    
221
        // when
222

    
223
        underTest.updateCatalogItem(id, catalogItemDto);
224

    
225
        // then
226
        verify(typeService).saveType(type);
227

    
228
        ArgumentCaptor<CatalogItem> argumentCaptor = ArgumentCaptor.forClass(CatalogItem.class);
229

    
230
        verify(catalogItemRepository).save(argumentCaptor.capture());
231

    
232
        CatalogItem capturedCatalogItem = argumentCaptor.getValue();
233

    
234
        assertThat(capturedCatalogItem).isEqualTo(catalogItem);
235
        assertThat(capturedCatalogItem.getCertainty()).isEqualTo(catalogItem.getCertainty());
236
        assertThat(capturedCatalogItem.getLatitude()).isEqualTo(catalogItem.getLatitude());
237
        assertThat(capturedCatalogItem.getLongitude()).isEqualTo(catalogItem.getLongitude());
238
        assertThat(capturedCatalogItem.getDescription()).isEqualTo(catalogItem.getDescription());
239
        assertThat(capturedCatalogItem.getTypes().stream().map(Type::getType).collect(Collectors.toSet())).isEqualTo(catalogItem.getTypes().stream().map(Type::getType).collect(Collectors.toSet()));
240
        assertThat(capturedCatalogItem.getAlternativeNames().stream().map(AlternativeName::getName).collect(Collectors.toSet())).isEqualTo(catalogItem.getAlternativeNames().stream().map(AlternativeName::getName).collect(Collectors.toSet()));
241
        assertThat(capturedCatalogItem.getCountries().stream().map(Country::getName).collect(Collectors.toSet())).isEqualTo(catalogItem.getCountries().stream().map(Country::getName).collect(Collectors.toSet()));
242
        assertThat(capturedCatalogItem.getBibliography().stream().map(Bibliography::getSource).collect(Collectors.toSet())).isEqualTo(catalogItem.getBibliography().stream().map(Bibliography::getSource).collect(Collectors.toSet()));
243
        assertThat(capturedCatalogItem.getWrittenForms().stream().map(WrittenForm::getForm).collect(Collectors.toSet())).isEqualTo(catalogItem.getWrittenForms().stream().map(WrittenForm::getForm).collect(Collectors.toSet()));
244
    }
245

    
246
    @Test
247
    void testCanNotUpdateCatalogItem() {
248
        // given
249
        UUID id = UUID.randomUUID();
250

    
251
        CatalogItemDto catalogItemDto = new CatalogItemDto();
252
        catalogItemDto.setName("name");
253
        catalogItemDto.setBibliography(Set.of("bibl"));
254
        catalogItemDto.setTypes(Set.of("type"));
255
        catalogItemDto.setAlternativeNames(Set.of("altName"));
256
        catalogItemDto.setCountries(Set.of("country"));
257
        catalogItemDto.setWrittenForms(Set.of("written"));
258
        catalogItemDto.setCertainty(0);
259
        catalogItemDto.setLatitude(0.1);
260
        catalogItemDto.setLongitude(0.2);
261

    
262
        // when
263
        // then
264
        assertThatThrownBy(() -> underTest.updateCatalogItem(id, catalogItemDto))
265
                .isInstanceOf(ApiRequestException.class)
266
                .hasMessageContaining("Catalog item not found");
267

    
268
        verify(catalogItemRepository, never()).save(any());
269
        verify(typeService, never()).saveType(any());
270
    }
271

    
272
    @Test
273
    void testCanDeleteCatalogItem() {
274
        // given
275
        UUID id = UUID.randomUUID();
276
        given(catalogItemRepository.existsById(id)).willReturn(true);
277

    
278
        // when
279
        underTest.deleteCatalogItem(id);
280

    
281
        // then
282
        verify(catalogItemRepository).deleteById(id);
283
    }
284

    
285
    @Test
286
    void testCanNotDeleteCatalogItem() {
287
        // given
288
        UUID id = UUID.randomUUID();
289
        given(catalogItemRepository.existsById(id)).willReturn(false);
290

    
291
        // when
292
        // then
293
        assertThatThrownBy(() -> underTest.deleteCatalogItem(id))
294
                .isInstanceOf(ApiRequestException.class)
295
                .hasMessageContaining("Catalog item not found");
296

    
297
        verify(catalogItemRepository, never()).deleteById(any());
298
    }
299

    
300

    
301

    
302
    @Test
303
    void testSearchedTest() {
304
        // given
305
        String text = "The city of Azbar was found in first century near the ocean. " +
306
                "⌈U-re-me-re⌉, another town, was found " +
307
                "in 1956. The location of Huga and Duga is not known, but it was probably near Puga.";
308
        String highlightedText = "The <b>city</b> of <span style='color:green'>Azbar</span> was found in first century near the <b>ocean</b>. " +
309
                "⌈<span style='color:green'>U-re-me-re</span>⌉, another town, was found " +
310
                "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.";
311

    
312
        CatalogItem catalogItem1 = new CatalogItem();
313
        catalogItem1.setAlternativeNames(Stream.of(new AlternativeName("Azbar", catalogItem1)).collect(Collectors.toSet()));
314
        catalogItem1.setLatitude(5.0);
315
        catalogItem1.setLongitude(5.0);
316

    
317
        CatalogItem catalogItem2 = new CatalogItem();
318
        catalogItem2.setAlternativeNames(Stream.of(new AlternativeName("Azbar", catalogItem2), new AlternativeName("Azbarasdf", catalogItem2)).collect(Collectors.toSet()));
319
        catalogItem2.setLatitude(null);
320
        catalogItem2.setLongitude(null);
321

    
322
        CatalogItem catalogItem3 = new CatalogItem();
323
        catalogItem3.setAlternativeNames(Stream.of(new AlternativeName("U-re-me-re", catalogItem3)).collect(Collectors.toSet()));
324
        catalogItem3.setLatitude(55.0);
325
        catalogItem3.setLongitude(68.0);
326

    
327
        CatalogItem catalogItem4 = new CatalogItem();
328
        catalogItem4.setAlternativeNames(Stream.of(new AlternativeName("Huga", catalogItem4)).collect(Collectors.toSet()));
329
        catalogItem4.setLatitude(null);
330
        catalogItem4.setLongitude(null);
331

    
332
        CatalogItem catalogItem5 = new CatalogItem();
333
        catalogItem5.setAlternativeNames(Stream.of(new AlternativeName("Huga", catalogItem5), new AlternativeName("Hugaa", catalogItem5)).collect(Collectors.toSet()));
334
        catalogItem5.setLatitude(null);
335
        catalogItem5.setLongitude(null);
336

    
337
        CatalogItem catalogItem6 = new CatalogItem();
338
        catalogItem6.setAlternativeNames(Stream.of(new AlternativeName("Duga", catalogItem6)).collect(Collectors.toSet()));
339
        catalogItem6.setLatitude(null);
340
        catalogItem6.setLongitude(null);
341

    
342
        CatalogItemDto catalogItemDto1 = new CatalogItemDto();
343
        catalogItemDto1.setId(catalogItem1.getId());
344
        catalogItemDto1.setAlternativeNames(Stream.of("Azbar").collect(Collectors.toSet()));
345
        catalogItemDto1.setLatitude(5.0);
346
        catalogItemDto1.setLongitude(5.0);
347

    
348
        CatalogItemDto catalogItemDto2 = new CatalogItemDto();
349
        catalogItemDto2.setId(catalogItem2.getId());
350
        catalogItemDto2.setAlternativeNames(Stream.of("Azbar", "Azbarasdf").collect(Collectors.toSet()));
351
        catalogItemDto2.setLatitude(null);
352
        catalogItemDto2.setLongitude(null);
353

    
354
        CatalogItemDto catalogItemDto3 = new CatalogItemDto();
355
        catalogItemDto3.setId(catalogItem3.getId());
356
        catalogItemDto3.setAlternativeNames(Stream.of("U-re-me-re").collect(Collectors.toSet()));
357
        catalogItemDto3.setLatitude(55.0);
358
        catalogItemDto3.setLongitude(68.0);
359

    
360
        CatalogItemDto catalogItemDto4 = new CatalogItemDto();
361
        catalogItemDto4.setId(catalogItem4.getId());
362
        catalogItemDto4.setAlternativeNames(Stream.of("Huga").collect(Collectors.toSet()));
363
        catalogItemDto4.setLatitude(null);
364
        catalogItemDto4.setLongitude(null);
365

    
366
        CatalogItemDto catalogItemDto5 = new CatalogItemDto();
367
        catalogItemDto5.setId(catalogItem5.getId());
368
        catalogItemDto5.setAlternativeNames(Stream.of("Huga", "Hugaa").collect(Collectors.toSet()));
369
        catalogItemDto5.setLatitude(null);
370
        catalogItemDto5.setLongitude(null);
371

    
372
        CatalogItemDto catalogItemDto6 = new CatalogItemDto();
373
        catalogItemDto6.setId(catalogItem6.getId());
374
        catalogItemDto6.setAlternativeNames(Stream.of("Duga").collect(Collectors.toSet()));
375
        catalogItemDto6.setLatitude(null);
376
        catalogItemDto6.setLongitude(null);
377

    
378

    
379
        given(typeService.getAllTypesAsString()).willReturn(Stream.of("city", "ocean").collect(Collectors.toSet()));
380
        given(catalogItemRepository.getItemsByName(anyString())).willReturn(Collections.emptyList());
381
        given(catalogItemRepository.getItemsByName("Azbar")).willReturn(Stream.of(catalogItem1, catalogItem2).collect(Collectors.toList()));
382
        given(catalogItemRepository.getItemsByName("U-re-me-re")).willReturn(Stream.of(catalogItem3).collect(Collectors.toList()));
383
        given(catalogItemRepository.getItemsByName("Huga")).willReturn(Stream.of(catalogItem4, catalogItem5).collect(Collectors.toList()));
384
        given(catalogItemRepository.getItemsByName("Duga")).willReturn(Stream.of(catalogItem6).collect(Collectors.toList()));
385

    
386
        // when
387
        PathDto pathDto = underTest.getPath(text);
388

    
389
        // then
390
        verify(catalogItemRepository).getItemsByName("Azbar");
391
        verify(catalogItemRepository).getItemsByName("U-re-me-re");
392
        verify(catalogItemRepository).getItemsByName("Huga");
393
        verify(catalogItemRepository).getItemsByName("Duga");
394
        verify(catalogItemRepository).getItemsByName("Puga");
395

    
396
        assertThat(pathDto.getText()).isEqualTo(highlightedText);
397

    
398
        assertThat(pathDto.getFoundCatalogItems().size()).isEqualTo(4);
399

    
400
        assertThat(pathDto.getFoundCatalogItems().get(0).size()).isEqualTo(2);
401
        assertThat(pathDto.getFoundCatalogItems().get(0).get(0)).isEqualTo(catalogItemDto1);
402
        assertThat(pathDto.getFoundCatalogItems().get(0).get(1)).isEqualTo(catalogItemDto2);
403

    
404
        assertThat(pathDto.getFoundCatalogItems().get(1).size()).isEqualTo(1);
405
        assertThat(pathDto.getFoundCatalogItems().get(1).get(0)).isEqualTo(catalogItemDto3);
406

    
407
        assertThat(pathDto.getFoundCatalogItems().get(2).size()).isEqualTo(2);
408
        assertThat(pathDto.getFoundCatalogItems().get(2).get(0)).isEqualTo(catalogItemDto4);
409
        assertThat(pathDto.getFoundCatalogItems().get(2).get(1)).isEqualTo(catalogItemDto5);
410

    
411
        assertThat(pathDto.getFoundCatalogItems().get(3).size()).isEqualTo(1);
412
        assertThat(pathDto.getFoundCatalogItems().get(3).get(0)).isEqualTo(catalogItemDto6);
413
    }
414
}
(3-3/3)