From d757c12f42c0854858d2c0787cbb5f7121d6ca42 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Sat, 13 May 2017 20:01:55 +0200
Subject: [PATCH] Add tests for submission listview

---
 submissions/constants.py  |  9 ++++++---
 submissions/factories.py  | 24 ++++++++++++++++--------
 submissions/test_utils.py |  6 +++---
 submissions/test_views.py | 33 ++++++++++++++++++++++++++++++++-
 4 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/submissions/constants.py b/submissions/constants.py
index da15bf7ac..ffb506708 100644
--- a/submissions/constants.py
+++ b/submissions/constants.py
@@ -6,6 +6,9 @@ STATUS_AWAITING_ED_REC = 'awaiting_ed_rec'
 STATUS_REVIEW_CLOSED = 'review_closed'
 STATUS_ACCEPTED = 'accepted'
 STATUS_PUBLISHED = 'published'
+STATUS_RESUBMITTED = 'resubmitted'
+STATUS_RESUBMITTED_REJECTED = 'resubmitted_and_rejected'
+STATUS_RESUBMITTED_REJECTED_VISIBLE = 'resubmitted_and_rejected_visible'
 SUBMISSION_STATUS = (
     (STATUS_UNASSIGNED, 'Unassigned, undergoing pre-screening'),
     (STATUS_RESUBMISSION_INCOMING, 'Resubmission incoming'),
@@ -14,9 +17,9 @@ SUBMISSION_STATUS = (
     (STATUS_REVIEW_CLOSED, 'Review period closed, editorial recommendation pending'),
     # If revisions required: resubmission creates a new Submission object
     (STATUS_REVISION_REQUESTED, 'Editor-in-charge has requested revision'),
-    ('resubmitted', 'Has been resubmitted'),
-    ('resubmitted_and_rejected', 'Has been resubmitted and subsequently rejected'),
-    ('resubmitted_and_rejected_visible',
+    (STATUS_RESUBMITTED, 'Has been resubmitted'),
+    (STATUS_RESUBMITTED_REJECTED, 'Has been resubmitted and subsequently rejected'),
+    (STATUS_RESUBMITTED_REJECTED_VISIBLE,
      'Has been resubmitted and subsequently rejected (still publicly visible)'),
     # If acceptance/rejection:
     ('voting_in_preparation', 'Voting in preparation (eligible Fellows being selected)'),
diff --git a/submissions/factories.py b/submissions/factories.py
index da936a2e7..9eb4eb4f2 100644
--- a/submissions/factories.py
+++ b/submissions/factories.py
@@ -8,7 +8,7 @@ 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, SUBMISSION_TYPE
+                       STATUS_PUBLISHED, SUBMISSION_TYPE, STATUS_RESUBMITTED
 from .models import Submission
 
 from faker import Faker
@@ -71,9 +71,7 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
 
 
 class UnassignedSubmissionFactory(SubmissionFactory):
-    '''
-    This Submission is a 'new request' by a Contributor for its Submission.
-    '''
+    '''This Submission is a 'new request' by a Contributor for its Submission.'''
     status = STATUS_UNASSIGNED
 
 
@@ -92,18 +90,28 @@ class EICassignedSubmissionFactory(SubmissionFactory):
 
 
 class ResubmittedSubmissionFactory(SubmissionFactory):
-    '''
+    '''This Submission is a `resubmitted` version.'''
+    status = STATUS_RESUBMITTED
+    open_for_commenting = False
+    open_for_reporting = False
+    is_current = False
+    is_resubmission = False
+
+
+class ResubmissionFactory(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.'''
+    def fill_arxiv_fields(self, create, extracted, **kwargs):
+        '''Fill empty arxiv fields.'''
+        self.arxiv_link = 'https://arxiv.org/abs/%s' % self.arxiv_identifier_wo_vn_nr
         self.arxiv_identifier_w_vn_nr = '%sv2' % self.arxiv_identifier_wo_vn_nr
         self.arxiv_vn_nr = 2
 
diff --git a/submissions/test_utils.py b/submissions/test_utils.py
index 36f9a5ca7..d070e6c8a 100644
--- a/submissions/test_utils.py
+++ b/submissions/test_utils.py
@@ -9,7 +9,7 @@ from scipost.models import Contributor
 from .constants import STATUS_UNASSIGNED, STATUS_RESUBMISSION_INCOMING, STATUS_AWAITING_ED_REC,\
                        STATUS_EIC_ASSIGNED, CYCLE_DEFAULT, CYCLE_DIRECT_REC
 from .exceptions import CycleUpdateDeadlineError
-from .factories import UnassignedSubmissionFactory, ResubmittedSubmissionFactory
+from .factories import UnassignedSubmissionFactory, ResubmissionFactory
 from .utils import GeneralSubmissionCycle
 
 
@@ -69,7 +69,7 @@ class TestResubmissionSubmissionCycle(TestCase):
         self.submission_date = datetime.date.today()
         add_groups_and_permissions()
         ContributorFactory.create_batch(5)
-        self.submission = ResubmittedSubmissionFactory(
+        self.submission = ResubmissionFactory(
             dates__submission=self.submission_date
         )
 
@@ -108,7 +108,7 @@ class TestResubmissionDirectSubmissionCycle(TestCase):
         self.submission_date = datetime.date.today()
         add_groups_and_permissions()
         ContributorFactory.create_batch(5)
-        self.submission = ResubmittedSubmissionFactory(
+        self.submission = ResubmissionFactory(
             dates__submission=self.submission_date,
             refereeing_cycle=CYCLE_DIRECT_REC
         )
diff --git a/submissions/test_views.py b/submissions/test_views.py
index ee3a64993..2d05701eb 100644
--- a/submissions/test_views.py
+++ b/submissions/test_views.py
@@ -4,12 +4,15 @@ from django.core.urlresolvers import reverse
 from django.test import TestCase
 from django.test import Client
 
+from common.helpers import random_arxiv_identifier_without_version_number
 from common.helpers.test import add_groups_and_permissions
 from scipost.factories import ContributorFactory
 # from scipost.models import Contributor
 
 from .constants import STATUS_UNASSIGNED
-from .factories import EICassignedSubmissionFactory
+from .factories import UnassignedSubmissionFactory, EICassignedSubmissionFactory,\
+                       ResubmittedSubmissionFactory, ResubmissionFactory,\
+                       PublishedSubmissionFactory
 from .forms import SubmissionForm, SubmissionIdentifierForm
 from .models import Submission
 
@@ -204,3 +207,31 @@ class SubmissionDetailTest(BaseContributorTestCase):
     def test_status_code_200(self):
         response = self.client.get(self.target)
         self.assertEqual(response.status_code, 200)
+
+
+class SubmissionListTest(BaseContributorTestCase):
+    def test_public_list_view(self):
+        # Create invisible Submissions.
+        arxiv_id_resubmission = random_arxiv_identifier_without_version_number()
+        UnassignedSubmissionFactory.create()
+        ResubmissionFactory.create(arxiv_identifier_wo_vn_nr=arxiv_id_resubmission)
+
+        # Create visible submissions
+        visible_submission_ids = []
+        visible_submission_ids.append(ResubmittedSubmissionFactory
+                                      .create(arxiv_identifier_wo_vn_nr=arxiv_id_resubmission).id)
+        visible_submission_ids.append(EICassignedSubmissionFactory.create().id)
+        visible_submission_ids.append(PublishedSubmissionFactory.create().id)
+
+        # Check with hardcoded URL as this url shouldn't change!
+        client = Client()
+        response = client.get('/submissions/')
+        self.assertEqual(response.status_code, 200)
+
+        # Check submissions returned
+        returned_submissions_ids = [sub.id for sub in response.context['object_list']]
+
+        # Check if submission lists are equal
+        returned_submissions_ids.sort()
+        visible_submission_ids.sort()
+        self.assertListEqual(returned_submissions_ids, visible_submission_ids)
-- 
GitLab