Не получаеться правильно сделать mock зависимостей. При обновлении пользователя. ORM: piccolo
Моя функция на обновления пользователя:
ORM: piccolo[postgre]
Взаимодействие микросервисов: gRPC
async def UpdateUser(self, request, context):
try:
user = await User.objects().get(User.id == request.id)
if user:
await User.update({
User.name: request.name,
User.email: request.email,
User.age: request.age
}).where(User.id == request.id).execute()
return user_pb2.UserResponse(message="User updated")
else:
context.set_details("User not found")
context.set_code(grpc.StatusCode.NOT_FOUND)
return user_pb2.UserResponse(message="User not found")
except Exception as e:
context.set_details(f"Unexpected error: {e}")
context.set_code(grpc.StatusCode.INTERNAL)
return user_pb2.UserResponse(message="User not found!")
Пытаюсь сделать тестовый случай, когда у нас получается обновить пользователя.
Код моего теста:
@patch('services.user_service.model.User.objects')
async def test_update_user_success(self, mock_user_objects):
mock_user = MagicMock()
mock_user.id = 1
mock_user.name = "John Doe"
mock_user.email = "[email protected]"
mock_user.age = 30
mock_get = AsyncMock(return_value=mock_user)
mock_user_objects.return_value.get = mock_get
mock_user_objects.return_value.execute = mock_user
service = UserService()
context = MagicMock()
request = user_pb2.User(id=1, name="John Doe", email="[email protected]", age=30)
response = await service.UpdateUser(request, context)
self.assertEqual(response.message, "User updated")
mock_get.assert_awaited_once_with(User.id == request.id)
Пытаюсь мокировать на получение пользователя, но мой мок не меняет поведение get и получаем ошибку:
self.assertEqual(response.message, "User updated")
AssertionError: 'User not found!' != 'User updated'
- User not found!
+ User updated
Может я неправильно прописываю мок в данном случаи? Подскажите пожалуйста)