View Javadoc
1   package org.woehlke.bloodmoney.measurements;
2   
3   import lombok.Getter;
4   import lombok.extern.slf4j.Slf4j;
5   import org.junit.jupiter.api.Assertions;
6   import org.junit.jupiter.api.Test;
7   import org.springframework.beans.factory.annotation.Autowired;
8   import org.springframework.boot.test.context.SpringBootTest;
9   import org.springframework.data.domain.Page;
10  import org.springframework.data.domain.PageRequest;
11  import org.springframework.data.domain.Pageable;
12  import org.springframework.data.domain.Sort;
13  import org.springframework.test.context.ActiveProfiles;
14  import org.woehlke.bloodmoney.config.BloodMoneyProperties;
15  
16  import java.time.ZoneId;
17  import java.util.*;
18  
19  @Slf4j
20  @Getter
21  @ActiveProfiles("dev")
22  @SpringBootTest
23  public class BloodPressureMeasurementServiceTest {
24  
25      private final BloodPressureMeasurementService bloodPressureMeasurementService;
26      private final BloodMoneyProperties bloodMoneyProperties;
27  
28      private final List<BloodPressureMeasurementEntity> testData;
29      private final List<BloodPressureMeasurementEntity> testDataToAdd;
30      private final int testDataHowManyPlustestDataToAdd;
31      private final int testDataHowManyTestData;
32  
33      @Autowired
34      public BloodPressureMeasurementServiceTest(
35          BloodPressureMeasurementService bloodPressureMeasurementService,
36          BloodMoneyProperties bloodMoneyProperties) {
37          this.bloodPressureMeasurementService = bloodPressureMeasurementService;
38          this.bloodMoneyProperties = bloodMoneyProperties;
39          this.testDataHowManyTestData = this.bloodMoneyProperties.getTestDataHowManyTestData();
40          this.testData = new ArrayList<>();
41          this.testDataToAdd = new ArrayList<>();
42          for(int i = 0; i < testDataHowManyTestData; i++){
43              String situation = "LfdNr "+i+" New Measurement";
44              BloodPressureMeasurementEntity m = BloodPressureMeasurementEntity.getInstance(situation);
45              this.testData.add(m);
46          }
47          String situation = "added more Testdata";
48          BloodPressureMeasurementEntity m1 = BloodPressureMeasurementEntity.getInstance();
49          BloodPressureMeasurementEntity m2 = BloodPressureMeasurementEntity.getInstance(situation);
50          testDataToAdd.add(m1);
51          testDataToAdd.add(m2);
52          testDataHowManyPlustestDataToAdd = testDataHowManyTestData + testDataToAdd.size();
53          ZoneId zoneId = ZoneId.of(BloodPressureMeasurementEntity.ZONE_ID__ECT__EUROPE_PARIS);
54          TimeZone.setDefault(TimeZone.getTimeZone(zoneId.getId()));
55      }
56  
57      private void deletePersistentTestData(){
58          bloodPressureMeasurementService.deleteAll();
59      }
60  
61      private void persistTestData(){
62          List<BloodPressureMeasurementEntity> srcListe = this.getTestData();
63          Assertions.assertNotNull(srcListe);
64          for(BloodPressureMeasurementEntity m:srcListe){
65              bloodPressureMeasurementService.add(m);
66          }
67      }
68  
69      private void persistMuchTestData(){
70          List<BloodPressureMeasurementEntity> moreTestData = this.getTestData();
71          String situation;
72          int i;
73          for(i = 0; i < testDataHowManyTestData*20; i++){
74              situation = "LfdNr "+i+" New Measurement";
75              BloodPressureMeasurementEntity m = BloodPressureMeasurementEntity.getInstance(situation);
76              moreTestData.add(m);
77          }
78          i++;
79          situation = "LfdNr "+i+" New Measurement - added more Testdata";
80          BloodPressureMeasurementEntity m1 = BloodPressureMeasurementEntity.getInstance();
81          BloodPressureMeasurementEntity m2 = BloodPressureMeasurementEntity.getInstance(situation);
82          moreTestData.add(m1);
83          moreTestData.add(m2);
84          for(BloodPressureMeasurementEntity m : moreTestData){
85              bloodPressureMeasurementService.add(m);
86          }
87      }
88  
89      private void resetTestData(){
90          deletePersistentTestData();
91          persistTestData();
92      }
93  
94      @Test
95      public void deletePersitentTestDataTest(){
96          log.info("TEST: deletePersitentTestDataTest");
97          deletePersistentTestData();
98          List<BloodPressureMeasurementEntity> resultList = bloodPressureMeasurementService.getAll();
99          int assertCountExpected = 0;
100         int resultSize = resultList.size();
101         Assertions.assertTrue(resultList.isEmpty(),"getAll: resultList is Empty");
102         Assertions.assertEquals(assertCountExpected,resultSize,"getAll: resultList.size()");
103         Assertions.assertTrue(true);
104     }
105 
106     @Test
107     public void persistTestDataTest(){
108         log.info("TEST: persistTestDataTest");
109         deletePersistentTestData();
110         persistTestData();
111         List<BloodPressureMeasurementEntity> resultList = bloodPressureMeasurementService.getAll();
112         int assertCountExpected = testDataHowManyTestData;
113         int resultSize = resultList.size();
114         Assertions.assertFalse(resultList.isEmpty(),"getAll: resultList is Empty");
115         Assertions.assertEquals(assertCountExpected,resultSize,"getAll: resultList.size()");
116         Assertions.assertTrue(true);
117     }
118 
119     @Test
120     public void getAllListTest(){
121         log.info("TEST: getAllPageTest");
122         resetTestData();
123         List<BloodPressureMeasurementEntity> srcListe = this.getTestData();
124         List<BloodPressureMeasurementEntity> resultList = bloodPressureMeasurementService.getAll();
125         Assertions.assertNotNull(resultList);
126         Assertions.assertEquals(srcListe.size(),resultList.size(),"srcListe.size()==resultList.size()");
127         Assertions.assertEquals(testDataHowManyTestData,srcListe.size(),"srcListe.size()=="+testDataHowManyTestData);
128         Assertions.assertEquals(testDataHowManyTestData,resultList.size(),"resultList.size()==,"+testDataHowManyTestData);
129         for(int i = 0; i < testDataHowManyTestData; i++){
130             BloodPressureMeasurementEntity src = srcListe.get(i);
131             BloodPressureMeasurementEntity target = resultList.get(i);
132             BloodPressureMeasurementTest.assertTransientEqualsPersistent(src,target);
133         }
134         Assertions.assertTrue(true);
135     }
136 
137     @Test
138     public void getAllListAndAllFieldsNonNullTest(){
139         log.info("TEST: getAllListAndAllFieldsNonNullTest");
140         resetTestData();
141         List<BloodPressureMeasurementEntity> srcListe = this.getTestData();
142         List<BloodPressureMeasurementEntity> resultList = bloodPressureMeasurementService.getAll();
143         Assertions.assertNotNull(resultList);
144         Assertions.assertEquals(srcListe.size(),resultList.size(),"srcListe.size()==resultList.size()");
145         Assertions.assertEquals(testDataHowManyTestData,srcListe.size(),"srcListe.size()=="+testDataHowManyTestData);
146         Assertions.assertEquals(testDataHowManyTestData,resultList.size(),"resultList.size()==,"+testDataHowManyTestData);
147         for(int i = 0; i < testDataHowManyTestData; i++){
148             BloodPressureMeasurementEntity src = srcListe.get(i);
149             BloodPressureMeasurementEntity target = resultList.get(i);
150             BloodPressureMeasurementTest.assertTransientEqualsPersistent(src,target);
151             BloodPressureMeasurementTest.assertAllFieldNonNullForPersistent(target);
152         }
153         Assertions.assertTrue(true);
154     }
155 
156     private BloodPressureMeasurementEntity getRandomElement(){
157         long size = bloodPressureMeasurementService.count();
158         int mySize = Long.valueOf(size % Long.valueOf(Integer.MAX_VALUE)).intValue();
159         Random random = new Random();
160         int randomIndex = random.nextInt(mySize);
161         List<BloodPressureMeasurementEntity> resultList = bloodPressureMeasurementService.getAll();
162         BloodPressureMeasurementEntity randomEntity = resultList.get(randomIndex);
163         Assertions.assertNotNull(randomEntity);
164         Long idSrc = randomEntity.getId();
165         Assertions.assertNotNull(idSrc);
166         return randomEntity;
167     }
168 
169     @Test
170     public void getOneTest(){
171         log.info("TEST: getOneTest");
172         resetTestData();
173         BloodPressureMeasurementEntity src = getRandomElement();
174         Assertions.assertNotNull(src);
175         Long idSrc = src.getId();
176         BloodPressureMeasurementEntity target = bloodPressureMeasurementService.getOne(idSrc);
177         Long idTarget = target.getId();
178         Assertions.assertNotNull(idTarget);
179         Assertions.assertEquals(idSrc.longValue(), idTarget.longValue());
180         Assertions.assertTrue(true);
181     }
182 
183     @Test
184     public void addTest(){
185         log.info("TEST: addTest");
186         resetTestData();
187         List<BloodPressureMeasurementEntity> srcListe = this.getTestData();
188         List<BloodPressureMeasurementEntity> moreTestDataToAdd = this.getTestDataToAdd();
189         for(BloodPressureMeasurementEntity m : moreTestDataToAdd){
190             bloodPressureMeasurementService.add(m);
191         }
192         Assertions.assertEquals(testDataHowManyTestData,srcListe.size(),"srcListe.size()=="+testDataHowManyTestData);
193         moreTestDataToAdd = this.getTestDataToAdd();
194         srcListe.addAll(moreTestDataToAdd);
195         List<BloodPressureMeasurementEntity> resultList = bloodPressureMeasurementService.getAll();
196         Assertions.assertNotNull(resultList,"resultList != null");
197         Assertions.assertEquals(srcListe.size(),resultList.size(),"srcListe.size()==resultList.size()");
198         Assertions.assertEquals(testDataHowManyPlustestDataToAdd,srcListe.size(),"srcListe.size()=="+testDataHowManyPlustestDataToAdd);
199         Assertions.assertEquals(testDataHowManyPlustestDataToAdd,resultList.size(),"resultList.size()==,"+testDataHowManyPlustestDataToAdd);
200         for(int i = 0; i < testDataHowManyPlustestDataToAdd; i++){
201             BloodPressureMeasurementEntity src = srcListe.get(i);
202             BloodPressureMeasurementEntity target = resultList.get(i);
203             BloodPressureMeasurementTest.assertTransientEqualsPersistent(src,target);
204         }
205         Assertions.assertTrue(true);
206     }
207 
208     @Test
209     public void updateTest(){
210         log.info("TEST: getAllPageTest");
211         resetTestData();
212         BloodPressureMeasurementEntity src = getRandomElement();
213         Assertions.assertNotNull(src);
214         String situation = "Xfcfdcdcrd";
215         src.setSituation(situation);
216         BloodPressureMeasurementEntity target = bloodPressureMeasurementService.update(src,src.getId());
217         BloodPressureMeasurementTest.assertEquals(src,target);
218         BloodPressureMeasurementTest.assertEqualsUuid(src,target);
219         BloodPressureMeasurementTest.assertEqualsCreated(src,target);
220         Assertions.assertTrue(true);
221     }
222 
223     @Test
224     public void deleteTest(){
225         log.info("TEST: deleteTest");
226         resetTestData();
227         BloodPressureMeasurementEntity src = getRandomElement();
228         Assertions.assertNotNull(src);
229         Long id = src.getId();
230         Assertions.assertNotNull(id);
231         long countBefore = bloodPressureMeasurementService.count();
232         bloodPressureMeasurementService.delete(src);
233         long countAfter = bloodPressureMeasurementService.count();
234         Assertions.assertEquals(countBefore-1,countAfter,"count after deƶete");
235         Optional<BloodPressureMeasurementEntity> target = bloodPressureMeasurementService.findById(id);
236         Assertions.assertTrue(target.isPresent());
237         Assertions.assertTrue(true);
238     }
239 
240     @Test
241     public void getAllPagedTest(){
242         log.info("TEST: getAllPagedTest");
243         deletePersistentTestData();
244         persistMuchTestData();
245         int page = 1;
246         int size = 10;
247         String[] fields ={"updated","created"};
248         Sort sort = Sort.by(Sort.Direction.DESC, fields);
249         Pageable pageable = PageRequest.of(page,size,sort);
250         int getTotalPagesExpected = 22;
251         long getTotalElementsExpected = 212L;
252         int getSizeExpected = 10;
253         int getNumberOfElementsExpected = 10;
254         int getNumberOfElementsExpectedLastPage = 2;
255         int getNumberExpected = 1;
256         Page<BloodPressureMeasurementEntity> resultPage;
257         do {
258             resultPage = bloodPressureMeasurementService.getAll(pageable);
259             Assertions.assertEquals(getTotalPagesExpected, resultPage.getTotalPages(), " resultPage.getTotalPages()");
260             Assertions.assertEquals(getTotalElementsExpected, resultPage.getTotalElements(), "resultPage.getTotalElements()");
261             Assertions.assertEquals(getNumberExpected, resultPage.getNumber(), "resultPage.getNumber()");
262             Assertions.assertEquals(getSizeExpected, resultPage.getSize(), "resultPage.getSize()");
263             if(resultPage.isLast()){
264                 Assertions.assertEquals(getNumberOfElementsExpectedLastPage, resultPage.getNumberOfElements(), "resultPage.getNumberOfElements()");
265             } else {
266                 Assertions.assertEquals(getNumberOfElementsExpected, resultPage.getNumberOfElements(), "resultPage.getNumberOfElements()");
267             }
268             pageable = resultPage.nextPageable();
269             getNumberExpected++;
270         } while (resultPage.hasNext());
271         Assertions.assertTrue(true);
272     }
273 
274 }