dynamicweb/factories.py
2026-10-04 20:55:11 +01:00

109 lines
No EOL
2.8 KiB
Python

import factory
from django.contrib.sites.models import Site
from django.conf import settings
from datacenterlight.cms_models import CMSIntegration
from digitalglarus.models import BookingPrice, Supporter
from membership.models import CustomUser, StripeCustomer
from djangocms_blog.models import Post
class SiteFactory(factory.django.DjangoModelFactory):
class Meta:
model = Site
django_get_or_create = ("domain",)
domain = factory.Sequence(lambda n: f"example{n}.test")
name = factory.LazyAttribute(lambda obj: obj.domain)
class CMSIntegrationFactory(factory.django.DjangoModelFactory):
class Meta:
model = CMSIntegration
name = factory.Sequence(lambda n: f"integration-{n}")
domain = factory.SubFactory(SiteFactory)
class SupporterFactory(factory.django.DjangoModelFactory):
class Meta:
model = Supporter
name = factory.Sequence(lambda n: f"Supporter {n}")
class BookingPriceFactory(factory.django.DjangoModelFactory):
class Meta:
model = BookingPrice
price_per_day = 10
special_month_price = 100
class CustomUserFactory(factory.django.DjangoModelFactory):
class Meta:
model = CustomUser
site = factory.LazyFunction(lambda: Site.objects.get(pk=1))
name = factory.Sequence(lambda n: f"Test User {n}")
email = factory.Sequence(lambda n: f"user{n}@example.com")
username = factory.Sequence(lambda n: f"user{n}")
validated = 1
in_ldap = False
is_admin = False
@factory.post_generation
def password(self, create, extracted, **kwargs):
if not create:
return
password = extracted or "testpassword123"
self.set_password(password)
self.save(update_fields=["password"])
class PostFactory(factory.django.DjangoModelFactory):
class Meta:
model = Post
author = factory.SubFactory(CustomUserFactory)
publish = True
include_in_rss = True
enable_comments = False
enable_liveblog = False
@classmethod
def _create(cls, model_class, *args, **kwargs):
language_code = kwargs.pop(
"language_code",
settings.LANGUAGE_CODE,
)
title = kwargs.pop("title", "Test Post")
slug = kwargs.pop("slug", "test-post")
post = model_class(*args, **kwargs)
post.set_current_language(language_code)
post.title = title
post.slug = slug
post.subtitle = ""
post.abstract = ""
post.meta_description = ""
post.meta_keywords = ""
post.meta_title = ""
post.post_text = ""
post.save()
return post
class StripeCustomerFactory(factory.django.DjangoModelFactory):
user = factory.SubFactory(CustomUserFactory)
stripe_id = factory.Sequence(lambda n: f"cus_test_{n}")
class Meta:
model = StripeCustomer