Add Docker-executed pytest suite with >90% coverage
This commit is contained in:
64
apps/blog/tests/factories.py
Normal file
64
apps/blog/tests/factories.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import factory
|
||||
import wagtail_factories
|
||||
from django.utils import timezone
|
||||
from taggit.models import Tag
|
||||
from wagtail.models import Page
|
||||
|
||||
from apps.authors.models import Author
|
||||
from apps.blog.models import ArticleIndexPage, ArticlePage, HomePage, TagMetadata
|
||||
from apps.legal.models import LegalIndexPage, LegalPage
|
||||
|
||||
|
||||
class AuthorFactory(factory.django.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Author
|
||||
|
||||
name = factory.Sequence(lambda n: f"Author {n}")
|
||||
slug = factory.Sequence(lambda n: f"author-{n}")
|
||||
|
||||
|
||||
class HomePageFactory(wagtail_factories.PageFactory):
|
||||
class Meta:
|
||||
model = HomePage
|
||||
|
||||
|
||||
class ArticleIndexPageFactory(wagtail_factories.PageFactory):
|
||||
class Meta:
|
||||
model = ArticleIndexPage
|
||||
|
||||
|
||||
class ArticlePageFactory(wagtail_factories.PageFactory):
|
||||
class Meta:
|
||||
model = ArticlePage
|
||||
|
||||
title = factory.Sequence(lambda n: f"Article {n}")
|
||||
slug = factory.Sequence(lambda n: f"article-{n}")
|
||||
author = factory.SubFactory(AuthorFactory)
|
||||
summary = "Summary"
|
||||
body = [("rich_text", "<p>Hello world</p>")]
|
||||
first_published_at = factory.LazyFunction(timezone.now)
|
||||
|
||||
|
||||
class LegalIndexPageFactory(wagtail_factories.PageFactory):
|
||||
class Meta:
|
||||
model = LegalIndexPage
|
||||
|
||||
|
||||
class LegalPageFactory(wagtail_factories.PageFactory):
|
||||
class Meta:
|
||||
model = LegalPage
|
||||
|
||||
title = factory.Sequence(lambda n: f"Legal {n}")
|
||||
slug = factory.Sequence(lambda n: f"legal-{n}")
|
||||
body = "<p>Body</p>"
|
||||
last_updated = factory.Faker("date_object")
|
||||
|
||||
|
||||
def root_page():
|
||||
return Page.get_first_root_node()
|
||||
|
||||
|
||||
def create_tag_with_meta(name: str, colour: str = "neutral"):
|
||||
tag, _ = Tag.objects.get_or_create(name=name, slug=name)
|
||||
TagMetadata.objects.get_or_create(tag=tag, defaults={"colour": colour})
|
||||
return tag
|
||||
Reference in New Issue
Block a user