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", "

Hello world

")] first_published_at = factory.LazyFunction(timezone.now) published_date = 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 = "

Body

" 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