コード例 #1
0
    def test_publication_status_is_reflected_after_files_expire(self):
        """The submission has been published/announced, and files expired."""
        with self.app.app_context():
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission.submission_id)
            db_submission.status = db_submission.DELETED_PUBLISHED
            dated = (datetime.now() - datetime.utcfromtimestamp(0))
            primary = self.submission.primary_classification.category
            db_submission.document = classic.models.Document(
                document_id=1,
                paper_id='1901.00123',
                title=self.submission.metadata.title,
                authors=self.submission.metadata.authors_display,
                dated=dated.total_seconds(),
                primary_subject_class=primary,
                created=datetime.now(),
                submitter_email=self.submission.creator.email,
                submitter_id=self.submission.creator.native_id
            )
            session.add(db_submission)
            session.commit()

            # Submission state should reflect publication status.
            submission, _ = events.load(self.submission.submission_id)
            self.assertEqual(submission.status, submission.PUBLISHED,
                             "Submission should have published status.")
            self.assertEqual(submission.arxiv_id, "1901.00123",
                             "arXiv paper ID should be set")
            self.assertFalse(submission.active,
                             "Published submission should no longer be active")
コード例 #2
0
    def test_submission_placed_on_hold(self):
        """Before publication, a submission may be placed on hold."""
        # Client creates the submission.
        example = os.path.join(BASEPATH, 'examples/complete_submission.json')
        with open(example) as f:
            data = json.load(f)
        response = self.client.post('/', data=json.dumps(data),
                                    content_type='application/json',
                                    headers=self.headers)
        submission_id = json.loads(response.data)['submission_id']

        # Moderator, admin, or other agent places the submission on hold.
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()
            submission = session.query(classic.models.Submission) \
                .get(submission_id)
            submission.status = submission.ON_HOLD
            session.add(submission)
            session.commit()

        # Client gets submission state.
        response = self.client.get(f'/{submission_id}/', headers=self.headers)
        submission_data = json.loads(response.data)
        self.assertEqual(submission_data['status'], 'hold',
                         "Status should be `hold`")
コード例 #3
0
    def test_sticky_status_is_set(self):
        """A sticky status is set during moderation."""
        # Client creates the submission.
        example = os.path.join(BASEPATH, 'examples/complete_submission.json')
        with open(example) as f:
            data = json.load(f)
        response = self.client.post('/', data=json.dumps(data),
                                    content_type='application/json',
                                    headers=self.headers)
        submission_id = json.loads(response.data)['submission_id']

        # Moderator, admin, or other agent places the submission on hold,
        #  and a sticky status is set.
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()
            submission = session.query(classic.models.Submission)\
                .get(submission_id)
            submission.status = submission.ON_HOLD
            submission.sticky_status = submission.ON_HOLD
            session.add(submission)
            session.commit()

        # Client gets submission state.
        response = self.client.get(f'/{submission_id}/', headers=self.headers)
        submission_data = json.loads(response.data)
        self.assertEqual(submission_data['status'], 'hold',
                         "Status should be `hold`")

        # Client withdraws the submission from the queue.
        response = self.client.post(f'/{submission_id}/',
                                    data=json.dumps({"finalized": False}),
                                    content_type='application/json',
                                    headers=self.headers)
        submission_data = json.loads(response.data)
        self.assertFalse(submission_data['finalized'],
                         "Should no longer be finalized")

        # Client gets submission state.
        response = self.client.get(f'/{submission_id}/', headers=self.headers)
        submission_data = json.loads(response.data)
        self.assertFalse(submission_data['finalized'],
                         "Should no longer be finalized")
        self.assertEqual(submission_data['status'], 'working',
                         "Status should be `working`")

        # Client finalizes the submission for moderation.
        response = self.client.post(f'/{submission_id}/',
                                    data=json.dumps({"finalized": True}),
                                    content_type='application/json',
                                    headers=self.headers)
        submission_data = json.loads(response.data)

        # Client gets submission state.
        response = self.client.get(f'/{submission_id}/', headers=self.headers)
        submission_data = json.loads(response.data)
        self.assertTrue(submission_data['finalized'], "Should be finalized")
        self.assertEqual(submission_data['status'], 'hold',
                         "Status should be `hold`, as sticky_status was set")
コード例 #4
0
def in_memory_db():
    """Provide an in-memory sqlite database for testing purposes."""
    app = Flask('foo')
    app.config['CLASSIC_DATABASE_URI'] = 'sqlite://'

    with app.app_context():
        classic.init_app(app)
        classic.create_all()
        try:
            yield classic.current_session()
        except Exception:
            raise
        finally:
            classic.drop_all()
コード例 #5
0
    def test_publication_failed(self):
        """The submission was not published successfully."""
        with self.app.app_context():
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission.submission_id)
            db_submission.status = db_submission.ERROR_STATE
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            submission, _ = events.load(self.submission.submission_id)
            self.assertEqual(submission.status, submission.ERROR,
                             "Submission should have error status.")
コード例 #6
0
    def test_scheduled_tomorrow_status_is_reflected(self):
        """The submission has been scheduled for publication tomorrow."""
        with self.app.app_context():
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission.submission_id)
            db_submission.status = db_submission.NEXT_PUBLISH_DAY
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            submission, _ = events.load(self.submission.submission_id)
            self.assertEqual(submission.status, submission.SCHEDULED,
                             "Submission should be scheduled for tomorrow.")
コード例 #7
0
    def test_scheduled_status_is_reflected_prior_to_announcement(self):
        """The submission is being published; not yet announced."""
        with self.app.app_context():
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission.submission_id)
            db_submission.status = db_submission.NEEDS_EMAIL
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            submission, _ = events.load(self.submission.submission_id)
            self.assertEqual(submission.status, submission.SCHEDULED,
                             "Submission should have scheduled status.")
コード例 #8
0
    def test_scheduled_status_is_reflected_processing_submission(self):
        """The submission has been scheduled for publication today."""
        with self.app.app_context():
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission.submission_id)
            db_submission.status = db_submission.PROCESSING_SUBMISSION
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            submission, _ = events.load(self.submission.submission_id)
            self.assertEqual(submission.status, submission.SCHEDULED,
                             "Submission should have scheduled status.")
コード例 #9
0
    def test_deleted(self):
        """The submission was deleted."""
        with self.app.app_context():
            session = classic.current_session()

            for classic_status in classic.models.Submission.DELETED:
                # Publication agent publishes the paper.
                db_submission = session.query(classic.models.Submission)\
                    .get(self.submission.submission_id)
                db_submission.status = classic_status
                session.add(db_submission)
                session.commit()

                # Submission state should reflect scheduled status.
                submission, _ = events.load(self.submission.submission_id)
                self.assertEqual(submission.status, submission.DELETED,
                                 "Submission should have deleted status.")
コード例 #10
0
    def test_publication_failed(self):
        """The submission was not published successfully."""
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission_id)
            db_submission.status = db_submission.ERROR_STATE
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            response = self.client.get(f'/{self.submission_id}/',
                                       headers=self.headers)
            submission = json.loads(response.data)
            self.assertEqual(submission['status'], Submission.ERROR,
                             "Submission should have error status.")
コード例 #11
0
    def test_scheduled_tomorrow_status_is_reflected(self):
        """The submission has been scheduled for publication tomorrow."""
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission_id)
            db_submission.status = db_submission.NEXT_PUBLISH_DAY
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            response = self.client.get(f'/{self.submission_id}/',
                                       headers=self.headers)
            submission = json.loads(response.data)
            self.assertEqual(submission['status'], Submission.SCHEDULED,
                             "Submission should be scheduled for tomorrow.")
コード例 #12
0
    def test_scheduled_status_is_reflected_prior_to_announcement(self):
        """The submission is being published; not yet announced."""
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission_id)
            db_submission.status = db_submission.NEEDS_EMAIL
            session.add(db_submission)
            session.commit()

            # Submission state should reflect scheduled status.
            response = self.client.get(f'/{self.submission_id}/',
                                       headers=self.headers)
            submission = json.loads(response.data)
            self.assertEqual(submission['status'], Submission.SCHEDULED,
                             "Submission should have scheduled status.")
コード例 #13
0
    def test_deleted(self):
        """The submission was deleted."""
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()

            for classic_status in classic.models.Submission.DELETED:
                # Publication agent publishes the paper.
                db_submission = session.query(classic.models.Submission)\
                    .get(self.submission_id)
                db_submission.status = classic_status
                session.add(db_submission)
                session.commit()

                # Submission state should reflect scheduled status.
                response = self.client.get(f'/{self.submission_id}/',
                                           headers=self.headers)
                submission = json.loads(response.data)
                self.assertEqual(submission['status'], Submission.DELETED,
                                 "Submission should have deleted status.")
コード例 #14
0
    def test_publication_status_is_reflected_after_files_expire(self):
        """The submission has been published/announced, and files expired."""
        with self.app.app_context():
            from events.services import classic
            session = classic.current_session()

            # Publication agent publishes the paper.
            db_submission = session.query(classic.models.Submission)\
                .get(self.submission_id)
            db_submission.status = db_submission.DELETED_PUBLISHED
            dated = (datetime.now() - datetime.utcfromtimestamp(0))
            primary = self.submission['primary_classification']['category']
            db_submission.document = classic.models.Document(
                document_id=1,
                paper_id='1901.00123',
                title=self.submission['metadata']['title'],
                authors=self.submission['metadata']['authors_display'],
                dated=dated.total_seconds(),
                primary_subject_class=primary,
                created=datetime.now(),
                submitter_email=self.submission['creator']['email'],
                submitter_id=self.submission['creator']['user_id']
            )
            session.add(db_submission)
            session.commit()

            # Submission state should reflect publication status.
            response = self.client.get(f'/{self.submission_id}/',
                                       headers=self.headers)
            submission = json.loads(response.data)
            self.assertEqual(submission['status'], Submission.PUBLISHED,
                             "Submission should have published status.")
            self.assertEqual(submission['arxiv_id'], "1901.00123",
                             "arXiv paper ID should be set")
            self.assertFalse(submission['active'],
                             "Published submission should no longer be active")