コード例 #1
0
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
コード例 #2
0
    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))
コード例 #3
0
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
コード例 #4
0
    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))
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
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
コード例 #12
0
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)
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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
コード例 #16
0
    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))
コード例 #17
0
    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))
コード例 #18
0
    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))