def test_find_drink_success( client, app, drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.return_value = Drink( id=drink_id, name=drink_name, image_url=drink_image_url, type=drink_type) drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = FindDrinkInputDto(drink_id=str(drink_id)) actual = drink_application_service.find_drink(input_dto) expected = FindDrinkOutputDto( drink_id=str(drink_id), drink_name=drink_name, drink_image_url=drink_image_url, drink_type=drink_type.value, avg_rating=float(DrinkRating()), num_of_reviews=0, num_of_wish=0, ) assert actual == expected
def delete_review( self, input_dto: DeleteReviewInputDto, drink_application_service: DrinkApplicationService, ) -> Union[DeleteReviewOutputDto, FailedOutputDto]: try: review_id = ReviewId.from_str(input_dto.review_id) review = self._review_repository.find_by_review_id(review_id) if review is None: return FailedOutputDto.build_resource_not_found_error( f"{str(input_dto.review_id)}의 리뷰를 찾을 수 없습니다.") self._review_repository.delete_by_review_id(review_id) drinks_input_dto = DeleteDrinkReviewInputDto( drink_id=str(review.drink_id), drink_rating=int(review.rating)) drink_delete_review_output_dto = drink_application_service.delete_drink_review( input_dto=drinks_input_dto) if not drink_delete_review_output_dto.status: return drink_delete_review_output_dto return DeleteReviewOutputDto() except ResourceNotFoundError as e: return FailedOutputDto.build_resource_not_found_error( message=str(e)) except Exception as e: return FailedOutputDto.build_system_error(message=str(e))
def test_delete_drink_success( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.delete_by_drink_id.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = DeleteDrinkInputDto(drink_id=str(drink_id)) actual = drink_application_service.delete_drink(input_dto) expected = DeleteDrinkOutputDto() assert actual == expected
def create_wish( self, input_dto: CreateWishInputDto, drink_application_service: DrinkApplicationService, ) -> Union[CreateWishOutputDto, FailedOutputDto]: try: wish = Wish( id=WishId.build(user_id=str(input_dto.user_id), drink_id=str(input_dto.drink_id)), user_id=UserId(value=input_dto.user_id), drink_id=DrinkId.from_str(input_dto.drink_id), created_at=time.time(), ) self._wish_repository.add(wish) add_drink_wish_input_dto = AddDrinkWishInputDto( drink_id=input_dto.drink_id) add_drink_wish_output_dto = drink_application_service.add_drink_wish( input_dto=add_drink_wish_input_dto) if not add_drink_wish_output_dto.status: return add_drink_wish_output_dto return CreateWishOutputDto(id=str(wish.id), user_id=str(wish.user_id), drink_id=str(wish.drink_id), created_at=wish.created_at) except ResourceAlreadyExistError as e: return FailedOutputDto.build_resource_conflict_error( message=str(e)) except Exception as e: return FailedOutputDto.build_system_error(message=str(e))
def test_find_drink_fail( client, app, drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.side_effect = ResourceNotFoundError( ) drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = FindDrinkInputDto(drink_id=str(drink_id)) actual = drink_application_service.find_drink(input_dto) expected = FailedOutputDto(type="Resource Not Found Error", message="") assert actual == expected
def test_delete_drink_wish_success( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.return_value = Drink( id=drink_id, name=drink_name, image_url=drink_image_url, type=drink_type) drink_repository_mock.update.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = DeleteDrinkWishInputDto(drink_id=str(drink_id)) actual = drink_application_service.delete_drink_wish(input_dto) expected = DeleteDrinkWishOutputDto() assert actual == expected
def test_create_drink_fail( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.add.side_effect = ResourceAlreadyExistError() drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = CreateDrinkInputDto( drink_id=str(drink_id), drink_name=drink_name, drink_image_url=drink_image_url, drink_type=drink_type.value, ) actual = drink_application_service.create_drink(input_dto) expected = FailedOutputDto(type="Resource Conflict Error", message="") assert actual == expected
def test_update_drink_review_fail( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.return_value = None drink_repository_mock.update.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = UpdateDrinkReviewInputDto(drink_id=str(drink_id), old_drink_rating=5, new_drink_rating=4) actual = drink_application_service.update_drink_review(input_dto) expected = FailedOutputDto( type="Resource Not Found Error", message="a9a94653-eede-5172-bd44-55653d0dc908의 술을 찾을 수 없습니다.") assert actual == expected
def test_add_drink_review_success( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.return_value = Drink( id=drink_id, name=drink_name, image_url=drink_image_url, type=drink_type) drink_repository_mock.update.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = AddDrinkReviewInputDto(drink_id=str(drink_id), drink_rating=5) actual = drink_application_service.add_drink_review(input_dto) expected = AddDrinkReviewOutputDto() assert actual == expected
def test_add_drink_review_fail( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.side_effect = ResourceNotFoundError( ) drink_repository_mock.update.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = AddDrinkReviewInputDto(drink_id=str(drink_id), drink_rating=5) actual = drink_application_service.add_drink_review(input_dto) expected = FailedOutputDto(type="Resource Not Found Error", message="") assert actual == expected drink_repository_mock.find_by_drink_id.return_value = Drink( id=drink_id, name=drink_name, image_url=drink_image_url, type=drink_type) drink_repository_mock.update.return_value = ResourceNotFoundError() drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = AddDrinkReviewInputDto(drink_id=str(drink_id), drink_rating=5) actual = drink_application_service.add_drink_review(input_dto) expected = FailedOutputDto(type="Resource Not Found Error", message="") assert actual == expected
def test_delete_drink_wish_fail( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.find_by_drink_id.side_effect = ResourceNotFoundError( ) drink_repository_mock.update.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = DeleteDrinkWishInputDto(drink_id=str(drink_id)) actual = drink_application_service.delete_drink_wish(input_dto) expected = FailedOutputDto(type="Resource Not Found Error", message="") assert actual == expected drink_repository_mock.find_by_drink_id.return_value = None drink_repository_mock.update.side_effect = ResourceNotFoundError() drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = DeleteDrinkWishInputDto(drink_id=str(drink_id)) actual = drink_application_service.delete_drink_wish(input_dto) expected = FailedOutputDto(type="Resource Not Found Error", message="") assert actual == expected
def create_drink( request: CreateDrinkJsonRequest, drink_application_service: DrinkApplicationService = Depends( Provide[Container.drink_application_service]), ) -> Optional[JSONResponse]: input_dto = CreateDrinkInputDto( drink_name=request.drink_name, drink_image_url=request.drink_image_url, drink_type=request.drink_type, ) output_dto = drink_application_service.create_drink(input_dto=input_dto) if not output_dto.status: return FailedJsonResponse.build_by_output_dto(output_dto)
def get_drinks( query_param: QueryParam = Depends(), drink_application_service: DrinkApplicationService = Depends( Provide[Container.drink_application_service]), ) -> Union[List[GetDrinkJsonResponse], JSONResponse]: input_dto = FindDrinksInputDto(query_param=query_param.to_enum()) output_dto = drink_application_service.find_drinks(input_dto=input_dto) if not output_dto.status: return FailedJsonResponse.build_by_output_dto(output_dto) get_drinks_json_response = [ GetDrinkJsonResponse.build_by_output_dto(review) for review in output_dto.items ] return get_drinks_json_response
def test_update_drink_fail( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.update.side_effect = ResourceNotFoundError() drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = UpdateDrinkInputDto( drink_id=str(drink_id), drink_name="Tequila", drink_image_url="tequila image url", drink_type=DrinkType.LIQUOR.value, avg_rating=float(DrinkRating(value=3.65)), num_of_reviews=10, num_of_wish=20, ) actual = drink_application_service.update_drink(input_dto) expected = FailedOutputDto(type="Resource Not Found Error", message="") assert actual == expected
def test_update_drink_success( drink_repository_mock, drink_id, drink_name, drink_image_url, drink_type, ): drink_repository_mock.update.return_value = None drink_application_service = DrinkApplicationService( drink_repository=drink_repository_mock) input_dto = UpdateDrinkInputDto( drink_id=str(drink_id), drink_name="Tequila", drink_image_url="tequila image url", drink_type=DrinkType.LIQUOR.value, avg_rating=float(DrinkRating(value=3.65)), num_of_reviews=10, num_of_wish=20, ) actual = drink_application_service.update_drink(input_dto) expected = UpdateDrinkOutputDto() assert actual == expected
def delete_wish( self, input_dto: DeleteWishInputDto, drink_application_service: DrinkApplicationService, ) -> Union[DeleteWishOutputDto, FailedOutputDto]: try: wish = self._wish_repository.delete_by_wish_id( WishId.from_str(input_dto.wish_id)) delete_drink_wish_input_dto = DeleteDrinkWishInputDto( drink_id=str(wish.drink_id)) delete_drink_wish_output_dto = drink_application_service.delete_drink_wish( input_dto=delete_drink_wish_input_dto) if not delete_drink_wish_output_dto.status: return delete_drink_wish_output_dto return DeleteWishOutputDto() except ResourceNotFoundError as e: return FailedOutputDto.build_resource_not_found_error( message=str(e)) except Exception as e: return FailedOutputDto.build_system_error(message=str(e))
def create_review( self, input_dto: CreateReviewInputDto, drink_application_service: DrinkApplicationService, ) -> Union[CreateReviewOutputDto, FailedOutputDto]: try: review = Review( id=ReviewId.build(user_id=input_dto.user_id, drink_id=input_dto.drink_id), drink_id=DrinkId(value=input_dto.drink_id), user_id=UserId(value=input_dto.user_id), rating=ReviewRating(value=input_dto.rating), comment=input_dto.comment, created_at=time.time(), updated_at=time.time(), ) self._review_repository.add(review) input_dto = AddDrinkReviewInputDto(drink_id=input_dto.drink_id, drink_rating=input_dto.rating) drink_add_review_output_dto = drink_application_service.add_drink_review( input_dto=input_dto) if not drink_add_review_output_dto.status: return drink_add_review_output_dto return CreateReviewOutputDto( review_id=str(review.id), drink_id=str(review.drink_id), user_id=str(review.user_id), rating=int(review.rating), comment=review.comment, created_at=review.created_at, updated_at=review.updated_at, ) except ResourceAlreadyExistError as e: return FailedOutputDto.build_resource_conflict_error( message=str(e)) except Exception as e: return FailedOutputDto.build_system_error(message=str(e))
def update_review( self, input_dto: UpdateReviewInputDto, drink_application_service: DrinkApplicationService, ) -> Union[UpdateReviewOutputDto, FailedOutputDto]: try: review_id = ReviewId.from_str(input_dto.review_id) old_review = self._review_repository.find_by_review_id(review_id) old_rating = int(old_review.rating) new_review = Review( id=old_review.id, drink_id=old_review.drink_id, user_id=old_review.user_id, rating=ReviewRating(value=input_dto.rating), comment=input_dto.comment, created_at=old_review.created_at, updated_at=time.time(), ) self._review_repository.update(new_review) drinks_input_dto = UpdateDrinkReviewInputDto( drink_id=str(new_review.drink_id), old_drink_rating=old_rating, new_drink_rating=input_dto.rating, ) drink_update_review_output_dto = drink_application_service.update_drink_review( input_dto=drinks_input_dto) if not drink_update_review_output_dto.status: return drink_update_review_output_dto return UpdateReviewOutputDto() except ResourceNotFoundError as e: return FailedOutputDto.build_resource_not_found_error( message=str(e)) except Exception as e: return FailedOutputDto.build_system_error(message=str(e))