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 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))
def test_update_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 = UpdateDrinkReviewInputDto(drink_id=str(drink_id),
                                          old_drink_rating=5,
                                          new_drink_rating=4)

    actual = drink_application_service.update_drink_review(input_dto)
    expected = UpdateDrinkReviewOutputDto()
    assert actual == expected