MailDomain fixtures now use a boring non-repeating sequence. No longer will the occasional random CI failure inject excitement into our workdays; but fear not, there will remain other occasions to enjoy the art of debugging.
101 lines
3.1 KiB
Python
101 lines
3.1 KiB
Python
"""
|
|
Mailbox manager application factories
|
|
"""
|
|
|
|
from django.contrib.auth.hashers import make_password
|
|
from django.utils.text import slugify
|
|
|
|
import factory.fuzzy
|
|
from faker import Faker
|
|
|
|
from core import factories as core_factories
|
|
from core import models as core_models
|
|
|
|
from mailbox_manager import enums, models
|
|
|
|
fake = Faker()
|
|
|
|
|
|
class MailDomainFactory(factory.django.DjangoModelFactory):
|
|
"""A factory to create mail domain. Please not this is a factory to create mail domain with
|
|
default values. So the status is pending and no mailbox can be created from it,
|
|
until the mail domain is enabled."""
|
|
|
|
class Meta:
|
|
model = models.MailDomain
|
|
django_get_or_create = ("name",)
|
|
skip_postgeneration_save = True
|
|
|
|
name = factory.Sequence(lambda n: f"domain{n!s}.com")
|
|
slug = factory.LazyAttribute(lambda o: slugify(o.name))
|
|
support_email = factory.Faker("email")
|
|
|
|
@factory.post_generation
|
|
def users(self, create, extracted, **kwargs):
|
|
"""Add users to domain from a given list of users with or without roles."""
|
|
if not create or not extracted:
|
|
return
|
|
for user_entry in extracted:
|
|
if isinstance(user_entry, core_models.User):
|
|
MailDomainAccessFactory(domain=self, user=user_entry)
|
|
else:
|
|
MailDomainAccessFactory(
|
|
domain=self, user=user_entry[0], role=user_entry[1]
|
|
)
|
|
|
|
|
|
class MailDomainEnabledFactory(MailDomainFactory):
|
|
"""A factory to create mail domain enabled."""
|
|
|
|
status = enums.MailDomainStatusChoices.ENABLED
|
|
|
|
|
|
class MailDomainAccessFactory(factory.django.DjangoModelFactory):
|
|
"""A factory to create mail domain accesses."""
|
|
|
|
class Meta:
|
|
model = models.MailDomainAccess
|
|
|
|
user = factory.SubFactory(core_factories.UserFactory)
|
|
domain = factory.SubFactory(MailDomainEnabledFactory)
|
|
role = factory.fuzzy.FuzzyChoice(
|
|
[r[0] for r in enums.MailDomainRoleChoices.choices]
|
|
)
|
|
|
|
|
|
class MailboxFactory(factory.django.DjangoModelFactory):
|
|
"""A factory to create mailboxes for a mail domain."""
|
|
|
|
class Meta:
|
|
model = models.Mailbox
|
|
|
|
first_name = factory.Faker("first_name", locale="fr_FR")
|
|
last_name = factory.Faker("last_name", locale="de_DE")
|
|
|
|
local_part = factory.LazyAttribute(
|
|
lambda a: f"{slugify(a.first_name)}.{slugify(a.last_name)}"
|
|
)
|
|
domain = factory.SubFactory(MailDomainEnabledFactory)
|
|
secondary_email = factory.Faker("email")
|
|
password = make_password("password")
|
|
|
|
|
|
class MailboxEnabledFactory(MailboxFactory):
|
|
"""A factory to create mailbox enabled."""
|
|
|
|
status = enums.MailboxStatusChoices.ENABLED
|
|
|
|
|
|
class MailDomainInvitationFactory(factory.django.DjangoModelFactory):
|
|
"""A factory to create invitations for a user"""
|
|
|
|
class Meta:
|
|
model = models.MailDomainInvitation
|
|
|
|
domain = factory.SubFactory(MailDomainEnabledFactory)
|
|
email = factory.Faker("email")
|
|
role = factory.fuzzy.FuzzyChoice(
|
|
[role[0] for role in enums.MailDomainRoleChoices.choices]
|
|
)
|
|
issuer = factory.SubFactory(core_factories.UserFactory)
|