Проверка правильности выбора модели в представлении DRF

У меня есть представление с конечной точкой get, которое определяет, какую модель использовать, глядя, содержит ли запрос параметр запроса "bla":

class FooView(APIView):
    def get(self, request):

        if "bla" in self.request.query_params:
            model = ModelA
        else:
            model = ModelB
        
        # ...

Теперь я хочу проверить это с помощью pytest. Приведенный ниже подход, похоже, работает. Правильно ли здесь использование method_calls? Тем не менее, это выглядит немного неуклюже.

@pytest.mark.django_db
def test_get_foo_correct_model_selection(client):
    with mock.patch('path.to.ModelA.objects') as model_a_manager, mock.patch('path.to.ModelB.objects') as model_b_manager:

        response = client.get(reverse("foo-list") + "?bla=true")

        assert len(model_a_manager.method_calls) >= 1
        assert len(model_b_manager.method_calls) == 0


    # and now without bla param
    with mock.patch('path.to.ModelA.objects') as model_a_manager, mock.patch('path.to.ModelB.objects') as model_b_manager:
        response = client.get(reverse("foo-list"))

        assert len(model_a_manager.method_calls) == 0
        assert len(model_b_manager.method_calls) >= 1

Есть ли более элегантный способ?

Обычно я подражаю методу, который принимает ваш набор запросов или экземпляр модели в качестве параметра, а затем вы можете использовать:

# checks if method was called with correct param.
mocked_method.assert_called_with(correct_model) 

В вашем примере можно использовать

model_a_manager.assert_called()
model_b_manager.assert_not_called()
Вернуться на верх