Skip to content
This repository has been archived by the owner on Jan 15, 2024. It is now read-only.

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
laigasus committed Nov 30, 2023
2 parents 117e9cb + 6ab0a9b commit 7897a5d
Show file tree
Hide file tree
Showing 5 changed files with 249 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public CartCreateResponse createCart(Long userId, CartCreateRequest cartCreateRe
return new CartCreateResponse(createdCart.getId());
}

// TODO
@Transactional(readOnly = true)
public List<CartGetResponse> getMyCarts(Long userId) {
return cartRepository.findALLByMemberId(userId).stream()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package ybe.mini.travelserver.domain.cart.controller;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpStatus;
import ybe.mini.travelserver.domain.cart.dto.request.CartCreateRequest;
import ybe.mini.travelserver.domain.cart.dto.response.CartCreateResponse;
import ybe.mini.travelserver.domain.cart.dto.response.CartDeleteResponse;
import ybe.mini.travelserver.domain.cart.dto.response.CartGetResponse;
import ybe.mini.travelserver.domain.cart.dummy.DummyCart;
import ybe.mini.travelserver.domain.cart.service.CartService;
import ybe.mini.travelserver.domain.member.dummy.DummyPrincipal;
import ybe.mini.travelserver.global.common.ResponseDto;

import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
import static ybe.mini.travelserver.domain.accommodation.entity.AreaCode.SEOUL;

@ExtendWith(MockitoExtension.class)
class CartControllerTest implements DummyPrincipal, DummyCart {

@Mock
private CartService cartService;

@InjectMocks
private CartController cartController;

@Test
@DisplayName("장바구니 조회")
void getCart() {
// given
CartGetResponse cartGetResponse =
CartGetResponse.fromEntity(dummyCart(), dummyRoom(dummyAccommodation()), dummyAccommodation());
CartGetResponse cartGetResponse1 =
CartGetResponse.fromEntity(dummyCart(), dummyRoom(dummyAccommodation()), dummyAccommodation());
List<CartGetResponse> cartGetResponseList =
List.of(cartGetResponse, cartGetResponse1);
given(cartService.getMyCarts(anyLong())).willReturn(cartGetResponseList);

// when
ResponseDto<List<CartGetResponse>> responseDto =
cartController.getAllCart(dummyPrincipalDetails());

// then
assertEquals(HttpStatus.OK.value(), responseDto.status());
assertEquals(responseDto.data(), cartGetResponseList);
then(cartService).should().getMyCarts(anyLong());
}

@Test
@DisplayName("장바구니 생성")
void createCart() {
// given
CartCreateRequest cartCreateRequest =
CartCreateRequest.builder()
.accommodationId(142785L)
.guestNumber(1)
.keyword("가락관광호텔")
.areaCode(SEOUL)
.checkIn("20241120")
.checkOut("20241123")
.roomTypeId(11430L)
.build();
CartCreateResponse cartCreateResponse = new CartCreateResponse(1L);

given(cartService.createCart(anyLong(), any()))
.willReturn(cartCreateResponse);

// when
ResponseDto<CartCreateResponse> responseDto =
cartController.createCart(dummyPrincipalDetails(), cartCreateRequest);

// then
assertEquals(HttpStatus.CREATED.value(), responseDto.status());
assertEquals(responseDto.data(), cartCreateResponse);
then(cartService).should().createCart(anyLong(), any());

}

@Test
@DisplayName("장바구니 삭제")
void deleteCart() {
// given
Long cartId = 1L;
CartDeleteResponse cartDeleteResponse = new CartDeleteResponse(1L);
given(cartService.deleteCart(anyLong())).willReturn(cartDeleteResponse);

// when
ResponseDto<CartDeleteResponse> responseDto =
cartController.deleteCart(dummyPrincipalDetails(), cartId);

// then
assertEquals(HttpStatus.OK.value(), responseDto.status());
assertEquals(responseDto.data(), cartDeleteResponse);
then(cartService).should().deleteCart(anyLong());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ybe.mini.travelserver.domain.cart.dummy;

import ybe.mini.travelserver.domain.cart.entity.Cart;
import ybe.mini.travelserver.domain.member.dummy.DummyMember;
import ybe.mini.travelserver.domain.room.DummyObjectForRoom;

import java.time.LocalDate;

public interface DummyCart extends DummyMember, DummyObjectForRoom {
default Cart dummyCart() {
return Cart.builder()
.id(1L)
.member(dummyMember())
.checkIn(LocalDate.of(2023, 12, 29))
.checkOut(LocalDate.of(2023, 12, 30))
.room(dummyRoom(dummyAccommodation()))
.guestNumber(2)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
package ybe.mini.travelserver.domain.cart.service;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import ybe.mini.travelserver.domain.accommodation.repository.AccommodationRepository;
import ybe.mini.travelserver.domain.cart.dto.request.CartCreateRequest;
import ybe.mini.travelserver.domain.cart.dto.response.CartCreateResponse;
import ybe.mini.travelserver.domain.cart.dto.response.CartGetResponse;
import ybe.mini.travelserver.domain.cart.dummy.DummyCart;
import ybe.mini.travelserver.domain.cart.entity.Cart;
import ybe.mini.travelserver.domain.cart.repository.CartRepository;
import ybe.mini.travelserver.domain.member.dummy.DummyPrincipal;
import ybe.mini.travelserver.domain.member.repository.MemberRepository;
import ybe.mini.travelserver.domain.room.repository.RoomRepository;
import ybe.mini.travelserver.global.api.TourAPIService;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
import static ybe.mini.travelserver.domain.accommodation.entity.AreaCode.SEOUL;

@ExtendWith(MockitoExtension.class)
class CartServiceTest implements DummyPrincipal, DummyCart {
@InjectMocks
CartService cartService;

@Mock
MemberRepository memberRepository;

@Mock
CartRepository cartRepository;

@Mock
RoomRepository roomRepository;

@Mock
AccommodationRepository accommodationRepository;

@Mock
TourAPIService tourAPIService;

@Test
@DisplayName("장바구니 생성")
void createCart_success(){
// given
CartCreateRequest cartCreateRequest =
CartCreateRequest.builder()
.accommodationId(dummyAccommodation().getId())
.guestNumber(1)
.keyword("가락관광호텔")
.areaCode(SEOUL)
.checkIn("20241120")
.checkOut("20241123")
.roomTypeId(dummyRoom(dummyAccommodation()).getRoomTypeId())
.build();
CartCreateResponse cartCreateResponse = new CartCreateResponse(1L);

given(tourAPIService.bringAccommodation(any(), any())).willReturn(dummyAccommodation());
given(tourAPIService.bringRoom(anyLong(), anyLong())).willReturn(dummyRoom(dummyAccommodation()));
given(roomRepository.findByRoomTypeId(any())).willReturn(Optional.ofNullable(dummyRoom(dummyAccommodation())));
given(accommodationRepository.findById(any())).willReturn(Optional.ofNullable(dummyAccommodation()));
given(memberRepository.findById(any())).willReturn(Optional.ofNullable(dummyMember()));
given(cartRepository.save(any(Cart.class))).willReturn(dummyCart());


// when
CartCreateResponse response =
cartService.createCart(dummyMember().getId(), cartCreateRequest);

// then
assertEquals(response, cartCreateResponse);

}

@Test
@DisplayName("장바구니 조회")
void getMyCarts_success() {
// given
List<Cart> cartList = Arrays.asList(dummyCart(), dummyCart());
List<CartGetResponse> cartGetResponseList = cartList.stream()
.map((Cart cart) -> CartGetResponse.fromEntity(
cart, cart.getRoom(), cart.getRoom().getAccommodation())
).toList();

given(cartRepository.findALLByMemberId(anyLong())).willReturn(cartList);

// when
List<CartGetResponse> response = cartService.getMyCarts(dummyCart().getId());

// then
assertEquals(cartGetResponseList, response);
then(cartRepository).should().findALLByMemberId(dummyCart().getId());

}

@Test
@DisplayName("장바구니 삭제")
void deleteCart_success() {
// given
given(cartRepository.findById(anyLong())).willReturn(Optional.ofNullable(dummyCart()));

// when
Long actual = cartService.deleteCart(dummyCart().getId()).id();

// then
Long expected = dummyCart().getId();
assertEquals(actual, expected);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ default Room dummyRoom2(Accommodation accommodation) {

default Accommodation dummyAccommodation() {
return Accommodation.builder()
.id(1L)
.name("세인트존스 호텔")
.location(Location.builder()
.address("강원특별자치도 강릉시 창해로 307 ")
Expand Down

0 comments on commit 7897a5d

Please sign in to comment.