#101 : Test model page #105

Closed
lvanwambeke wants to merge 8 commits from dev-1.0-101-pytest-model-page into develop-1.0
3 changed files with 221 additions and 5 deletions

View File

@ -123,9 +123,14 @@ class BasePage(models.Model):
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)[:100]
count = Page.objects.filter(slug__startswith=self.slug).count()
if count:
self.slug += "-" + str(count)
pagecount = Page.objects.filter(slug__startswith=self.slug).count()
staticpagecount = StaticPage.objects.filter(
slug__startswith=self.slug
).count()
if pagecount:
self.slug += "-" + str(pagecount)
if staticpagecount:
self.slug += "-" + str(staticpagecount)
if self.parent and not self.cover:
self.cover = self.parent.cover
@ -152,9 +157,9 @@ class BasePage(models.Model):
@property
def display_title(self):
if self.is_published():
if self.is_published:
return self.title
return self.parent.display_title()
return self.parent.display_title
@cached_property
def headline(self):

View File

@ -11,6 +11,21 @@ from aircox import models
def stations():
return baker.make(models.Station, _quantity=2)
@pytest.fixture
def category():
return baker.make(models.Category)
@pytest.fixture
def staticpages():
return baker.make(models.StaticPage, _quantity=2)
@pytest.fixture
def pages():
return baker.make(models.Page, _quantity=2)
@pytest.fixture
def navitem():
return baker.make(models.NavItem)
@pytest.fixture
def programs(stations):

View File

@ -0,0 +1,196 @@
import pytest
from model_bakery import baker
from aircox.models import Category, Page, StaticPage, NavItem
@pytest.mark.django_db
class TestCategory:
def test__str__(self, category):
assert category.__str__() == category.title
# BasePAgeQuerySet is queryset, we use StaticPage in the test.
# We do not use instances of the Page Model because it's use as abstract.
class TestBasePageQuerySet:
@pytest.mark.django_db
def test_draft(self, staticpages):
for page in StaticPage.objects.draft():
assert page.status == StaticPage.STATUS_DRAFT
@pytest.mark.django_db
def test_published(self, staticpages):
for page in StaticPage.objects.published():
assert page.status == StaticPage.STATUS_PUBLISHED
@pytest.mark.django_db
def test_trash(self, staticpages):
for page in StaticPage.objects.trash():
assert page.status == StaticPage.STATUS_TRASH
@pytest.mark.django_db
def test_parent_return_childs_from_parent_object(self, staticpages):
staticpages[0].parent = staticpages[1]
for child in StaticPage.objects.parent(staticpages[1]):
assert child.parent == staticpages[1]
assert child != staticpages[1]
@pytest.mark.django_db
def test_parent_return_childs_from_parent_id(self, staticpages):
staticpages[0].parent = staticpages[1]
for child in StaticPage.objects.parent(staticpages[1].id):
assert child.parent == staticpages[1]
assert child != staticpages[1]
@pytest.mark.django_db
def test_search_with_searchcontent(self, staticpages):
staticpages[0].title, staticpages[1].content = "test", "test"
staticpages[0].save(), staticpages[1].save()
assert StaticPage.objects.search(q="test").count() == 2
@pytest.mark.django_db
def test_search_without_searchcontent(self, staticpages):
staticpages[0].title, staticpages[1].content = "test", "test"
staticpages[0].save(), staticpages[1].save()
assert StaticPage.objects.search(q="test", search_content=False).count() == 1
assert staticpages[0] in StaticPage.objects.search(q="test", search_content=False)
# BasePage is abstract, we use StaticPage in the test.
# We do not use instances of the Page Model because it's use as abstract.
class TestBasePage:
@pytest.mark.django_db
def test__str__(self, staticpages):
assert staticpages[0].title == staticpages[0].__str__()
@pytest.mark.django_db
def test_save_generate_unique_slug(self, staticpages):
staticpages[0].title, staticpages[0].slug = "Title with spaces", None
staticpages[0].save()
assert staticpages[0].slug == "title-with-spaces"
@pytest.mark.django_db
def test_save_generate_slug_that_already_exist(self, staticpages):
staticpages[0].slug, staticpages[1].slug, staticpages[1].title = "title", None, "title"
staticpages[0].save(), staticpages[1].save()
assert staticpages[1].slug == "title-1"
@pytest.mark.django_db
def test_save_without_cover_with_parent(self, staticpages):
staticpages[0].cover, staticpages[0].parent= None, staticpages[1]
staticpages[0].save()
assert staticpages[0].cover == staticpages[1].cover
@pytest.mark.django_db
def test_get_absolute_url_from_unpublished_page(self, staticpages):
staticpages[0].status = StaticPage.STATUS_DRAFT
staticpages[0].save()
assert staticpages[0].get_absolute_url() == "#"
@pytest.mark.django_db
def test_get_absolute_url_from_published_page(self, staticpages):
staticpages[0].status = StaticPage.STATUS_PUBLISHED
staticpages[0].save()
assert staticpages[0].get_absolute_url() == "/pages/" + staticpages[0].slug + "/"
@pytest.mark.django_db
def test_is_draft(self, staticpages):
staticpages[0].status = StaticPage.STATUS_DRAFT
staticpages[0].save()
assert staticpages[0].is_draft == True
@pytest.mark.django_db
def test_is_published(self, staticpages):
staticpages[0].status = StaticPage.STATUS_PUBLISHED
staticpages[0].save()
assert staticpages[0].is_published == True
@pytest.mark.django_db
def test_is_trash(self, staticpages):
staticpages[0].status = StaticPage.STATUS_TRASH
staticpages[0].save()
assert staticpages[0].is_trash == True
@pytest.mark.django_db
def test_display_title_from_parent_ifdraft(self, staticpages):
staticpages[0].title = "Parent page title"
staticpages[0].status = StaticPage.STATUS_PUBLISHED
staticpages[0].save()
staticpages[1].title = "Child page title"
staticpages[1].parent = staticpages[0]
staticpages[1].status = StaticPage.STATUS_DRAFT
staticpages[1].save()
assert staticpages[0].display_title == "Parent page title"
assert staticpages[1].display_title == "Parent page title"
@pytest.mark.django_db
def test_headline(self, staticpages):
staticpages[0].content="<h2>My headline</h2><p>My content.</p>"
staticpages[1].content=""
staticpages[0].save(), staticpages[1].save()
assert staticpages[0].headline == "My headline\n"
assert staticpages[1].headline == ""
#for Page only, StaticPage don't have category argument.
@pytest.mark.django_db
def test_get_init_kwargs_from(self, pages):
kwargs = pages[0].get_init_kwargs_from(pages[0])
assert kwargs == {"cover": pages[0].cover, "category": pages[0].category}
#for Page only, StaticPage don't have category argument.
@pytest.mark.django_db
def test_from_page(self, pages):
assert Page.from_page(pages[0]).cover == pages[0].cover
assert Page.from_page(pages[0]).category == pages[0].category
class TestPageQuerySet:
@pytest.mark.django_db
def test_published(self, staticpages):
staticpages[0].status = Page.STATUS_PUBLISHED
staticpages[0].save()
for page in Page.objects.published():
assert page.status == Page.STATUS_PUBLISHED
class TestPage:
@pytest.mark.django_db
def test_save_published_page_pubdate(self, pages):
pages[0].status, pages[0].pub_date= Page.STATUS_PUBLISHED, None
pages[0].save()
assert pages[0].pub_date is not None
@pytest.mark.django_db
def test_save_unpublished_page_pubdate(self, pages):
pages[0].status, pages[0].pub_date= Page.STATUS_DRAFT, None
pages[0].save()
assert pages[0].pub_date is None
@pytest.mark.django_db
def test_save_child_page_category(self, pages):
pages[0].parent, pages[0].category = pages[1], None
pages[0].save()
assert pages[0].category == pages[1].category
class TestStaticPage:
@pytest.mark.django_db
def test_get_absolute_url(self, staticpages):
staticpages[0].attach_to=StaticPage.ATTACH_TO_DIFFUSIONS
assert staticpages[0].get_absolute_url() == "/week/"
class TestNavItem:
@pytest.mark.django_db
def test_get_url_from_selfurl(self, navitem):
assert navitem.url == navitem.get_url()
#for staticpage only.
@pytest.mark.django_db
def test_get_url_from_pageurl(self, navitem, staticpages):
navitem.url, navitem.page = None, staticpages[0]
navitem.save()
assert navitem.get_url() == staticpages[0].get_absolute_url()
@pytest.mark.django_db
def test_get_url_without_selfurl_page(self, navitem):
navitem.url, navitem.page = None, None
assert navitem.get_url() == None