diff --git a/submissions/factories.py b/submissions/factories.py index cdf905fb56b2672019ee707381672388a939eba3..da936a2e7a8fcbe4d2d9225a6d4a83f2b4f812da 100644 --- a/submissions/factories.py +++ b/submissions/factories.py @@ -1,16 +1,14 @@ import factory -import datetime import pytz from django.utils import timezone -from scipost.factories import ContributorFactory from scipost.models import Contributor from journals.constants import SCIPOST_JOURNALS_DOMAINS from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal from .constants import STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMISSION_INCOMING,\ - STATUS_PUBLISHED + STATUS_PUBLISHED, SUBMISSION_TYPE from .models import Submission from faker import Faker @@ -21,7 +19,7 @@ class SubmissionFactory(factory.django.DjangoModelFactory): model = Submission 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()) title = factory.lazy_attribute(lambda x: Faker().sentence()) abstract = factory.lazy_attribute(lambda x: Faker().paragraph()) @@ -32,7 +30,8 @@ class SubmissionFactory(factory.django.DjangoModelFactory): abstract = Faker().paragraph() author_comments = 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 def fill_arxiv_fields(self, create, extracted, **kwargs): @@ -43,11 +42,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory): @factory.post_generation def contributors(self, create, extracted, **kwargs): - contributors = list(Contributor.objects.order_by('?') - .exclude(pk=self.submitted_by.pk).all()[:3]) + contributors = list(Contributor.objects.order_by('?')[:4]) + + # Auto-add the submitter as an author + self.submitted_by = contributors.pop() + if not create: return - # Auto-add the submitter as an author self.authors.add(self.submitted_by) # Add three random authors @@ -60,11 +61,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory): timezone.now() if kwargs.get('submission', False): self.submission_date = kwargs['submission'] - else: - self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now", - tzinfo=pytz.UTC) + self.cycle.update_deadline() + 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) + self.cycle.update_deadline() class UnassignedSubmissionFactory(SubmissionFactory): @@ -79,24 +82,53 @@ class EICassignedSubmissionFactory(SubmissionFactory): open_for_commenting = 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 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()) -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 + 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): status = STATUS_PUBLISHED open_for_commenting = False open_for_reporting = False - is_current = True