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 }