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 должны быть ВСЕ поля, иначе не пройдет валидация
Фигня, а чтобы выяснить потребовалась пара часов рабочего времени