Example #1
0
    def test_latest_article_version_list_only_unpublished(self):
        "ensure only the latest versions of the articles are returned when unpublished versions exist"
        self.assertEqual(self.total_version_count, models.ArticleVersion.objects.count())

        unpublish_these = [
            (3401, 3),
            (6250, 3),
            (8025, 2),
            (9571, 1)
        ]
        for msid, version in unpublish_these:
            self.unpublish(msid, version)

        total, results = logic.latest_article_version_list(only_published=False) # THIS IS THE IMPORTANT BIT
        total, results = logic.latest_unpublished_article_versions()

        self.assertEqual(len(results), self.total_art_count)
        self.assertEqual(len(results), models.Article.objects.count())

        result_idx = {obj.article.manuscript_id: obj for obj in results}
        expected_result = [
            (353, 1),
            (385, 1),
            (1328, 1),
            (2619, 1),
            (3401, 3),
            (3665, 1),
            (6250, 3),
            (7301, 1),
            (8025, 2),
            (9571, 1)
        ]
        for msid, v in expected_result:
            # throws a DoesNotExist if expected not in latest resultset
            self.assertEqual(result_idx[msid].version, v)
Example #2
0
    def test_latest_article_version_list_with_published(self):
        "ensure only the latest versions of the articles are returned when unpublished versions exist"
        self.assertEqual(self.total_version_count,
                         models.ArticleVersion.objects.count())

        unpublish_these = [(3401, 3), (6250, 3), (8025, 2), (9571, 1)]
        for msid, version in unpublish_these:
            self.unpublish(msid, version)

        total, latest = logic.latest_article_version_list(
            only_published=True)  # THIS IS THE IMPORTANT BIT
        latest_idx = {obj.article.manuscript_id: obj for obj in latest}

        self.assertEqual(len(latest),
                         self.total_art_count - 1)  # we remove 9571

        expected_latest = [
            (353, 1),
            (385, 1),
            (1328, 1),
            (2619, 1),
            (3401, 2),  # from 3 to 2
            (3665, 1),
            (6250, 2),  # from 3 to 2
            (7301, 1),
            (8025, 1),  # from 2 to 1
            #(9571, 1) # from 1 to None
        ]
        for msid, expected_version in expected_latest:
            try:
                av = latest_idx[msid]
                self.assertEqual(av.version, expected_version)
            except BaseException:
                print('failed on', msid, 'version', expected_version)
                raise
Example #3
0
    def test_latest_article_version_list_wrapper(self):
        unpublish_these = [
            (9571, 1)
        ]
        for msid, version in unpublish_these:
            self.unpublish(msid, version)

        wrapped_total, wrapped_results = logic.latest_article_version_list(only_published=False)
        total, results = logic.latest_unpublished_article_versions()
        self.assertEqual(wrapped_total, total)
        self.assertItemsEqual(wrapped_results, results)
Example #4
0
    def test_latest_article_version_list_wrapper(self):
        unpublish_these = [(9571, 1)]
        for msid, version in unpublish_these:
            self.unpublish(msid, version)

        wrapper_total, wrapper_results = logic.latest_article_version_list(
            only_published=False)
        total, results = logic.latest_unpublished_article_versions()
        self.assertEqual(wrapper_total, total)
        # checks the items as well as the length
        # https://docs.python.org/3/library/unittest.html?highlight=assertcountequal#unittest.TestCase.assertCountEqual
        self.assertCountEqual(wrapper_results, results)
Example #5
0
    def test_latest_article_version_list(self):
        "ensure only the latest versions of the articles are returned"
        self.assertEqual(self.total_version_count,
                         models.ArticleVersion.objects.count())

        total, latest = logic.latest_article_version_list()
        self.assertEqual(len(latest), self.total_art_count)
        self.assertEqual(len(latest), models.Article.objects.count())

        latest_idx = {obj.article.manuscript_id: obj for obj in latest}
        expected_latest = [(353, 1), (385, 1), (1328, 1), (2619, 1), (3401, 3),
                           (3665, 1), (6250, 3), (7301, 1), (8025, 2),
                           (9571, 1)]
        for msid, v in expected_latest:
            # throws a DoesNotExist if expected not in latest resultset
            self.assertEqual(latest_idx[msid].version, v)
Example #6
0
    def test_latest_article_version_list_with_published(self):
        "ensure only the latest versions of the articles are returned when unpublished versions exist"
        self.assertEqual(self.total_version_count, models.ArticleVersion.objects.count())

        unpublish_these = [
            (3401, 3),
            (6250, 3),
            (8025, 2),
            (9571, 1)
        ]
        for msid, version in unpublish_these:
            self.unpublish(msid, version)

        total, latest = logic.latest_article_version_list(only_published=True) # THIS IS THE IMPORTANT BIT
        latest_idx = {obj.article.manuscript_id: obj for obj in latest}

        self.assertEqual(len(latest), self.total_art_count - 1) # we remove 9571

        expected_latest = [
            (353, 1),
            (385, 1),
            (1328, 1),
            (2619, 1),
            (3401, 2), # from 3 to 2
            (3665, 1),
            (6250, 2), # from 3 to 2
            (7301, 1),
            (8025, 1), # from 2 to 1
            #(9571, 1) # from 1 to None
        ]
        for msid, expected_version in expected_latest:
            try:
                av = latest_idx[msid]
                self.assertEqual(av.version, expected_version)
            except:
                print 'failed on', msid, 'version', expected_version
                raise
Example #7
0
    def test_latest_article_version_list(self):
        "ensure only the latest versions of the articles are returned"
        self.assertEqual(self.total_version_count, models.ArticleVersion.objects.count())

        total, latest = logic.latest_article_version_list()
        self.assertEqual(len(latest), self.total_art_count)
        self.assertEqual(len(latest), models.Article.objects.count())

        latest_idx = {obj.article.manuscript_id: obj for obj in latest}
        expected_latest = [
            (353, 1),
            (385, 1),
            (1328, 1),
            (2619, 1),
            (3401, 3),
            (3665, 1),
            (6250, 3),
            (7301, 1),
            (8025, 2),
            (9571, 1)
        ]
        for msid, v in expected_latest:
            # throws a DoesNotExist if expected not in latest resultset
            self.assertEqual(latest_idx[msid].version, v)
Example #8
0
    def test_only_most_recent_article_versions_returned(self):
        an_hour_ago = utils.utcnow() - timedelta(hours=1)
        many_hours_ago = an_hour_ago - timedelta(hours=999)
        fmt = utils.ymdhms
        article_data_list = [
            {'title': 'foo',
             'version': 1,
             'doi': "10.7554/eLife.00001",
             'pub-date': fmt(an_hour_ago),
             },


            {'title': 'bar',
             'version': 1,
             'doi': "10.7554/eLife.00002",
             'pub-date': fmt(many_hours_ago),
             },
            {'title': 'bar',
             'version': 2,
             'doi': "10.7554/eLife.00002",
             'pub-date': fmt(many_hours_ago - timedelta(hours=1)),
             'update': fmt(many_hours_ago - timedelta(hours=1)),
             },
            {'title': 'bar',
             'version': 3,
             'doi': "10.7554/eLife.00002",
             'pub-date': fmt(many_hours_ago - timedelta(hours=2)),
             'update': fmt(many_hours_ago - timedelta(hours=2)),
             },


            {'title': 'baz',
             'version': 1,
             'doi': "10.7554/eLife.00003",
             'pub-date': fmt(an_hour_ago + timedelta(minutes=5)),
             },
            {'title': 'baz',
             'version': 2,
             'doi': "10.7554/eLife.00003",
             'pub-date': fmt(an_hour_ago + timedelta(minutes=10)),
             'update': fmt(an_hour_ago + timedelta(minutes=10)),
             }

        ]
        [self.add_or_update_article(**article_data) for article_data in article_data_list]

        self.assertEqual(models.Article.objects.count(), 3)
        self.assertEqual(models.ArticleVersion.objects.count(), 6)

        total, avlist = logic.latest_article_version_list()
        self.assertEqual(total, 3)
        self.assertEqual(len(avlist), 3)

        expected_version_order = [
            ('10.7554/eLife.00003', 2), # published less than an hour ago
            ('10.7554/eLife.00001', 1), # published an hour ago
            ('10.7554/eLife.00002', 3), # published many hours ago
        ]

        for av, expected in zip(avlist, expected_version_order):
            self.assertEqual(av.article.doi, expected[0])
            self.assertEqual(av.version, expected[1])
Example #9
0
    def test_only_most_recent_article_versions_returned(self):
        an_hour_ago = utils.utcnow() - timedelta(hours=1)
        many_hours_ago = an_hour_ago - timedelta(hours=999)
        fmt = utils.ymdhms
        article_data_list = [
            {'title': 'foo',
             'version': 1,
             'doi': "10.7554/eLife.00001",
             'pub-date': fmt(an_hour_ago),
             },


            {'title': 'bar',
             'version': 1,
             'doi': "10.7554/eLife.00002",
             'pub-date': fmt(many_hours_ago),
             },
            {'title': 'bar',
             'version': 2,
             'doi': "10.7554/eLife.00002",
             'pub-date': fmt(many_hours_ago - timedelta(hours=1)),
             'update': fmt(many_hours_ago - timedelta(hours=1)),
             },
            {'title': 'bar',
             'version': 3,
             'doi': "10.7554/eLife.00002",
             'pub-date': fmt(many_hours_ago - timedelta(hours=2)),
             'update': fmt(many_hours_ago - timedelta(hours=2)),
             },


            {'title': 'baz',
             'version': 1,
             'doi': "10.7554/eLife.00003",
             'pub-date': fmt(an_hour_ago + timedelta(minutes=5)),
             },
            {'title': 'baz',
             'version': 2,
             'doi': "10.7554/eLife.00003",
             'pub-date': fmt(an_hour_ago + timedelta(minutes=10)),
             'update': fmt(an_hour_ago + timedelta(minutes=10)),
             }

        ]
        [logic.add_or_update_article(**article_data) for article_data in article_data_list]

        self.assertEqual(models.Article.objects.count(), 3)
        self.assertEqual(models.ArticleVersion.objects.count(), 6)

        total, avlist = logic.latest_article_version_list()
        self.assertEqual(total, 3)
        self.assertEqual(len(avlist), 3)

        expected_version_order = [
            ('10.7554/eLife.00003', 2), # published less than an hour ago
            ('10.7554/eLife.00001', 1), # published an hour ago
            ('10.7554/eLife.00002', 3), # published many hours ago
        ]

        for av, expected in zip(avlist, expected_version_order):
            self.assertEqual(av.article.doi, expected[0])
            self.assertEqual(av.version, expected[1])