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
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))
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))
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, }