From 18cfffe0ebbddee070648b9e15cc06ade23bb0d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 10 Mar 2021 01:40:59 +0300 Subject: [PATCH 1/7] Issue #257 fix 500 error with adding 'AmenityBookingService' --- .../repositories/AmenityRepository.java | 4 +- .../services/AmenityBookingService.java | 14 +++++++ .../AmenityBookingSDJpaService.java | 42 +++++++++++++++++++ .../springdatajpa/AmenitySDJpaService.java | 9 ++-- 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 service/src/main/java/com/myhome/services/AmenityBookingService.java create mode 100644 service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java diff --git a/service/src/main/java/com/myhome/repositories/AmenityRepository.java b/service/src/main/java/com/myhome/repositories/AmenityRepository.java index 7ba9efd4..8bfb98be 100644 --- a/service/src/main/java/com/myhome/repositories/AmenityRepository.java +++ b/service/src/main/java/com/myhome/repositories/AmenityRepository.java @@ -26,8 +26,8 @@ public interface AmenityRepository extends JpaRepository { @Query("from Amenity amenity where amenity.amenityId = :amenityId") - @EntityGraph(value = "Amenity.community") - Optional findByAmenityIdWithCommunity(@Param("amenityId") String amenityId); + @EntityGraph(value = "Amenity.community_house") + Optional findByAmenityIdWithCommunityAndHouse(@Param("amenityId") String amenityId); Optional findByAmenityId(String amenityId); } diff --git a/service/src/main/java/com/myhome/services/AmenityBookingService.java b/service/src/main/java/com/myhome/services/AmenityBookingService.java new file mode 100644 index 00000000..d293fbba --- /dev/null +++ b/service/src/main/java/com/myhome/services/AmenityBookingService.java @@ -0,0 +1,14 @@ +package com.myhome.services; + +import com.myhome.domain.Amenity; +import com.myhome.domain.AmenityBookingItem; + +import java.time.LocalDateTime; + +public interface AmenityBookingService { + AmenityBookingItem bookAmenity(Amenity amenity, LocalDateTime bookingStartDate, LocalDateTime bookingEndDate); + + boolean deleteBooking(String bookingId); + + boolean removeAllAmenityBookings(String amenityID); +} diff --git a/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java new file mode 100644 index 00000000..08e0f5fc --- /dev/null +++ b/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java @@ -0,0 +1,42 @@ +package com.myhome.services.springdatajpa; + +import com.myhome.domain.Amenity; +import com.myhome.domain.AmenityBookingItem; +import com.myhome.repositories.AmenityBookingItemRepository; +import com.myhome.services.AmenityBookingService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.HashSet; + +@Service +@RequiredArgsConstructor +public class AmenityBookingSDJpaService implements AmenityBookingService { + + private final AmenityBookingItemRepository bookingItemRepository; + + @Override + public AmenityBookingItem bookAmenity(Amenity amenity, LocalDateTime bookingStartDate, LocalDateTime bookingEndDate) { + AmenityBookingItem newBooking = new AmenityBookingItem(null, amenity, + bookingStartDate, bookingEndDate, null); + return bookingItemRepository.save(newBooking); + } + + @Override + public boolean deleteBooking(String bookingId) { + return bookingItemRepository.findByAmenityBookingItemId(bookingId) + .map(bookingItem -> { + bookingItemRepository.delete(bookingItem); + return true; + }) + .orElse(false); + } + + @Override + public boolean removeAllAmenityBookings(String amenityId) { + HashSet bookings = bookingItemRepository.findAllByAmenity_AmenityId(amenityId); + bookingItemRepository.deleteAll(bookings); + return false; + } +} diff --git a/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java index b6e7a8c2..709fc514 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java @@ -70,10 +70,13 @@ public Optional getAmenityDetails(String amenityId) { @Override public boolean deleteAmenity(String amenityId) { - return amenityRepository.findByAmenityIdWithCommunity(amenityId) + return amenityRepository.findByAmenityIdWithCommunityAndHouse(amenityId) .map(amenity -> { - Community community = amenity.getCommunity(); - community.getAmenities().remove(amenity); + amenityBookingService.removeAllAmenityBookings(amenity.getAmenityId()); + if(amenity.getCommunityHouse() != null) { + houseService.removeAmenityFromHouse(amenity.getCommunityHouse(), + amenity.getAmenityId()); + } amenityRepository.delete(amenity); return true; }) From e4446a843563381e507ba5f92093003399e7d16e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 10 Mar 2021 01:45:15 +0300 Subject: [PATCH 2/7] Issue #257 update test --- .../myhome/services/unit/AmenitySDJpaServiceTest.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java index 81463501..44985c93 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java @@ -68,6 +68,8 @@ class AmenitySDJpaServiceTest { @Mock private AmenityApiMapper amenityApiMapper; @Mock + private AmenityBookingService amenityBookingService; + @Mock private AmenityBookingItemRepository bookingItemRepository; @InjectMocks @@ -84,7 +86,7 @@ void deleteAmenity() { Amenity testAmenity = TestUtils.AmenityHelpers.getTestAmenity(TEST_AMENITY_ID, TEST_AMENITY_DESCRIPTION); - given(amenityRepository.findByAmenityIdWithCommunity(TEST_AMENITY_ID)) + given(amenityRepository.findByAmenityIdWithCommunityAndHouse(TEST_AMENITY_ID)) .willReturn(Optional.of(testAmenity)); // when @@ -92,14 +94,15 @@ void deleteAmenity() { // then assertTrue(amenityDeleted); - verify(amenityRepository).findByAmenityIdWithCommunity(TEST_AMENITY_ID); + verify(amenityRepository).findByAmenityIdWithCommunityAndHouse(TEST_AMENITY_ID); + verify(amenityBookingService).removeAllAmenityBookings(TEST_AMENITY_ID); verify(amenityRepository).delete(testAmenity); } @Test void deleteAmenityNotExists() { // given - given(amenityRepository.findByAmenityIdWithCommunity(TEST_AMENITY_ID)) + given(amenityRepository.findByAmenityIdWithCommunityAndHouse(TEST_AMENITY_ID)) .willReturn(Optional.empty()); // when @@ -107,7 +110,7 @@ void deleteAmenityNotExists() { // then assertFalse(amenityDeleted); - verify(amenityRepository).findByAmenityIdWithCommunity(TEST_AMENITY_ID); + verify(amenityRepository).findByAmenityIdWithCommunityAndHouse(TEST_AMENITY_ID); verify(amenityRepository, never()).delete(any()); } From 1a33d75148ea0893a706ef53c2a4bf8a90ad1a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 10 Mar 2021 02:17:19 +0300 Subject: [PATCH 3/7] Issue #257 fix tests --- .../myhome/controllers/AmenityController.java | 9 ++- .../controllers/CommunityController.java | 14 ++-- .../AmenityBookingItemRepository.java | 3 + .../com/myhome/services/AmenityService.java | 3 - .../com/myhome/services/CommunityService.java | 3 + .../com/myhome/services/HouseService.java | 2 + .../springdatajpa/AmenitySDJpaService.java | 32 ++------ .../springdatajpa/CommunitySDJpaService.java | 8 ++ .../springdatajpa/HouseSDJpaService.java | 9 +++ .../controllers/AmenityControllerTest.java | 11 ++- .../unit/AmenityBookingSDJpaServiceTest.java | 73 ++++++++++++++++++ .../unit/AmenitySDJpaServiceTest.java | 76 +------------------ .../unit/CommunitySDJpaServiceTest.java | 34 +++++++++ 13 files changed, 163 insertions(+), 114 deletions(-) create mode 100644 service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java diff --git a/service/src/main/java/com/myhome/controllers/AmenityController.java b/service/src/main/java/com/myhome/controllers/AmenityController.java index 5df52ec2..29e9f401 100644 --- a/service/src/main/java/com/myhome/controllers/AmenityController.java +++ b/service/src/main/java/com/myhome/controllers/AmenityController.java @@ -24,9 +24,12 @@ import com.myhome.model.AmenityDto; import com.myhome.model.GetAmenityDetailsResponse; import com.myhome.model.UpdateAmenityRequest; +import com.myhome.services.AmenityBookingService; import com.myhome.services.AmenityService; import java.util.Set; import javax.validation.Valid; + +import com.myhome.services.CommunityService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -43,6 +46,8 @@ public class AmenityController implements AmenitiesApi { private final AmenityService amenitySDJpaService; private final AmenityApiMapper amenityApiMapper; + private final AmenityBookingService amenityBookingService; + private final CommunityService communityService; @Override public ResponseEntity getAmenityDetails( @@ -56,7 +61,7 @@ public ResponseEntity getAmenityDetails( @Override public ResponseEntity> listAllAmenities( @PathVariable String communityId) { - Set amenities = amenitySDJpaService.listAllAmenities(communityId); + Set amenities = communityService.listAllAmenities(communityId); Set response = amenityApiMapper.amenitiesSetToAmenityDetailsResponseSet(amenities); return ResponseEntity.ok(response); @@ -98,7 +103,7 @@ public ResponseEntity updateAmenity(@PathVariable String amenityId, // TODO: Move to api.yaml @DeleteMapping(path = "/bookings/{bookingId}") public ResponseEntity deleteBooking(@PathVariable String bookingId) { - boolean isBookingDeleted = amenitySDJpaService.deleteBooking(bookingId); + boolean isBookingDeleted = amenityBookingService.deleteBooking(bookingId); if (isBookingDeleted) { return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); } else { diff --git a/service/src/main/java/com/myhome/controllers/CommunityController.java b/service/src/main/java/com/myhome/controllers/CommunityController.java index 61d12782..9883e467 100644 --- a/service/src/main/java/com/myhome/controllers/CommunityController.java +++ b/service/src/main/java/com/myhome/controllers/CommunityController.java @@ -34,12 +34,6 @@ import com.myhome.model.GetHouseDetailsResponse; import com.myhome.model.ListCommunityAdminsResponse; import com.myhome.services.CommunityService; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; -import javax.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Pageable; @@ -50,6 +44,13 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import javax.validation.Valid; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + /** * REST Controller which provides endpoints for managing community */ @@ -57,6 +58,7 @@ @RestController @Slf4j public class CommunityController implements CommunitiesApi { + private final CommunityService communityService; private final CommunityApiMapper communityApiMapper; diff --git a/service/src/main/java/com/myhome/repositories/AmenityBookingItemRepository.java b/service/src/main/java/com/myhome/repositories/AmenityBookingItemRepository.java index 5e3ce8e1..f53a1dfb 100644 --- a/service/src/main/java/com/myhome/repositories/AmenityBookingItemRepository.java +++ b/service/src/main/java/com/myhome/repositories/AmenityBookingItemRepository.java @@ -7,8 +7,11 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import java.util.HashSet; import java.util.Optional; public interface AmenityBookingItemRepository extends JpaRepository { Optional findByAmenityBookingItemId(String amenityBookingItemId); + + HashSet findAllByAmenity_AmenityId(String amenityId); } diff --git a/service/src/main/java/com/myhome/services/AmenityService.java b/service/src/main/java/com/myhome/services/AmenityService.java index 8da143b6..061906bf 100644 --- a/service/src/main/java/com/myhome/services/AmenityService.java +++ b/service/src/main/java/com/myhome/services/AmenityService.java @@ -30,9 +30,6 @@ public interface AmenityService { boolean deleteAmenity(String amenityId); - Set listAllAmenities(String communityId); - boolean updateAmenity(AmenityDto updatedAmenityDto); - boolean deleteBooking(String bookingId); } diff --git a/service/src/main/java/com/myhome/services/CommunityService.java b/service/src/main/java/com/myhome/services/CommunityService.java index cc4a4f2e..e3c1a0e4 100644 --- a/service/src/main/java/com/myhome/services/CommunityService.java +++ b/service/src/main/java/com/myhome/services/CommunityService.java @@ -17,6 +17,7 @@ package com.myhome.services; import com.myhome.controllers.dto.CommunityDto; +import com.myhome.domain.Amenity; import com.myhome.domain.Community; import com.myhome.domain.CommunityHouse; import com.myhome.domain.User; @@ -34,6 +35,8 @@ public interface CommunityService { Optional getCommunityDetailsById(String communityId); + Set listAllAmenities(String communityId); + Optional> findCommunityHousesById(String communityId, Pageable pageable); Optional> findCommunityAdminsById(String communityId, Pageable pageable); diff --git a/service/src/main/java/com/myhome/services/HouseService.java b/service/src/main/java/com/myhome/services/HouseService.java index c19f3368..777f643f 100644 --- a/service/src/main/java/com/myhome/services/HouseService.java +++ b/service/src/main/java/com/myhome/services/HouseService.java @@ -37,4 +37,6 @@ public interface HouseService { Optional> getHouseMembersById(String houseId, Pageable pageable); Optional> listHouseMembersForHousesOfUserId(String userId, Pageable pageable); + + boolean removeAmenityFromHouse(CommunityHouse house, String amenityId); } diff --git a/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java index 709fc514..b337a557 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/AmenitySDJpaService.java @@ -20,16 +20,17 @@ import com.myhome.domain.Amenity; import com.myhome.domain.Community; import com.myhome.model.AmenityDto; -import com.myhome.repositories.AmenityBookingItemRepository; import com.myhome.repositories.AmenityRepository; -import com.myhome.repositories.CommunityRepository; +import com.myhome.services.AmenityBookingService; import com.myhome.services.AmenityService; import com.myhome.services.CommunityService; -import java.util.HashSet; + import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; + +import com.myhome.services.HouseService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -38,10 +39,10 @@ public class AmenitySDJpaService implements AmenityService { private final AmenityRepository amenityRepository; - private final CommunityRepository communityRepository; private final CommunityService communityService; private final AmenityApiMapper amenityApiMapper; - private final AmenityBookingItemRepository bookingRepository; + private final AmenityBookingService amenityBookingService; + private final HouseService houseService; @Override public Optional> createAmenities(Set amenities, String communityId) { @@ -83,19 +84,11 @@ public boolean deleteAmenity(String amenityId) { .orElse(false); } - @Override - public Set listAllAmenities(String communityId) { - return communityRepository.findByCommunityIdWithAmenities(communityId) - .map(Community::getAmenities) - .orElse(new HashSet<>()); - } - @Override public boolean updateAmenity(AmenityDto updatedAmenity) { String amenityId = updatedAmenity.getAmenityId(); return amenityRepository.findByAmenityId(amenityId) - .map(amenity -> communityRepository.findByCommunityId(updatedAmenity.getCommunityId()) - .map(community -> { + .map(amenity -> { Amenity updated = new Amenity(); updated.setName(updatedAmenity.getName()); updated.setPrice(updatedAmenity.getPrice()); @@ -104,17 +97,6 @@ public boolean updateAmenity(AmenityDto updatedAmenity) { updated.setDescription(updatedAmenity.getDescription()); return updated; }) - .orElse(null)) .map(amenityRepository::save).isPresent(); } - - @Override - public boolean deleteBooking(String bookingId) { - return bookingRepository.findByAmenityBookingItemId(bookingId) - .map(bookingItem -> { - bookingRepository.delete(bookingItem); - return true; - }) - .orElse(false); - } } diff --git a/service/src/main/java/com/myhome/services/springdatajpa/CommunitySDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/CommunitySDJpaService.java index 8182a56e..5d22220e 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/CommunitySDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/CommunitySDJpaService.java @@ -18,6 +18,7 @@ import com.myhome.controllers.dto.CommunityDto; import com.myhome.controllers.dto.mapper.CommunityMapper; +import com.myhome.domain.Amenity; import com.myhome.domain.Community; import com.myhome.domain.CommunityHouse; import com.myhome.domain.HouseMember; @@ -84,6 +85,13 @@ public Set listAll(Pageable pageable) { return communities; } + @Override + public Set listAllAmenities(String communityId) { + return communityRepository.findByCommunityIdWithAmenities(communityId) + .map(Community::getAmenities) + .orElse(new HashSet<>()); + } + @Override public Optional> findCommunityHousesById(String communityId, Pageable pageable) { diff --git a/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java index da732cac..e1118515 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/HouseSDJpaService.java @@ -115,4 +115,13 @@ public Optional> listHouseMembersForHousesOfUserId(String user houseMemberRepository.findAllByCommunityHouse_Community_Admins_UserId(userId, pageable) ); } + + @Override + public boolean removeAmenityFromHouse(CommunityHouse house, String amenityId) { + boolean removed = house.getAmenities().removeIf(amenity -> amenity.getAmenityId().equals(amenityId)); + if (removed) { + communityHouseRepository.save(house); + } + return removed; + } } diff --git a/service/src/test/java/com/myhome/controllers/AmenityControllerTest.java b/service/src/test/java/com/myhome/controllers/AmenityControllerTest.java index bd59d9d5..c87ee5b1 100644 --- a/service/src/test/java/com/myhome/controllers/AmenityControllerTest.java +++ b/service/src/test/java/com/myhome/controllers/AmenityControllerTest.java @@ -23,6 +23,7 @@ import com.myhome.model.AmenityDto; import com.myhome.model.GetAmenityDetailsResponse; import com.myhome.model.UpdateAmenityRequest; +import com.myhome.services.AmenityBookingService; import com.myhome.services.AmenityService; import java.math.BigDecimal; import java.util.HashSet; @@ -56,6 +57,8 @@ class AmenityControllerTest { private AmenityService amenitySDJpaService; @Mock private AmenityApiMapper amenityApiMapper; + @Mock + private AmenityBookingService amenityBookingService; @InjectMocks private AmenityController amenityController; @@ -223,7 +226,7 @@ void shouldNotUpdateCommunityAmenityIfAmenityNotExists() { @Test void deleteBooking() { // given - given(amenitySDJpaService.deleteBooking(TEST_BOOKING_ID)) + given(amenityBookingService.deleteBooking(TEST_BOOKING_ID)) .willReturn(true); // when @@ -232,13 +235,13 @@ void deleteBooking() { // then assertNull(response.getBody()); assertEquals(HttpStatus.NO_CONTENT, response.getStatusCode()); - verify(amenitySDJpaService).deleteBooking(TEST_BOOKING_ID); + verify(amenityBookingService).deleteBooking(TEST_BOOKING_ID); } @Test void deleteBookingNotExists() { // given - given(amenitySDJpaService.deleteBooking(TEST_BOOKING_ID)) + given(amenityBookingService.deleteBooking(TEST_BOOKING_ID)) .willReturn(false); // when @@ -247,7 +250,7 @@ void deleteBookingNotExists() { // then assertNull(response.getBody()); assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); - verify(amenitySDJpaService).deleteBooking(TEST_BOOKING_ID); + verify(amenityBookingService).deleteBooking(TEST_BOOKING_ID); } private Amenity getTestAmenity() { diff --git a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java new file mode 100644 index 00000000..dc765275 --- /dev/null +++ b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java @@ -0,0 +1,73 @@ +package com.myhome.services.unit; + +import com.myhome.domain.AmenityBookingItem; +import com.myhome.repositories.AmenityBookingItemRepository; +import com.myhome.services.AmenityBookingService; +import com.myhome.services.springdatajpa.AmenityBookingSDJpaService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +public class AmenityBookingSDJpaServiceTest { + + private static final String TEST_BOOKING_ID = "test-booking-id"; + @Mock + private AmenityBookingItemRepository bookingItemRepository; + + @InjectMocks + private AmenityBookingSDJpaService amenityBookingService; + + @BeforeEach + private void init() { + MockitoAnnotations.initMocks(this); + } + + @Test + void deleteBookingItem() { + // given + AmenityBookingItem testBookingItem = getTestBookingItem(); + + given(bookingItemRepository.findByAmenityBookingItemId(TEST_BOOKING_ID)) + .willReturn(Optional.of(testBookingItem)); + + // when + boolean bookingDeleted = amenityBookingService.deleteBooking(TEST_BOOKING_ID); + + // then + assertTrue(bookingDeleted); + verify(bookingItemRepository).findByAmenityBookingItemId(TEST_BOOKING_ID); + verify(bookingItemRepository).delete(testBookingItem); + } + + @Test + void deleteBookingNotExists() { + // given + given(bookingItemRepository.findByAmenityBookingItemId(TEST_BOOKING_ID)) + .willReturn(Optional.empty()); + + // when + boolean amenityDeleted = amenityBookingService.deleteBooking(TEST_BOOKING_ID); + + // then + assertFalse(amenityDeleted); + verify(bookingItemRepository).findByAmenityBookingItemId(TEST_BOOKING_ID); + verify(bookingItemRepository, never()).delete(any()); + } + + private AmenityBookingItem getTestBookingItem() { + return new AmenityBookingItem() + .withAmenityBookingItemId(TEST_BOOKING_ID); + } + +} \ No newline at end of file diff --git a/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java index 44985c93..b579c9f9 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java @@ -24,6 +24,7 @@ import com.myhome.repositories.AmenityBookingItemRepository; import com.myhome.repositories.AmenityRepository; import com.myhome.repositories.CommunityRepository; +import com.myhome.services.AmenityBookingService; import com.myhome.services.CommunityService; import com.myhome.services.springdatajpa.AmenitySDJpaService; import helpers.TestUtils; @@ -58,7 +59,6 @@ class AmenitySDJpaServiceTest { private final String TEST_AMENITY_ID = "test-amenity-id"; private final String TEST_AMENITY_DESCRIPTION = "test-amenity-description"; private final String TEST_COMMUNITY_ID = "test-community-id"; - private final int TEST_AMENITIES_COUNT = 2; @Mock private AmenityRepository amenityRepository; @Mock @@ -114,38 +114,6 @@ void deleteAmenityNotExists() { verify(amenityRepository, never()).delete(any()); } - @Test - void listAllAmenities() { - // given - Set testAmenities = TestUtils.AmenityHelpers.getTestAmenities(TEST_AMENITIES_COUNT); - Community testCommunity = TestUtils.CommunityHelpers.getTestCommunity(); - testCommunity.setAmenities(testAmenities); - - given(communityRepository.findByCommunityIdWithAmenities(TEST_COMMUNITY_ID)) - .willReturn(Optional.of(testCommunity)); - - // when - Set resultAmenities = amenitySDJpaService.listAllAmenities(TEST_COMMUNITY_ID); - - // then - assertEquals(testAmenities, resultAmenities); - verify(communityRepository).findByCommunityIdWithAmenities(TEST_COMMUNITY_ID); - } - - @Test - void listAllAmenitiesNotExists() { - // given - given(communityRepository.findByCommunityIdWithAmenities(TEST_COMMUNITY_ID)) - .willReturn(Optional.empty()); - - // when - Set resultAmenities = amenitySDJpaService.listAllAmenities(TEST_COMMUNITY_ID); - - // then - assertEquals(new HashSet<>(), resultAmenities); - verify(communityRepository).findByCommunityIdWithAmenities(TEST_COMMUNITY_ID); - } - @Test void shouldAddAmenityToExistingCommunity() { // given @@ -232,7 +200,6 @@ void shouldUpdateCommunityAmenitySuccessfully() { // then assertTrue(result); verify(amenityRepository).findByAmenityId(TEST_AMENITY_ID); - verify(communityRepository).findByCommunityId(TEST_COMMUNITY_ID); verify(amenityRepository).save(updatedAmenity); } @@ -273,7 +240,6 @@ void shouldNotUpdateCommunityAmenitySuccessfullyIfSavingFails() { // then assertFalse(result); verify(amenityRepository).findByAmenityId(TEST_AMENITY_ID); - verify(communityRepository).findByCommunityId(TEST_COMMUNITY_ID); verify(amenityRepository).save(updatedAmenity); } @@ -295,40 +261,7 @@ void shouldNotUpdateAmenityIfCommunityDoesNotExist() { // then assertFalse(result); verify(amenityRepository).findByAmenityId(TEST_AMENITY_ID); - verify(communityRepository).findByCommunityId(TEST_COMMUNITY_ID); - verifyNoMoreInteractions(amenityRepository); - } - - @Test - void deleteBookingItem() { - // given - AmenityBookingItem testBookingItem = getTestBookingItem(); - - given(bookingItemRepository.findByAmenityBookingItemId(TEST_BOOKING_ID)) - .willReturn(Optional.of(testBookingItem)); - - // when - boolean bookingDeleted = amenitySDJpaService.deleteBooking(TEST_BOOKING_ID); - - // then - assertTrue(bookingDeleted); - verify(bookingItemRepository).findByAmenityBookingItemId(TEST_BOOKING_ID); - verify(bookingItemRepository).delete(testBookingItem); - } - - @Test - void deleteBookingNotExists() { - // given - given(bookingItemRepository.findByAmenityBookingItemId(TEST_BOOKING_ID)) - .willReturn(Optional.empty()); - - // when - boolean amenityDeleted = amenitySDJpaService.deleteBooking(TEST_BOOKING_ID); - - // then - assertFalse(amenityDeleted); - verify(bookingItemRepository).findByAmenityBookingItemId(TEST_BOOKING_ID); - verify(bookingItemRepository, never()).delete(any()); + verify(amenityRepository).save(communityAmenity); } private AmenityDto getTestAmenityDto() { @@ -352,9 +285,4 @@ private Amenity getUpdatedCommunityAmenity() { .withDescription(communityAmenityDto.getDescription()) .withCommunity(TestUtils.CommunityHelpers.getTestCommunity()); } - - private AmenityBookingItem getTestBookingItem() { - return new AmenityBookingItem() - .withAmenityBookingItemId(TEST_BOOKING_ID); - } } \ No newline at end of file diff --git a/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java index b8ab7143..6bda0aa4 100644 --- a/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java @@ -16,6 +16,7 @@ package com.myhome.services.unit; +import com.myhome.domain.Amenity; import helpers.TestUtils; import com.myhome.controllers.dto.CommunityDto; import com.myhome.controllers.dto.mapper.CommunityMapper; @@ -64,6 +65,7 @@ public class CommunitySDJpaServiceTest { private final int TEST_HOUSES_COUNT = 2; private final int TEST_HOUSE_MEMBERS_COUNT = 2; private final int TEST_COMMUNITIES_COUNT = 2; + private final int TEST_AMENITIES_COUNT = 2; private final String TEST_ADMIN_ID = "test-admin-id"; private final String TEST_ADMIN_NAME = "test-user-name"; @@ -565,6 +567,38 @@ void removeHouseFromCommunityByHouseIdHouseNotInCommunity() { verify(communityRepository, never()).save(testCommunity); } + @Test + void listAllAmenities() { + // given + Set testAmenities = TestUtils.AmenityHelpers.getTestAmenities(TEST_AMENITIES_COUNT); + Community testCommunity = TestUtils.CommunityHelpers.getTestCommunity(); + testCommunity.setAmenities(testAmenities); + + given(communityRepository.findByCommunityIdWithAmenities(TEST_COMMUNITY_ID)) + .willReturn(Optional.of(testCommunity)); + + // when + Set resultAmenities = communitySDJpaService.listAllAmenities(TEST_COMMUNITY_ID); + + // then + assertEquals(testAmenities, resultAmenities); + verify(communityRepository).findByCommunityIdWithAmenities(TEST_COMMUNITY_ID); + } + + @Test + void listAllAmenitiesNotExists() { + // given + given(communityRepository.findByCommunityIdWithAmenities(TEST_COMMUNITY_ID)) + .willReturn(Optional.empty()); + + // when + Set resultAmenities = communitySDJpaService.listAllAmenities(TEST_COMMUNITY_ID); + + // then + assertEquals(new HashSet<>(), resultAmenities); + verify(communityRepository).findByCommunityIdWithAmenities(TEST_COMMUNITY_ID); + } + private CommunityDto getTestCommunityDto() { CommunityDto testCommunityDto = new CommunityDto(); testCommunityDto.setCommunityId(TEST_COMMUNITY_ID); From 0b858a7ac48243d9ec6c7f73a67ee406e2db5a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Fri, 12 Mar 2021 00:23:44 +0300 Subject: [PATCH 4/7] Issue #257 rename test methods --- .../myhome/services/unit/AmenityBookingSDJpaServiceTest.java | 4 ++-- .../com/myhome/services/unit/CommunitySDJpaServiceTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java index dc765275..cb97b455 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java @@ -34,7 +34,7 @@ private void init() { } @Test - void deleteBookingItem() { + void shouldDeleteBookingItem() { // given AmenityBookingItem testBookingItem = getTestBookingItem(); @@ -51,7 +51,7 @@ void deleteBookingItem() { } @Test - void deleteBookingNotExists() { + void shouldNotDeleteBookingItemIfNotExists() { // given given(bookingItemRepository.findByAmenityBookingItemId(TEST_BOOKING_ID)) .willReturn(Optional.empty()); diff --git a/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java index 6bda0aa4..2f2e5f0f 100644 --- a/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/CommunitySDJpaServiceTest.java @@ -568,7 +568,7 @@ void removeHouseFromCommunityByHouseIdHouseNotInCommunity() { } @Test - void listAllAmenities() { + void shouldListAllAmenities() { // given Set testAmenities = TestUtils.AmenityHelpers.getTestAmenities(TEST_AMENITIES_COUNT); Community testCommunity = TestUtils.CommunityHelpers.getTestCommunity(); @@ -586,7 +586,7 @@ void listAllAmenities() { } @Test - void listAllAmenitiesNotExists() { + void shouldReturnZeroResultsIfNoAmenitiesPresent() { // given given(communityRepository.findByCommunityIdWithAmenities(TEST_COMMUNITY_ID)) .willReturn(Optional.empty()); From b73fbf198334f462070c329053aa42984b1729c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Fri, 12 Mar 2021 00:27:38 +0300 Subject: [PATCH 5/7] Issue #257 clean up --- .../services/unit/AmenityBookingSDJpaServiceTest.java | 2 +- .../com/myhome/services/unit/AmenitySDJpaServiceTest.java | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java index cb97b455..a5163334 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java @@ -2,7 +2,6 @@ import com.myhome.domain.AmenityBookingItem; import com.myhome.repositories.AmenityBookingItemRepository; -import com.myhome.services.AmenityBookingService; import com.myhome.services.springdatajpa.AmenityBookingSDJpaService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -22,6 +21,7 @@ public class AmenityBookingSDJpaServiceTest { private static final String TEST_BOOKING_ID = "test-booking-id"; + @Mock private AmenityBookingItemRepository bookingItemRepository; diff --git a/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java index b579c9f9..6281c977 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenitySDJpaServiceTest.java @@ -18,7 +18,6 @@ import com.myhome.controllers.mapper.AmenityApiMapper; import com.myhome.domain.Amenity; -import com.myhome.domain.AmenityBookingItem; import com.myhome.domain.Community; import com.myhome.model.AmenityDto; import com.myhome.repositories.AmenityBookingItemRepository; @@ -32,7 +31,6 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -49,16 +47,15 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; -import static org.mockito.Mockito.verifyNoMoreInteractions; class AmenitySDJpaServiceTest { private static final String TEST_AMENITY_NAME = "test-amenity-name"; private static final BigDecimal TEST_AMENITY_PRICE = BigDecimal.valueOf(1); - private static final String TEST_BOOKING_ID = "test-booking-id"; private final String TEST_AMENITY_ID = "test-amenity-id"; private final String TEST_AMENITY_DESCRIPTION = "test-amenity-description"; private final String TEST_COMMUNITY_ID = "test-community-id"; + @Mock private AmenityRepository amenityRepository; @Mock @@ -69,8 +66,6 @@ class AmenitySDJpaServiceTest { private AmenityApiMapper amenityApiMapper; @Mock private AmenityBookingService amenityBookingService; - @Mock - private AmenityBookingItemRepository bookingItemRepository; @InjectMocks private AmenitySDJpaService amenitySDJpaService; From 651b44d38eef5dd469f222686c5ce8aaf3e4b2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Fri, 12 Mar 2021 15:42:01 +0300 Subject: [PATCH 6/7] Issue #257 improve test coverage --- .../main/java/com/myhome/domain/Amenity.java | 26 ++++++++---- .../services/AmenityBookingService.java | 2 +- .../AmenityBookingSDJpaService.java | 7 ++-- .../unit/AmenityBookingSDJpaServiceTest.java | 40 ++++++++++++++++++- 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/service/src/main/java/com/myhome/domain/Amenity.java b/service/src/main/java/com/myhome/domain/Amenity.java index 932917d6..657cf68a 100644 --- a/service/src/main/java/com/myhome/domain/Amenity.java +++ b/service/src/main/java/com/myhome/domain/Amenity.java @@ -23,6 +23,8 @@ import javax.persistence.ManyToOne; import javax.persistence.NamedAttributeNode; import javax.persistence.NamedEntityGraph; +import javax.persistence.NamedEntityGraphs; + import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -35,12 +37,22 @@ @Getter @Setter @With -@NamedEntityGraph( - name = "Amenity.community", - attributeNodes = { - @NamedAttributeNode("community"), - } -) +@NamedEntityGraphs({ + @NamedEntityGraph( + name = "Amenity.community", + attributeNodes = { + @NamedAttributeNode("community"), + } + ), + @NamedEntityGraph( + name = "Amenity.community_house", + attributeNodes = { + @NamedAttributeNode("community"), + @NamedAttributeNode("communityHouse") + } + ) +}) + public class Amenity extends BaseEntity { @Column(nullable = false, unique = true) private String amenityId; @@ -52,6 +64,6 @@ public class Amenity extends BaseEntity { private BigDecimal price; @ManyToOne(fetch = FetchType.LAZY) private Community community; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) private CommunityHouse communityHouse; } diff --git a/service/src/main/java/com/myhome/services/AmenityBookingService.java b/service/src/main/java/com/myhome/services/AmenityBookingService.java index d293fbba..3888fd9a 100644 --- a/service/src/main/java/com/myhome/services/AmenityBookingService.java +++ b/service/src/main/java/com/myhome/services/AmenityBookingService.java @@ -10,5 +10,5 @@ public interface AmenityBookingService { boolean deleteBooking(String bookingId); - boolean removeAllAmenityBookings(String amenityID); + void removeAllAmenityBookings(String amenityID); } diff --git a/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java b/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java index 08e0f5fc..5a1c741f 100644 --- a/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java +++ b/service/src/main/java/com/myhome/services/springdatajpa/AmenityBookingSDJpaService.java @@ -34,9 +34,10 @@ public boolean deleteBooking(String bookingId) { } @Override - public boolean removeAllAmenityBookings(String amenityId) { + public void removeAllAmenityBookings(String amenityId) { HashSet bookings = bookingItemRepository.findAllByAmenity_AmenityId(amenityId); - bookingItemRepository.deleteAll(bookings); - return false; + if(!bookings.isEmpty()) { + bookingItemRepository.deleteAll(bookings); + } } } diff --git a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java index a5163334..bb2797ba 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java @@ -9,6 +9,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.HashSet; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -21,6 +22,7 @@ public class AmenityBookingSDJpaServiceTest { private static final String TEST_BOOKING_ID = "test-booking-id"; + private static final String TEST_AMENITY_ID = "test-amenity-id"; @Mock private AmenityBookingItemRepository bookingItemRepository; @@ -65,9 +67,45 @@ void shouldNotDeleteBookingItemIfNotExists() { verify(bookingItemRepository, never()).delete(any()); } + @Test + void shouldRemoveAllAmenityBookings() { + // given + HashSet testAmenityBookings = new HashSet() {{ + add(getTestBookingItem("test-amenity-1")); + add(getTestBookingItem("test-amenity-2")); + }}; + given(bookingItemRepository.findAllByAmenity_AmenityId(TEST_AMENITY_ID)) + .willReturn(testAmenityBookings); + + // when + amenityBookingService.removeAllAmenityBookings(TEST_AMENITY_ID); + + // then + verify(bookingItemRepository).findAllByAmenity_AmenityId(TEST_AMENITY_ID); + verify(bookingItemRepository).deleteAll(testAmenityBookings); + } + + @Test + void ShouldNotRemoveAllAmenityBookingsIfAmenityNotExists() { + // given + given(bookingItemRepository.findAllByAmenity_AmenityId(TEST_AMENITY_ID)) + .willReturn(new HashSet<>()); + + // when + amenityBookingService.removeAllAmenityBookings(TEST_AMENITY_ID); + + // then + verify(bookingItemRepository).findAllByAmenity_AmenityId(TEST_AMENITY_ID); + verify(bookingItemRepository, never()).deleteAll(any()); + } + private AmenityBookingItem getTestBookingItem() { + return getTestBookingItem(TEST_BOOKING_ID); + } + + private AmenityBookingItem getTestBookingItem(String bookingID) { return new AmenityBookingItem() - .withAmenityBookingItemId(TEST_BOOKING_ID); + .withAmenityBookingItemId(bookingID); } } \ No newline at end of file From 7426ee901dc1289c1ff36c66b44e1d7b3695c0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=BE=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=20=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Sun, 21 Mar 2021 21:26:02 +0300 Subject: [PATCH 7/7] Issue #257 fix test case name (cherry picked from commit a573a07ac66756bc8dd1d068ed17ad430ed30a1b) --- .../myhome/services/unit/AmenityBookingSDJpaServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java index bb2797ba..4a3154d7 100644 --- a/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java +++ b/service/src/test/java/com/myhome/services/unit/AmenityBookingSDJpaServiceTest.java @@ -86,7 +86,7 @@ void shouldRemoveAllAmenityBookings() { } @Test - void ShouldNotRemoveAllAmenityBookingsIfAmenityNotExists() { + void shouldNotRemoveAllAmenityBookingsIfAmenityNotExists() { // given given(bookingItemRepository.findAllByAmenity_AmenityId(TEST_AMENITY_ID)) .willReturn(new HashSet<>());