Может ли APIRequestFactory создать запрос с данными и атрибутами пользователя
Я пытаюсь сделать модульный тест для функции, которая принимает объект django Request в качестве параметра; объект Request является одним из параметров метода представления, основанного на классе Django.
Из параметра объекта запроса предполагается наличие атрибута data и user.
Моя проблема в том, что я не могу реплицировать объект запроса, используя APIRequestFactory от DRF. Когда я использую пакет python requests и делаю что-то вроде
headers = {
'Authorization': "Token {}".format(settings.AUTH_TOKEN),
'Accept': 'application/json',
'Content-Type': 'application/json',
}
data['foo'] = foo_id
response = requests.post(
'{}/api/foo/{}/action/'.format(settings.ROOT_URL, foo_id),
headers=headers,
json=data)
Тогда пользователь и атрибут data существуют в объекте запроса представления, основанного на классе.
Однако, если я использую DRF's APIRequestFactory и делаю
data = {"foo_id": 1234}
factory = APIRequestFactory()
request = factory.post('/api/foo/1/action/', data, format="json")
... тогда я должен явно добавить
request.user = user
request.data = data
Только атрибут body как данные, и то как байтовый поток, например, body: b'{"foo_id": "1234"}'
Возможно ли то, что я пытаюсь сделать?
В качестве отступления, возможно, я нарушаю закон Деметры, и моя тестируемая функция должна принимать в качестве параметров dict и объект пользователя, а не весь объект запроса, но это кажется излишним, учитывая ее вызывающих. В любом случае, было бы неплохо узнать, можно ли сделать APIRequestFactory таким, чтобы он заполнял атрибуты user и data без их явного назначения.