from django.core.exceptions import ValidationError from django.db.utils import IntegrityError from django.test import TestCase from ..models import Item, List class ListAndItemModelsTest(TestCase): def test_saving_and_retrieving_items(self): mylist = List() mylist.save() first_item = Item() first_item.text = "The first (ever) list item" first_item.list = mylist first_item.save() second_item = Item() second_item.text = "A sequel somehow better than the first" second_item.list = mylist second_item.save() saved_list = List.objects.get() self.assertEqual(saved_list, mylist) saved_items = Item.objects.all() self.assertEqual(saved_items.count(), 2) first_saved_item = saved_items[0] second_saved_item = saved_items[1] self.assertEqual(first_saved_item.text, "The first (ever) list item") self.assertEqual(first_saved_item.list, mylist) self.assertEqual(second_saved_item.text, "A sequel somehow better than the first") self.assertEqual(second_saved_item.list, mylist) def test_cannot_save_null_list_items(self): mylist = List.objects.create() item = Item(list=mylist, text=None) with self.assertRaises(IntegrityError): item.save() def test_cannot_save_empty_list_items(self): mylist = List.objects.create() item = Item(list=mylist, text="") with self.assertRaises(ValidationError): item.full_clean() def test_get_absolute_url(self): mylist = List.objects.create() self.assertEqual(mylist.get_absolute_url(), f"/apps/dashboard/{mylist.id}/") def test_duplicate_items_are_invalid(self): mylist = List.objects.create() Item.objects.create(list=mylist, text="jklol") with self.assertRaises(ValidationError): item = Item(list=mylist, text="jklol") item.full_clean() def test_still_can_save_same_item_to_different_lists(self): list1 = List.objects.create() list2 = List.objects.create() Item.objects.create(list=list1, text="nojk") item = Item(list=list2, text="nojk") item.full_clean() # should not raise