1 package de.aikiit.bilanzanalyser.upload;
2
3 import de.aikiit.bilanzanalyser.entity.database.CategoryEntity;
4 import de.aikiit.bilanzanalyser.entity.database.PaymentEntity;
5 import de.aikiit.bilanzanalyser.entity.database.ShopEntity;
6 import de.aikiit.bilanzanalyser.entity.database.SourceEntity;
7 import de.aikiit.bilanzanalyser.entity.database.repository.BilanzRowRepository;
8 import de.aikiit.bilanzanalyser.entity.database.repository.CategoryRepository;
9 import de.aikiit.bilanzanalyser.entity.database.repository.PaymentRepository;
10 import de.aikiit.bilanzanalyser.entity.database.repository.ShopRepository;
11 import de.aikiit.bilanzanalyser.entity.database.repository.SourceRepository;
12 import org.junit.jupiter.api.Test;
13 import org.junit.jupiter.api.extension.ExtendWith;
14 import org.mockito.InjectMocks;
15 import org.mockito.Mock;
16 import org.mockito.junit.jupiter.MockitoExtension;
17
18 import java.util.Optional;
19
20 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
21 import static org.junit.jupiter.api.Assertions.assertSame;
22 import static org.mockito.ArgumentMatchers.any;
23 import static org.mockito.Mockito.never;
24 import static org.mockito.Mockito.verify;
25 import static org.mockito.Mockito.when;
26
27 @ExtendWith(MockitoExtension.class)
28 class UploadAnalysisServiceGetOrCreateTest {
29 @Mock
30 private BilanzRowRepository bilanzRowRepository;
31 @Mock
32 private ShopRepository shopRepository;
33 @Mock
34 private PaymentRepository paymentRepository;
35 @Mock
36 private CategoryRepository categoryRepository;
37 @Mock
38 private SourceRepository sourceRepository;
39
40 @InjectMocks
41 private UploadAnalysisService service;
42
43 @Test
44 void getOrCreatePayment_shouldReturnExisting() {
45 PaymentEntity existing = new PaymentEntity();
46 existing.setName("Cash");
47
48 when(paymentRepository.findByName("Cash")).thenReturn(Optional.of(existing));
49
50 PaymentEntity result = service.getOrCreatePayment("Cash");
51
52 assertSame(existing, result);
53 verify(paymentRepository, never()).save(any());
54 }
55
56 @Test
57 void getOrCreatePayment_shouldCreateNew() {
58 when(paymentRepository.findByName("Card")).thenReturn(Optional.empty());
59
60 PaymentEntity saved = new PaymentEntity();
61 saved.setName("Card");
62
63 when(paymentRepository.save(any())).thenReturn(saved);
64
65 PaymentEntity result = service.getOrCreatePayment("Card");
66
67 assertThat(result.getName()).isEqualTo("Card");
68 verify(paymentRepository).save(any());
69 }
70
71 @Test
72 void getOrCreateShop_shouldReturnExisting() {
73 ShopEntity existing = new ShopEntity();
74 existing.setName("MyShop");
75
76 when(shopRepository.findByName("MyShop")).thenReturn(Optional.of(existing));
77
78 ShopEntity result = service.getOrCreateShop("MyShop");
79
80 assertSame(existing, result);
81 verify(shopRepository, never()).save(any());
82 }
83
84 @Test
85 void getOrCreateShop_shouldCreateNew() {
86 when(shopRepository.findByName("MyNewShop")).thenReturn(Optional.empty());
87
88 ShopEntity saved = new ShopEntity();
89 saved.setName("MyNewShop");
90
91 when(shopRepository.save(any())).thenReturn(saved);
92
93 ShopEntity result = service.getOrCreateShop("MyNewShop");
94
95 assertThat(result.getName()).isEqualTo("MyNewShop");
96 verify(shopRepository).save(any());
97 }
98
99 @Test
100 void getOrCreateCategory_shouldReturnExisting() {
101 CategoryEntity existing = new CategoryEntity();
102 existing.setName("OurCategory");
103
104 when(categoryRepository.findByName("OurCategory")).thenReturn(Optional.of(existing));
105
106 CategoryEntity result = service.getOrCreateCategory("OurCategory");
107
108 assertSame(existing, result);
109 verify(categoryRepository, never()).save(any());
110 }
111
112 @Test
113 void getOrCreateCategory_shouldCreateNew() {
114 when(categoryRepository.findByName("MyNewCat")).thenReturn(Optional.empty());
115
116 CategoryEntity saved = new CategoryEntity();
117 saved.setName("MyNewCat");
118
119 when(categoryRepository.save(any())).thenReturn(saved);
120
121 CategoryEntity result = service.getOrCreateCategory("MyNewCat");
122
123 assertThat(result.getName()).isEqualTo("MyNewCat");
124 verify(categoryRepository).save(any());
125 }
126
127 @Test
128 void getOrCreateSource_shouldReturnExisting() {
129 SourceEntity existing = new SourceEntity();
130 existing.setName("Ours");
131
132 when(sourceRepository.findByName("Ours")).thenReturn(Optional.of(existing));
133
134 SourceEntity result = service.getOrCreateSource("Ours");
135
136 assertSame(existing, result);
137 verify(sourceRepository, never()).save(any());
138 }
139
140 @Test
141 void getOrCreateSource_shouldCreateNew() {
142 when(sourceRepository.findByName("Theirs")).thenReturn(Optional.empty());
143
144 SourceEntity saved = new SourceEntity();
145 saved.setName("Theirs");
146
147 when(sourceRepository.save(any())).thenReturn(saved);
148
149 SourceEntity result = service.getOrCreateSource("Theirs");
150
151 assertThat(result.getName()).isEqualTo("Theirs");
152 verify(sourceRepository).save(any());
153 }
154
155 }