View Javadoc
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 }