166 lines
5.7 KiB
Python
166 lines
5.7 KiB
Python
# Copyright The IETF Trust 2015-2022, All Rights Reserved
|
|
import datetime
|
|
import debug # pyflakes:ignore
|
|
import factory
|
|
|
|
from typing import List # pyflakes:ignore
|
|
|
|
from django.utils import timezone
|
|
|
|
from ietf.group.models import (
|
|
Appeal,
|
|
AppealArtifact,
|
|
Group,
|
|
GroupEvent,
|
|
GroupMilestone,
|
|
GroupHistory,
|
|
Role,
|
|
RoleHistory
|
|
)
|
|
from ietf.review.factories import ReviewTeamSettingsFactory
|
|
from ietf.utils.timezone import date_today
|
|
|
|
|
|
class GroupFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model = Group
|
|
django_get_or_create = ('acronym',)
|
|
skip_postgeneration_save = True
|
|
|
|
name = factory.Faker('text', max_nb_chars=80)
|
|
acronym = factory.Sequence(lambda n: 'acronym%d' %n)
|
|
state_id = 'active'
|
|
type_id = 'wg'
|
|
list_email = factory.LazyAttribute(lambda a: '%s@ietf.org'% a.acronym)
|
|
uses_milestone_dates = True
|
|
used_roles = [] # type: List[str]
|
|
|
|
@factory.lazy_attribute
|
|
def parent(self):
|
|
if self.type_id in ['wg','ag']:
|
|
return GroupFactory(type_id='area')
|
|
elif self.type_id in ['rg','rag']:
|
|
return GroupFactory(acronym='irtf', type_id='irtf')
|
|
else:
|
|
return None
|
|
|
|
class ReviewTeamFactory(GroupFactory):
|
|
|
|
type_id = 'review'
|
|
|
|
@factory.post_generation
|
|
def settings(obj, create, extracted, **kwargs):
|
|
ReviewTeamSettingsFactory.create(group=obj,**kwargs)
|
|
|
|
class RoleFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model = Role
|
|
|
|
group = factory.SubFactory(GroupFactory)
|
|
person = factory.SubFactory('ietf.person.factories.PersonFactory')
|
|
email = factory.LazyAttribute(lambda obj: obj.person.email())
|
|
|
|
class GroupEventFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model = GroupEvent
|
|
|
|
group = factory.SubFactory(GroupFactory)
|
|
by = factory.SubFactory('ietf.person.factories.PersonFactory')
|
|
type = 'comment'
|
|
desc = factory.Faker('paragraph')
|
|
|
|
class BaseGroupMilestoneFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model = GroupMilestone
|
|
|
|
group = factory.SubFactory(GroupFactory)
|
|
state_id = 'active'
|
|
desc = factory.Faker('sentence')
|
|
|
|
class DatedGroupMilestoneFactory(BaseGroupMilestoneFactory):
|
|
group = factory.SubFactory(GroupFactory, uses_milestone_dates=True)
|
|
due = date_today() + datetime.timedelta(days=180)
|
|
|
|
class DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory):
|
|
group = factory.SubFactory(GroupFactory, uses_milestone_dates=False)
|
|
order = factory.Sequence(lambda n: n)
|
|
|
|
class GroupHistoryFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model=GroupHistory
|
|
skip_postgeneration_save = True
|
|
|
|
time = lambda: timezone.now()
|
|
group = factory.SubFactory(GroupFactory, state_id='active')
|
|
|
|
name = factory.LazyAttribute(lambda obj: obj.group.name)
|
|
state_id = factory.LazyAttribute(lambda obj: obj.group.state_id)
|
|
type_id = factory.LazyAttribute(lambda obj: obj.group.type_id)
|
|
parent = factory.LazyAttribute(lambda obj: obj.group.parent)
|
|
uses_milestone_dates = factory.LazyAttribute(lambda obj: obj.group.uses_milestone_dates)
|
|
used_roles = factory.LazyAttribute(lambda obj: obj.group.used_roles)
|
|
description = factory.LazyAttribute(lambda obj: obj.group.description)
|
|
list_email = factory.LazyAttribute(lambda obj: '%s@ietf.org'% obj.group.acronym) #TODO : move this to GroupFactory
|
|
list_subscribe = factory.LazyAttribute(lambda obj: obj.group.list_subscribe)
|
|
list_archive = factory.LazyAttribute(lambda obj: obj.group.list_archive)
|
|
comments = factory.LazyAttribute(lambda obj: obj.group.comments)
|
|
meeting_seen_as_area = factory.LazyAttribute(lambda obj: obj.group.meeting_seen_as_area)
|
|
acronym = factory.LazyAttribute(lambda obj: obj.group.acronym)
|
|
|
|
@factory.post_generation
|
|
def unused_states(obj, create, extracted, **kwargs):
|
|
if create:
|
|
if extracted:
|
|
obj.unused_states.set(extracted)
|
|
else:
|
|
obj.unused_states.set(obj.group.unused_states.all())
|
|
@factory.post_generation
|
|
def unused_tags(obj, create, extracted, **kwargs):
|
|
if create:
|
|
if extracted:
|
|
obj.unused_tags.set(extracted)
|
|
else:
|
|
obj.unused_tags.set(obj.group.unused_states.all())
|
|
|
|
class RoleHistoryFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model=RoleHistory
|
|
|
|
group = factory.SubFactory(GroupHistoryFactory)
|
|
person = factory.SubFactory('ietf.person.factories.PersonFactory')
|
|
email = factory.LazyAttribute(lambda obj: obj.person.email())
|
|
|
|
class AppealFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model=Appeal
|
|
|
|
name=factory.Faker("sentence")
|
|
group=factory.SubFactory(GroupFactory, acronym="iab")
|
|
|
|
class AppealArtifactFactory(factory.django.DjangoModelFactory):
|
|
class Meta:
|
|
model=AppealArtifact
|
|
skip_postgeneration_save = True
|
|
|
|
appeal = factory.SubFactory(AppealFactory)
|
|
artifact_type = factory.SubFactory("ietf.name.factories.AppealArtifactTypeNameFactory", slug="appeal")
|
|
content_type = "text/markdown;charset=utf-8"
|
|
# Needs newer factory_boy
|
|
# bits = factory.Transformer(
|
|
# "Some example **Markdown**",
|
|
# lambda o: memoryview(o.encode("utf-8") if isinstance(o,str) else o)
|
|
# )
|
|
#
|
|
# Usage: a = AppealArtifactFactory(set_bits__using="foo bar") or
|
|
# a = AppealArtifactFactory(set_bits__using=b"foo bar")
|
|
@factory.post_generation
|
|
def set_bits(obj, create, extracted, **kwargs):
|
|
if not create:
|
|
return
|
|
using = kwargs.pop("using","Some example **Markdown**")
|
|
if isinstance(using, str):
|
|
using = using.encode("utf-8")
|
|
obj.bits = memoryview(using)
|
|
obj.save()
|
|
|