Amphiesma (amphiesma) wrote,
Amphiesma
amphiesma

Тестирование изменения объекта с использованием формы.

Код для тестирования формы, изменяющей существующий объект:

class TestTransactionForm(TestCase):
    def setUp(self):
        self.user = factories.UserFactory()
        self.user.save()
        self.data = {
            'amount':10,
            'to_wallet': 'wallet',
            'user':self.user.id
        }
        self.transaction = factories.TransactionFactory(user = self.user)
        self.transaction.save()

    def test_notification_sent_and_form_fields_disabled(self):

        data = self.data.copy() 
        # data используется в нескольких функциях, поэтому копируем каждый раз

        data['status'] = 'DONE'
        data['transaction_url'] = 'https://google.com'

        #check status Done
        form = MyForm(data, instance=self.transaction)
        self.assertTrue(form.is_valid())

        with patch('path_to_function') as send_mock:
            form.save()
        send_mock.assert_called_once_with(self.transaction)

        # check fields disabled
        form = MyForm(instance = self.transaction)
        for field in form.fields:
            self.assertTrue(form.fields[field].widget.attrs['readonly'])


Важно: в data должны быть ВСЕ поля, иначе не пройдет валидация
Фигня, а чтобы выяснить потребовалась пара часов рабочего времени
Tags: django
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 0 comments