SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 3978f25d authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Correct Submission factories

parent 8d63be66
No related branches found
No related tags found
No related merge requests found
import factory import factory
import datetime
import pytz import pytz
from django.utils import timezone from django.utils import timezone
from scipost.factories import ContributorFactory
from scipost.models import Contributor from scipost.models import Contributor
from journals.constants import SCIPOST_JOURNALS_DOMAINS from journals.constants import SCIPOST_JOURNALS_DOMAINS
from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal
from .constants import STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMISSION_INCOMING,\ from .constants import STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMISSION_INCOMING,\
STATUS_PUBLISHED STATUS_PUBLISHED, SUBMISSION_TYPE
from .models import Submission from .models import Submission
from faker import Faker from faker import Faker
...@@ -21,7 +19,7 @@ class SubmissionFactory(factory.django.DjangoModelFactory): ...@@ -21,7 +19,7 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
model = Submission model = Submission
author_list = factory.Faker('name') author_list = factory.Faker('name')
submitted_by = factory.SubFactory(ContributorFactory) submitted_by = Contributor.objects.first()
submitted_to_journal = factory.Sequence(lambda n: random_scipost_journal()) submitted_to_journal = factory.Sequence(lambda n: random_scipost_journal())
title = factory.lazy_attribute(lambda x: Faker().sentence()) title = factory.lazy_attribute(lambda x: Faker().sentence())
abstract = factory.lazy_attribute(lambda x: Faker().paragraph()) abstract = factory.lazy_attribute(lambda x: Faker().paragraph())
...@@ -32,7 +30,8 @@ class SubmissionFactory(factory.django.DjangoModelFactory): ...@@ -32,7 +30,8 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
abstract = Faker().paragraph() abstract = Faker().paragraph()
author_comments = Faker().paragraph() author_comments = Faker().paragraph()
remarks_for_editors = Faker().paragraph() remarks_for_editors = Faker().paragraph()
submission_type = 'Letter' submission_type = factory.Iterator(SUBMISSION_TYPE, getter=lambda c: c[0])
is_current = True
@factory.post_generation @factory.post_generation
def fill_arxiv_fields(self, create, extracted, **kwargs): def fill_arxiv_fields(self, create, extracted, **kwargs):
...@@ -43,11 +42,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory): ...@@ -43,11 +42,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
@factory.post_generation @factory.post_generation
def contributors(self, create, extracted, **kwargs): def contributors(self, create, extracted, **kwargs):
contributors = list(Contributor.objects.order_by('?') contributors = list(Contributor.objects.order_by('?')[:4])
.exclude(pk=self.submitted_by.pk).all()[:3])
# Auto-add the submitter as an author
self.submitted_by = contributors.pop()
if not create: if not create:
return return
# Auto-add the submitter as an author
self.authors.add(self.submitted_by) self.authors.add(self.submitted_by)
# Add three random authors # Add three random authors
...@@ -60,11 +61,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory): ...@@ -60,11 +61,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
timezone.now() timezone.now()
if kwargs.get('submission', False): if kwargs.get('submission', False):
self.submission_date = kwargs['submission'] self.submission_date = kwargs['submission']
else: self.cycle.update_deadline()
self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now", return
tzinfo=pytz.UTC) self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
tzinfo=pytz.UTC).date()
self.latest_activity = Faker().date_time_between(start_date=self.submission_date, self.latest_activity = Faker().date_time_between(start_date=self.submission_date,
end_date="now", tzinfo=pytz.UTC) end_date="now", tzinfo=pytz.UTC)
self.cycle.update_deadline()
class UnassignedSubmissionFactory(SubmissionFactory): class UnassignedSubmissionFactory(SubmissionFactory):
...@@ -79,24 +82,53 @@ class EICassignedSubmissionFactory(SubmissionFactory): ...@@ -79,24 +82,53 @@ class EICassignedSubmissionFactory(SubmissionFactory):
open_for_commenting = True open_for_commenting = True
open_for_reporting = True open_for_reporting = True
@factory.post_generation
def report_dates(self, create, extracted, **kwargs):
self.reporting_deadline = self.latest_activity + datetime.timedelta(weeks=2)
@factory.post_generation @factory.post_generation
def eic(self, create, extracted, **kwargs): def eic(self, create, extracted, **kwargs):
'''Assign an EIC to submission.'''
author_ids = list(self.authors.values_list('id', flat=True)) author_ids = list(self.authors.values_list('id', flat=True))
self.editor_in_charge = (Contributor.objects.order_by('?') self.editor_in_charge = (Contributor.objects.order_by('?')
.exclude(pk=self.submitted_by.pk) .exclude(pk=self.submitted_by.pk)
.exclude(pk__in=author_ids).first()) .exclude(pk__in=author_ids).first())
class ResubmittedScreeningSubmissionFactory(SubmissionFactory): class ResubmittedSubmissionFactory(SubmissionFactory):
'''
This Submission is a newer version of a Submission which is
already known by the SciPost database.
'''
status = STATUS_RESUBMISSION_INCOMING status = STATUS_RESUBMISSION_INCOMING
open_for_commenting = True
open_for_reporting = True
is_resubmission = True
@factory.post_generation
def alter_arxiv_fields(self, create, extracted, **kwargs):
'''Alter arxiv fields to save as version 2.'''
self.arxiv_identifier_w_vn_nr = '%sv2' % self.arxiv_identifier_wo_vn_nr
self.arxiv_vn_nr = 2
@factory.post_generation
def eic(self, create, extracted, **kwargs):
'''Assign an EIC to submission.'''
author_ids = list(self.authors.values_list('id', flat=True))
self.editor_in_charge = (Contributor.objects.order_by('?')
.exclude(pk=self.submitted_by.pk)
.exclude(pk__in=author_ids).first())
@factory.post_generation
def dates(self, create, extracted, **kwargs):
"""Overwrite the parent `dates` method to skip the update_deadline call."""
timezone.now()
if kwargs.get('submission', False):
self.submission_date = kwargs['submission']
return
self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
tzinfo=pytz.UTC).date()
self.latest_activity = Faker().date_time_between(start_date=self.submission_date,
end_date="now", tzinfo=pytz.UTC)
class PublishedSubmissionFactory(SubmissionFactory): class PublishedSubmissionFactory(SubmissionFactory):
status = STATUS_PUBLISHED status = STATUS_PUBLISHED
open_for_commenting = False open_for_commenting = False
open_for_reporting = False open_for_reporting = False
is_current = True
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