This led me to the answer which was:
class GrantAdminTestCase(TestCase):
fixtures = [
'grants/grant_config',
'grants/grants',
]
def setUp(self):
self.g = Grant.objects.first()
self.DeadlineFormSet = inlineformset_factory(
Grant, Deadline, formset=DeadlineInlineFormset)
self.data = {
'additional_deadlines-INITIAL_FORMS': 0,
'additional_deadlines-MAX_NUM_FORMS': 1000,
'additional_deadlines-TOTAL_FORMS': 1,
'additional_deadlines-0-deadline': date.today(),
'additional_deadlines-0-grant': '2',
'additional_deadlines-0-id': '',
}
def test_formset_is_valid_if_deadline_exists(self):
formset = self.DeadlineFormSet(self.data, instance=self.g)
self.assertEqual(formset.is_valid(), True)
def test_formset_is_invalid_if_deadline_doesnt_exist(self):
# formset should be invalid if there is an additional deadline
# and no main deadline
self.g.deadline = None
formset = self.DeadlineFormSet(self.data, instance=self.g)
self.assertEqual(formset.is_valid(), False)
def test_formset_is_valid_if_deadline_blank(self):
# formset should still be valid if deadline is blank
# (it's not saved)
self.data['additional_deadlines-0-deadline'] = ''
formset = self.DeadlineFormSet(self.data, instance=self.g)
self.assertEqual(formset.is_valid(), True)
def test_formset_is_invalid_if_additional_deadlines_earlier(self):
# formset should be invalid if any additional deadlines are earlier
# than the main deadline
self.g.deadline = date.today()
yesterday = date.today() - timedelta(days=1)
self.data['additional_deadlines-0-deadline'] = yesterday
formset = self.DeadlineFormSet(self.data, instance=self.g)
self.assertEqual(formset.is_valid(), False)