Add missing forms tests; separate notes and tags tests

This commit is contained in:
Christopher C. Wells 2022-05-27 21:50:25 -07:00 committed by Christopher Charbonneau Wells
parent 838020ceff
commit db5615fcb9
1 changed files with 246 additions and 72 deletions

View File

@ -145,6 +145,47 @@ class InitialValuesTestCase(FormsTestCaseBase):
self.assertEqual(self.localtime_string(self.timer.end), params["end"])
class BMIFormsTest(FormsTestCaseBase):
@classmethod
def setUpClass(cls):
super(BMIFormsTest, cls).setUpClass()
cls.bmi = models.BMI.objects.create(
child=cls.child,
bmi=30,
date=timezone.localdate() - timezone.timedelta(days=2),
)
def test_add(self):
params = {
"child": self.child.id,
"bmi": 35,
"date": self.localdate_string(),
}
page = self.c.post("/bmi/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Bmi entry for {} added".format(str(self.child)))
def test_edit(self):
params = {
"child": self.bmi.child.id,
"bmi": self.bmi.bmi + 1,
"date": self.bmi.date,
}
page = self.c.post("/bmi/{}/".format(self.bmi.id), params, follow=True)
self.assertEqual(page.status_code, 200)
self.bmi.refresh_from_db()
self.assertEqual(self.bmi.bmi, params["bmi"])
self.assertContains(
page, "Bmi entry for {} updated".format(str(self.bmi.child))
)
def test_delete(self):
page = self.c.post("/bmi/{}/delete/".format(self.bmi.id), follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Bmi entry deleted")
class ChildFormsTestCase(FormsTestCaseBase):
@classmethod
def setUpClass(cls):
@ -294,102 +335,137 @@ class FeedingFormsTestCase(FormsTestCaseBase):
self.assertContains(page, "Feeding entry deleted")
class NotesFormsTest(FormsTestCaseBase):
"""
Piggy-backs a bunch of tests for the tags-logic.
"""
class HeadCircumferenceFormsTest(FormsTestCaseBase):
@classmethod
def setUpClass(cls):
super(NotesFormsTest, cls).setUpClass()
cls.note = models.Note.objects.create(
super(HeadCircumferenceFormsTest, cls).setUpClass()
cls.head_circumference = models.HeadCircumference.objects.create(
child=cls.child,
note="Setup note",
time=timezone.now() - timezone.timedelta(days=2),
head_circumference=15,
date=timezone.localdate() - timezone.timedelta(days=2),
)
cls.note.tags.add("oldtag")
cls.oldtag = models.Tag.objects.filter(slug="oldtag").first()
def test_add_no_tags(self):
def test_add(self):
params = {
"child": self.child.id,
"note": "note with no tags",
"time": (timezone.now() - timezone.timedelta(minutes=1)).isoformat(),
"head_circumference": 20,
"date": self.localdate_string(),
}
page = self.c.post("/notes/add/", params, follow=True)
page = self.c.post("/head-circumference/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "note with no tags")
def test_add_with_tags(self):
params = {
"child": self.child.id,
"note": "this note has tags",
"time": (timezone.now() - timezone.timedelta(minutes=1)).isoformat(),
"tags": 'A,B,"setup tag"',
}
old_notes = list(models.Note.objects.all())
page = self.c.post("/notes/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "this note has tags")
new_notes = list(models.Note.objects.all())
# Find the new tag and extract its tags
old_pks = [n.pk for n in old_notes]
new_note = [n for n in new_notes if n.pk not in old_pks][0]
new_note_tag_names = [t.name for t in new_note.tags.all()]
self.assertSetEqual(set(new_note_tag_names), {"A", "B", "setup tag"})
self.assertContains(
page, "Head Circumference entry for {} added".format(str(self.child))
)
def test_edit(self):
old_tag_last_used = self.oldtag.last_used
params = {
"child": self.head_circumference.child.id,
"head_circumference": self.head_circumference.head_circumference + 1,
"date": self.head_circumference.date,
}
page = self.c.post(
"/head-circumference/{}/".format(self.head_circumference.id),
params,
follow=True,
)
self.assertEqual(page.status_code, 200)
self.head_circumference.refresh_from_db()
self.assertEqual(
self.head_circumference.head_circumference, params["head_circumference"]
)
self.assertContains(
page,
"Head Circumference entry for {} updated".format(
str(self.head_circumference.child)
),
)
def test_delete(self):
page = self.c.post(
"/head-circumference/{}/delete/".format(self.head_circumference.id),
follow=True,
)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Head Circumference entry deleted")
class HeightFormsTest(FormsTestCaseBase):
@classmethod
def setUpClass(cls):
super(HeightFormsTest, cls).setUpClass()
cls.height = models.Height.objects.create(
child=cls.child,
height=12.5,
date=timezone.localdate() - timezone.timedelta(days=2),
)
def test_add(self):
params = {
"child": self.child.id,
"height": 13.5,
"date": self.localdate_string(),
}
page = self.c.post("/height/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Height entry for {} added".format(str(self.child)))
def test_edit(self):
params = {
"child": self.height.child.id,
"height": self.height.height + 1,
"date": self.height.date,
}
page = self.c.post("/height/{}/".format(self.height.id), params, follow=True)
self.assertEqual(page.status_code, 200)
self.height.refresh_from_db()
self.assertEqual(self.height.height, params["height"])
self.assertContains(
page, "Height entry for {} updated".format(str(self.height.child))
)
def test_delete(self):
page = self.c.post("/height/{}/delete/".format(self.height.id), follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Height entry deleted")
class NoteFormsTest(FormsTestCaseBase):
@classmethod
def setUpClass(cls):
super(NoteFormsTest, cls).setUpClass()
cls.note = models.Note.objects.create(
child=cls.child,
note="Test note!",
time=timezone.localtime() - timezone.timedelta(days=2),
)
def test_add(self):
params = {
"child": self.child.id,
"note": "New note",
"time": self.localtime_string(),
}
page = self.c.post("/notes/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Note entry for {} added".format(str(self.child)))
def test_edit(self):
params = {
"child": self.note.child.id,
"note": "Edited note",
"time": self.localdate_string(),
"tags": "oldtag,newtag",
"note": "changed note",
"time": self.note.time,
}
page = self.c.post("/notes/{}/".format(self.note.id), params, follow=True)
self.assertEqual(page.status_code, 200)
self.note.refresh_from_db()
self.oldtag.refresh_from_db()
self.assertEqual(self.note.note, params["note"])
self.assertContains(
page, "Note entry for {} updated".format(str(self.note.child))
)
self.assertSetEqual(
set(t.name for t in self.note.tags.all()), {"oldtag", "newtag"}
)
# Old tag remains old, because it was not added
self.assertEqual(old_tag_last_used, self.oldtag.last_used)
# Second phase: Remove all tags then add "oldtag" through posting
# which should update the last_used tag
self.note.tags.clear()
self.note.save()
params = {
"child": self.note.child.id,
"note": "Edited note (2)",
"time": self.localdate_string(),
"tags": "oldtag",
}
page = self.c.post("/notes/{}/".format(self.note.id), params, follow=True)
self.assertEqual(page.status_code, 200)
self.note.refresh_from_db()
self.oldtag.refresh_from_db()
self.assertLess(old_tag_last_used, self.oldtag.last_used)
def test_delete(self):
page = self.c.post("/notes/{}/delete/".format(self.note.id), follow=True)
self.assertEqual(page.status_code, 200)
@ -485,6 +561,104 @@ class SleepFormsTestCase(FormsTestCaseBase):
self.assertContains(page, "Sleep entry deleted")
class TaggedFormsTestCase(FormsTestCaseBase):
@classmethod
def setUpClass(cls):
super(TaggedFormsTestCase, cls).setUpClass()
cls.note = models.Note.objects.create(
child=cls.child,
note="Setup note",
time=timezone.now() - timezone.timedelta(days=2),
)
cls.note.tags.add("oldtag")
cls.oldtag = models.Tag.objects.filter(slug="oldtag").first()
def test_add_no_tags(self):
params = {
"child": self.child.id,
"note": "note with no tags",
"time": (timezone.now() - timezone.timedelta(minutes=1)).isoformat(),
}
page = self.c.post("/notes/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "note with no tags")
def test_add_with_tags(self):
params = {
"child": self.child.id,
"note": "this note has tags",
"time": (timezone.now() - timezone.timedelta(minutes=1)).isoformat(),
"tags": 'A,B,"setup tag"',
}
old_notes = list(models.Note.objects.all())
page = self.c.post("/notes/add/", params, follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "this note has tags")
new_notes = list(models.Note.objects.all())
# Find the new tag and extract its tags
old_pks = [n.pk for n in old_notes]
new_note = [n for n in new_notes if n.pk not in old_pks][0]
new_note_tag_names = [t.name for t in new_note.tags.all()]
self.assertSetEqual(set(new_note_tag_names), {"A", "B", "setup tag"})
def test_edit(self):
old_tag_last_used = self.oldtag.last_used
params = {
"child": self.note.child.id,
"note": "Edited note",
"time": self.localdate_string(),
"tags": "oldtag,newtag",
}
page = self.c.post("/notes/{}/".format(self.note.id), params, follow=True)
self.assertEqual(page.status_code, 200)
self.note.refresh_from_db()
self.oldtag.refresh_from_db()
self.assertEqual(self.note.note, params["note"])
self.assertContains(
page, "Note entry for {} updated".format(str(self.note.child))
)
self.assertSetEqual(
set(t.name for t in self.note.tags.all()), {"oldtag", "newtag"}
)
# Old tag remains old, because it was not added
self.assertEqual(old_tag_last_used, self.oldtag.last_used)
# Second phase: Remove all tags then add "oldtag" through posting
# which should update the last_used tag
self.note.tags.clear()
self.note.save()
params = {
"child": self.note.child.id,
"note": "Edited note (2)",
"time": self.localdate_string(),
"tags": "oldtag",
}
page = self.c.post("/notes/{}/".format(self.note.id), params, follow=True)
self.assertEqual(page.status_code, 200)
self.note.refresh_from_db()
self.oldtag.refresh_from_db()
self.assertLess(old_tag_last_used, self.oldtag.last_used)
def test_delete(self):
page = self.c.post("/notes/{}/delete/".format(self.note.id), follow=True)
self.assertEqual(page.status_code, 200)
self.assertContains(page, "Note entry deleted")
class TemperatureFormsTestCase(FormsTestCaseBase):
@classmethod
def setUpClass(cls):