Исправление значения по умолчанию для поля - PullRequest
0 голосов
/ 10 октября 2019

У меня есть модель с полем uuid со значением по умолчанию в качестве функции.

from uuid import uuid4

def _new_uid():
    return uuid4()


class A(models.Model):
    name = models.CharField()
    uid = models.UUIDField(unique=True, default=_new_uid, editable=False)

В тесте я хочу установить _new_uid метод return 11111111-1111-1111-1111-111111111111.

@patch('module.foo._new_uid',
       Mock(return_value='11111111-1111-1111-1111-111111111111'))
def test_create_A():
    response = api_client.post('/api/a-list/', {
        'name': 'test',
    })

    assert response.json() == {
        '_uid': '11111111-1111-1111-1111-111111111111',
        'name': 'test'
    }

Но все равно возвращается случайный uuid. Я предполагаю, что это происходит потому, что инициализация модели завершена до запуска теста.

Я могу избежать этого, изменив параметр по умолчанию на:

uid = models.UUIDField(unique=True, default=lambda: _new_uid(), editable=False)

Можно ли это сделать, не меняя default на лямбдузвоните

1 Ответ

0 голосов
/ 15 октября 2019

Я узнал, как решить эту проблему.

Необходимо изменить оператор импорта на uuid4

import uuid

def _new_uid():
    return uuid.uuid4()

И теперь я могу исправить uuid

@patch('module.foo._new_uid',
       Mock(**{'uuid4.return_value': '11111111-1111-1111-1111-111111111111'}))
def test_create_A():
    response = api_client.post('/api/v1/a-list/', {
        'name': 'test',
    })

   assert response.json() == {
        '_uid': '11111111-1111-1111-1111-111111111111',
        'name': 'test'
    }
...