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_post_drinks(client, app):
    application_service_mock = mock.Mock(spec=DrinkApplicationService)
    application_service_mock.create_drink.return_value = FailedOutputDto.build_resource_conflict_error(
    )

    with app.container.drink_application_service.override(
            application_service_mock):
        response = client.post(
            "/drinks",
            json={
                "drink_id":
                str(
                    DrinkId(
                        value=uuid.uuid5(uuid.NAMESPACE_DNS, "drink_num_1"))),
                "drink_name":
                "wine_1",
                "drink_image_url":
                "picture_wine_1",
                "drink_type":
                "wine",
            },
        )

        assert response.status_code == 409
        assert response.json() == {
            "error_type": "Resource Conflict Error",
            "message": "",
        }

    application_service_mock.create_drink.return_value = CreateDrinkOutputDto()
    with app.container.drink_application_service.override(
            application_service_mock):
        response = client.post(
            "/drinks",
            json={
                "drink_id":
                str(
                    DrinkId(
                        value=uuid.uuid5(uuid.NAMESPACE_DNS, "drink_num_1"))),
                "drink_name":
                "wine_1",
                "drink_image_url":
                "picture_wine_1",
                "drink_type":
                "wine",
            },
        )
        assert response.status_code == 201
예제 #3
0
    def create_drink(self, input_dto: CreateDrinkInputDto) -> Union[CreateDrinkOutputDto, FailedOutputDto]:
        try:
            drink = Drink(
                id=DrinkId.build(drink_name=input_dto.drink_name, created_at=time.time()),
                name=input_dto.drink_name,
                image_url=input_dto.drink_image_url,
                type=DrinkType.from_str(input_dto.drink_type),
            )

            self._drink_repository.add(drink)

            return CreateDrinkOutputDto()

        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))
예제 #4
0
 def create_user(
     self, input_dto: CreateUserInputDto
 ) -> Union[CreateUserOutputDto, FailedOutputDto]:
     try:
         user = User(
             id=UserId(value=input_dto.user_id),
             name=UserName(value=input_dto.user_name),
             password=self._get_password_hash(input_dto.password),
         )
         self._user_repository.add(user)
         return CreateUserOutputDto(
             user_id=str(user.id),
             user_name=str(user.name),
             description=user.description,
             image_url=user.image_url,
         )
     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 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))
예제 #6
0
def test_create_review(client, app):
    application_service_mock = mock.Mock(ReviewApplicationService)
    auth_service_mock = mock.Mock(AuthApplicationService)

    # unauthorized token
    auth_service_mock.get_token_data.return_value = FailedOutputDto.build_unauthorized_error(
    )
    application_service_mock.create_review.return_value = CreateReviewOutputDto(
        review_id="review_id_uuid",
        drink_id="drink_id_uuid",
        user_id="user_id_uuid",
        rating=4,
        comment="review comment",
        created_at=123.123,
        updated_at=123.123,
    )
    with app.container.review_application_service.override(
            application_service_mock):
        with app.container.auth_application_service.override(
                auth_service_mock):
            response = client.post(
                "/reviews",
                headers={
                    "access-token":
                    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiaGV1bXNpIn0.OuFWvZ07CwSzR1j7I-wxFHweVb6sB8_U2LezYL7nz3I"
                },
                json=CreateReviewJsonRequest(
                    drink_id="drink_id_uuid",
                    rating=4,
                    comment="review comment",
                ).dict(),
            )
        assert response.status_code == 401
        assert response.json() == {
            "error_type": "Unauthorized Error",
            "message": "",
        }

    # invalid request
    application_service_mock.create_review.return_value = FailedOutputDto.build_resource_conflict_error(
    )
    with app.container.review_application_service.override(
            application_service_mock):
        response = client.post(
            "/reviews",
            headers={
                "access-token":
                "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiaGV1bXNpIn0.OuFWvZ07CwSzR1j7I-wxFHweVb6sB8_U2LezYL7nz3I"
            },
            json=CreateReviewJsonRequest(
                drink_id="drink_id_uuid",
                rating=4,
                comment="review comment",
            ).dict(),
        )
    assert response.status_code == 409
    assert response.json() == {
        "error_type": "Resource Conflict Error",
        "message": "",
    }

    # valid request
    application_service_mock.create_review.return_value = CreateReviewOutputDto(
        review_id="review_id_uuid",
        drink_id="drink_id_uuid",
        user_id="user_id_uuid",
        rating=4,
        comment="review comment",
        created_at=123.123,
        updated_at=123.123,
    )
    with app.container.review_application_service.override(
            application_service_mock):
        response = client.post(
            "/reviews",
            headers={
                "access-token":
                "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiaGV1bXNpIn0.OuFWvZ07CwSzR1j7I-wxFHweVb6sB8_U2LezYL7nz3I"
            },
            json=CreateReviewJsonRequest(
                drink_id="drink_id_uuid",
                rating=4,
                comment="review comment",
            ).dict(),
        )
    assert response.status_code == 201
    assert response.json() == {
        "review_id": "review_id_uuid",
        "drink_id": "drink_id_uuid",
        "rating": 4,
        "comment": "review comment",
        "created_at": 123.123,
        "updated_at": 123.123,
    }