def test_get_token_data_fail(jwt_secret_key, jwt_algorithm): auth_application_service = AuthApplicationService( user_application_service=mock.Mock(spec=UserApplicationService), jwt_secret_key=jwt_secret_key, jwt_algorithm=jwt_algorithm, ) input_dto = GetTokenDataInputDto(access_token="wrong jwt token") actual = auth_application_service.get_token_data(input_dto) expected = FailedOutputDto.build_unauthorized_error(message="올바른 access-token이 아닙니다.") assert actual == expected
def verify_token( self, input_dto: VerifyTokenInputDto ) -> Union[VerifyTokenOutputDto, FailedOutputDto]: """ 현재 사용하지 않음. """ try: decoded_jwt = jwt.decode( token=input_dto.access_token, key=self._JWT_SECRET_KEY, algorithms=self._JWT_ALGORITHM, ) if TokenPayload(**decoded_jwt) == TokenPayload( user_id=input_dto.user_id): return VerifyTokenOutputDto() return FailedOutputDto.build_unauthorized_error( message="access-token이 유효하지 않습니다.") except JWTError: return FailedOutputDto.build_unauthorized_error( message="올바른 access-token이 아닙니다.") except Exception as e: return FailedOutputDto.build_system_error(message=str(e))
def get_token_data( self, input_dto: GetTokenDataInputDto ) -> Union[GetTokenDataOutputDto, FailedOutputDto]: try: decoded_jwt = jwt.decode( token=input_dto.access_token, key=self._JWT_SECRET_KEY, algorithms=self._JWT_ALGORITHM, ) token_payload = TokenPayload(**decoded_jwt) return GetTokenDataOutputDto(user_id=token_payload.user_id) except JWTError: return FailedOutputDto.build_unauthorized_error( message="올바른 access-token이 아닙니다.")
def login( self, input_dto: LoginInputDto ) -> Union[LoginOutputDto, FailedOutputDto]: try: user_id = UserId(value=input_dto.user_id) user = self._user_repository.find_by_user_id(user_id=user_id) if not self._verify_password(input_dto.password, user.password): return FailedOutputDto.build_unauthorized_error( f"잘못된 비밀번호 입니다.") return LoginOutputDto() 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_login_fail_with_wrong_password(user_repository_mock, user_id, user_name, password): wrong_password = "******" user_repository_mock.find_by_user_id.return_value = User( id=UserId(value=user_id), name=UserName(value=user_name), password="******", ) user_application_service = UserApplicationService( user_repository=user_repository_mock) input_dto = LoginInputDto(user_id=user_id, password=wrong_password) actual = user_application_service.login(input_dto) expected = FailedOutputDto.build_unauthorized_error( message=f"잘못된 비밀번호 입니다.") assert actual == expected
def test_update_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.put( "/reviews", headers={ "access-token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiaGV1bXNpIn0.OuFWvZ07CwSzR1j7I-wxFHweVb6sB8_U2LezYL7nz3I" }, json=UpdateReviewJsonRequest( review_id="review_id_uuid", rating=4, comment="updated 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_not_found_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 == 404 assert response.json() == { "error_type": "Resource Not Found 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, }