from django.test import TestCase from ..forms import ( DUPLICATE_ITEM_ERROR, EMPTY_ITEM_ERROR, ExistingListItemForm, ItemForm, ) from ..models import Item, List class ItemFormTest(TestCase): def test_form_item_has_placeholder_and_css_classes(self): form = ItemForm() rendered = form.as_p() self.assertIn('placeholder="Enter a to-do item"', rendered) self.assertIn('class="form-control form-control-lg"', rendered) def test_form_validation_for_blank_items(self): form = ItemForm(data={"text": ""}) form.save() def test_form_validation_for_blank_items(self): form = ItemForm(data={"text": ""}) self.assertFalse(form.is_valid()) self.assertEqual(form.errors["text"], [EMPTY_ITEM_ERROR]) def test_form_save_handles_saving_to_a_list(self): mylist = List.objects.create() form = ItemForm(data={"text": "do re mi"}) new_item = form.save(for_list=mylist) self.assertEqual(new_item, Item.objects.get()) self.assertEqual(new_item.text, "do re mi") self.assertEqual(new_item.list, mylist) class ExistingListItemFormTest(TestCase): def test_form_renders_item_text_input(self): list_ = List.objects.create() form = ExistingListItemForm(for_list=list_) self.assertIn('placeholder="Enter a to-do item"', form.as_p()) def test_form_validation_for_blank_items(self): list_ = List.objects.create() form = ExistingListItemForm(for_list=list_, data={"text": ""}) self.assertFalse(form.is_valid()) self.assertEqual(form.errors["text"], [EMPTY_ITEM_ERROR]) def test_form_validation_for_duplicate_items(self): list_ = List.objects.create() Item.objects.create(list=list_, text="twins, basil") form = ExistingListItemForm(for_list=list_, data={"text": "twins, basil"}) self.assertFalse(form.is_valid()) self.assertEqual(form.errors["text"], [DUPLICATE_ITEM_ERROR])