SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 7019d4a1 authored by George Katsikas's avatar George Katsikas :goat:
Browse files

provide new factories for making tests

parent a247af64
No related branches found
No related tags found
Loading
...@@ -9,6 +9,9 @@ from django.test import TestCase ...@@ -9,6 +9,9 @@ from django.test import TestCase
from common.helpers import model_form_data from common.helpers import model_form_data
from scipost.factories import UserFactory, ContributorFactory from scipost.factories import UserFactory, ContributorFactory
from submissions.factories import PreprintServerFactory
from ..factories import ( from ..factories import (
CommentaryFactory, CommentaryFactory,
UnvettedCommentaryFactory, UnvettedCommentaryFactory,
...@@ -33,6 +36,8 @@ class TestArxivQueryForm(TestCase): ...@@ -33,6 +36,8 @@ class TestArxivQueryForm(TestCase):
def setUp(self): def setUp(self):
add_groups_and_permissions() add_groups_and_permissions()
ContributorFactory.create_batch(5) ContributorFactory.create_batch(5)
# Create the arXiv preprint server
PreprintServerFactory.arxiv()
def test_new_arxiv_identifier_is_valid(self): def test_new_arxiv_identifier_is_valid(self):
new_identifier_data = {"identifier": "1612.07611v1"} new_identifier_data = {"identifier": "1612.07611v1"}
......
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import random
import factory
from finances.models import WorkLog
from production.constants import PRODUCTION_ALL_WORK_LOG_TYPES
from scipost.factories import UserFactory
from common.faker import LazyRandEnum, fake
class WorkLogFactory(factory.django.DjangoModelFactory):
class Meta:
model = WorkLog
user = factory.SubFactory(UserFactory)
comments = factory.Faker("paragraph")
log_type = LazyRandEnum(PRODUCTION_ALL_WORK_LOG_TYPES)
duration = factory.LazyAttribute(lambda _: fake.duration())
work_date = factory.Faker("date_this_year")
created = factory.Faker("past_date", start_date="-1y")
content_type = None
object_id = None
content = None
...@@ -2,22 +2,26 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" ...@@ -2,22 +2,26 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3" __license__ = "AGPL v3"
import factory
import datetime import datetime
import pytz
import random import random
from string import ascii_lowercase from string import ascii_lowercase
import factory
import pytz
from common.helpers import ( from common.helpers import (
random_digits, random_digits,
random_external_doi, random_external_doi,
random_external_journal_abbrev, random_external_journal_abbrev,
) )
from journals.constants import JOURNAL_STRUCTURE, PUBLICATION_PUBLISHED
from .models import Journal, Volume, Issue, Publication, Reference
from faker import Faker from faker import Faker
from journals.constants import (
ISSUES_AND_VOLUMES,
ISSUES_ONLY,
JOURNAL_STRUCTURE,
PUBLICATION_PUBLISHED,
)
from .models import Issue, Journal, Publication, Reference, Volume
class ReferenceFactory(factory.django.DjangoModelFactory): class ReferenceFactory(factory.django.DjangoModelFactory):
...@@ -53,6 +57,22 @@ class JournalFactory(factory.django.DjangoModelFactory): ...@@ -53,6 +57,22 @@ class JournalFactory(factory.django.DjangoModelFactory):
model = Journal model = Journal
django_get_or_create = ("name",) django_get_or_create = ("name",)
@classmethod
def SciPostPhysics(cls):
return cls(
name="SciPost Physics",
doi_label="SciPostPhys",
structure=ISSUES_AND_VOLUMES,
)
@classmethod
def SciPostPhysicsProc(cls):
return cls(
name="SciPost Physics Proceedings",
doi_label="SciPostPhysProc",
structure=ISSUES_ONLY,
)
class VolumeFactory(factory.django.DjangoModelFactory): class VolumeFactory(factory.django.DjangoModelFactory):
in_journal = factory.SubFactory(JournalFactory) in_journal = factory.SubFactory(JournalFactory)
...@@ -71,7 +91,7 @@ class VolumeFactory(factory.django.DjangoModelFactory): ...@@ -71,7 +91,7 @@ class VolumeFactory(factory.django.DjangoModelFactory):
class IssueFactory(factory.django.DjangoModelFactory): class IssueFactory(factory.django.DjangoModelFactory):
in_volume = factory.Iterator(Volume.objects.all()) in_volume = factory.SubFactory(VolumeFactory)
number = factory.LazyAttribute(lambda o: o.in_volume.issues.count() + 1) number = factory.LazyAttribute(lambda o: o.in_volume.issues.count() + 1)
doi_label = factory.LazyAttribute( doi_label = factory.LazyAttribute(
lambda o: "%s.%i" % (o.in_volume.doi_label, o.number) lambda o: "%s.%i" % (o.in_volume.doi_label, o.number)
......
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import random
import factory
from journals.factories import IssueFactory
from proceedings.models import Proceedings
import datetime
class ProceedingsFactory(factory.django.DjangoModelFactory):
class Meta:
model = Proceedings
issue = factory.SubFactory(IssueFactory)
event_name = factory.Faker("company")
event_suffix = factory.Faker("company_suffix")
event_description = factory.Faker("paragraph")
event_start_date = factory.Faker("date_this_decade")
event_end_date = factory.LazyAttribute(
lambda self: self.event_start_date
+ datetime.timedelta(
seconds=random.randint(0, 60 * 60 * 24 * 365),
)
)
submissions_open = factory.Faker("date_this_decade")
submissions_close = factory.LazyAttribute(
lambda self: self.submissions_open
+ datetime.timedelta(
seconds=random.randint(0, 60 * 60 * 24 * 365),
)
)
submissions_deadline = factory.LazyAttribute(
lambda self: self.submissions_close
+ datetime.timedelta(
seconds=random.randint(0, 60 * 60 * 24 * 365),
)
)
preface_title = factory.Faker("sentence")
preface_text = factory.Faker("paragraph")
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import random
from django.db.models.signals import post_save
import factory
from production.constants import (
PRODUCTION_EVENTS,
PRODUCTION_STREAM_STATUS,
PROOFS_REPO_STATUSES,
)
from production.models import (
ProductionEvent,
ProductionStream,
ProductionUser,
ProofsRepository,
)
from scipost.factories import UserFactory
from submissions.factories.submission import SubmissionFactory
from common.faker import LazyAwareDate, LazyRandEnum, fake
import datetime
class ProductionUserFactory(factory.django.DjangoModelFactory):
class Meta:
model = ProductionUser
user = factory.SubFactory(UserFactory)
name = factory.LazyAttribute(
lambda self: self.user.first_name + " " + self.user.last_name
)
@factory.django.mute_signals(post_save)
class ProductionStreamFactory(factory.django.DjangoModelFactory):
class Meta:
model = ProductionStream
submission = factory.SubFactory(SubmissionFactory)
opened = LazyAwareDate("date_this_decade")
closed = factory.LazyAttribute(
# Random date between opened and 1 year later
lambda self: self.opened
+ datetime.timedelta(
seconds=random.randint(0, 60 * 60 * 24 * 365),
)
)
status = LazyRandEnum(PRODUCTION_STREAM_STATUS)
officer = factory.SubFactory(ProductionUserFactory)
supervisor = factory.SubFactory(ProductionUserFactory)
invitations_officer = factory.SubFactory(ProductionUserFactory)
on_hold = False
# work_logs = factory.SubFactory(WorkLogFactory)
class ProductionEventFactory(factory.django.DjangoModelFactory):
class Meta:
model = ProductionEvent
stream = factory.SubFactory(ProductionStreamFactory)
event = factory.Faker("random_element", elements=PRODUCTION_EVENTS)
comments = factory.Faker("paragraph")
noted_on = factory.Faker("past_date", start_date="-1y")
noted_by = factory.LazyAttribute(
lambda self: random.choice([self.stream.officer, self.stream.supervisor])
)
noted_to = factory.LazyAttribute(
lambda self: random.choice([self.stream.officer, self.stream.supervisor])
)
duration = fake.duration()
class ProofsRepositoryFactory(factory.django.DjangoModelFactory):
class Meta:
model = ProofsRepository
stream = factory.SubFactory(ProductionStreamFactory)
status = LazyRandEnum(PROOFS_REPO_STATUSES)
name = factory.LazyAttribute(
lambda self: ProofsRepository._get_repo_name(self.stream)
)
...@@ -28,3 +28,5 @@ from .report import ( ...@@ -28,3 +28,5 @@ from .report import (
) )
from .recommendation import EICRecommendationFactory from .recommendation import EICRecommendationFactory
from .preprintserver import PreprintServerFactory
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import factory
from faker import Faker
from submissions.models.preprint_server import PreprintServer
class PreprintServerFactory(factory.django.DjangoModelFactory):
name = factory.Faker("sentence")
url = factory.Faker("url")
class Meta:
model = PreprintServer
@classmethod
def arxiv(cls):
return cls(name="arXiv", url="https://arxiv.org/")
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
import factory
from common.faker import LazyRandEnum
from journals.factories import JournalFactory
from submissions.factories.submission import SubmissionFactory
from submissions.models.decision import EditorialDecision
class EditorialDecisionFactory(factory.django.DjangoModelFactory):
class Meta:
model = EditorialDecision
django_get_or_create = ("submission", "for_journal")
submission = factory.SubFactory(SubmissionFactory)
for_journal = factory.SubFactory(JournalFactory)
decision = LazyRandEnum(EditorialDecision.EDITORIAL_DECISION_STATUSES)
taken_on = factory.Faker("date_this_decade")
remarks_for_authors = factory.Faker("paragraph")
status = LazyRandEnum(EditorialDecision.EDITORIAL_DECISION_STATUSES)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment