Exemplo n.º 1
0
    def test_article_unpublished_version_not_returned(self):
        "unpublished article versions are not returned"
        self.unpublish(self.msid2, version=3)
        self.assertEqual(
            models.ArticleVersion.objects.filter(
                article__manuscript_id=self.msid2).exclude(
                    datetime_published=None).count(), 2)
        resp = self.c.get(reverse('v2:article', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        data = utils.json_loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['poa'])

        # correct data
        self.assertEqual(data['version'], 2)  # third version was unpublished

        # list of versions
        version_list = self.c.get(
            reverse('v2:article-version-list', kwargs={'id': self.msid2}))
        self.assertEqual(version_list.status_code, 200)
        version_list_data = utils.json_loads(version_list.content)
        self.assertEqual(len(version_list_data['versions']), 2)

        # directly trying to access the unpublished version
        unpublished_version = self.c.get(
            reverse('v2:article-version',
                    kwargs={
                        'id': self.msid2,
                        'version': 3
                    }))
        self.assertEqual(unpublished_version.status_code, 404)
Exemplo n.º 2
0
    def test_unpublished_article_versions_list(self):
        "valid json content is returned"

        # 2016-07-21: lax used to depend on certain values from ejp, but these are now pulled from the xml.
        # we need some data that can only come from ejp for this
        # import ejp_ingestor
        # ejp_data = join(self.fixture_dir, 'dummy-ejp-for-v2-api-fixtures.json')
        # ejp_ingestor.import_article_list_from_json_path(logic.journal(), ejp_data, create=False, update=True)

        resp = self.ac.get(
            reverse('v2:article-version-list', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(
            resp.content_type,
            'application/vnd.elife.article-history+json;version=1')
        data = utils.json_loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['history'])

        # correct data
        self.assertEqual(
            len(data['versions']),
            3)  # this article has two *published*, one *unpublished*

        # correct order
        expected = [1, 2, 3]
        given = [data['versions'][i]['version'] for i in range(0, 3)]
        self.assertEqual(given, expected)
Exemplo n.º 3
0
    def test_article_poa_unpublished(self):
        "the latest version of the requested article is returned"
        resp = self.ac.get(reverse('v2:article', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type, "application/vnd.elife.article-poa+json;version=1")
        data = json.loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['poa'])

        # correct data
        self.assertEqual(data['version'], 3)
Exemplo n.º 4
0
    def test_article_poa_unpublished(self):
        "the latest version of the requested article is returned"
        resp = self.ac.get(reverse('v2:article', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type,
                         "application/vnd.elife.article-poa+json;version=1")
        data = utils.json_loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['poa'])

        # correct data
        self.assertEqual(data['version'], 3)
Exemplo n.º 5
0
    def test_article_unpublished_ver_not_returned(self):
        "unpublished article versions are not returned"
        self.unpublish(self.msid2, version=3)
        self.assertEqual(models.ArticleVersion.objects.filter(article__manuscript_id=self.msid2).exclude(datetime_published=None).count(), 2)
        resp = self.c.get(reverse('v2:article', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        data = json.loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['poa'])

        # correct data
        self.assertEqual(data['version'], 2) # third version was unpublished
Exemplo n.º 6
0
    def test_article_list_paginated_page2(self):
        "a list of articles are returned, paginated by 1"
        resp = self.c.get(reverse('v2:article-list') + "?per-page=1&page=2")
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type, 'application/vnd.elife.article-list+json;version=1')
        data = json.loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['list'])

        # correct data
        self.assertEqual(len(data['items']), 1) # ONE result, [msid2]
        self.assertEqual(data['total'], 2)
        self.assertEqual(data['items'][0]['id'], str(self.msid2))
Exemplo n.º 7
0
    def test_article_list_paginated_page2(self):
        "a list of articles are returned, paginated by 1"
        resp = self.c.get(reverse('v2:article-list') + "?per-page=1&page=2")
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type,
                         'application/vnd.elife.article-list+json;version=1')
        data = utils.json_loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['list'])

        # correct data
        self.assertEqual(len(data['items']), 1)  # ONE result, [msid2]
        self.assertEqual(data['total'], 2)
        self.assertEqual(data['items'][0]['id'], str(self.msid2))
Exemplo n.º 8
0
    def test_article_list(self):
        "a list of published articles are returned to an unauthenticated response"
        resp = self.c.get(reverse('v2:article-list'))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type, 'application/vnd.elife.article-list+json;version=1')
        data = json.loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['list'])

        # correct data
        self.assertEqual(data['total'], 2) # two results, [msid1, msid2]
        av1, av2 = data['items']
        self.assertEqual(av1['version'], 2)
        self.assertEqual(av2['version'], 3)
Exemplo n.º 9
0
    def test_unpublished_article_versions_list(self):
        "valid json content is returned"
        # we need some data that can only come from ejp for this
        ejp_data = join(self.fixture_dir, 'dummy-ejp-for-v2-api-fixtures.json')
        ejp_ingestor.import_article_list_from_json_path(logic.journal(), ejp_data, create=False, update=True)

        resp = self.ac.get(reverse('v2:article-version-list', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type, 'application/vnd.elife.article-history+json;version=1')
        data = json.loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['history'])

        # correct data
        self.assertEqual(len(data['versions']), 3)  # this article has two *published*, one *unpublished*
Exemplo n.º 10
0
    def test_article_list_including_unpublished(self):
        "a list of published and unpublished articles are returned to an authorized response"
        resp = self.ac.get(reverse('v2:article-list'))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type, 'application/vnd.elife.article-list+json;version=1')
        self.assertEqual(resp[settings.KONG_AUTH_HEADER], 'True')
        data = json.loads(resp.content)
        idx = {int(item['id']): item for item in data['items']}

        # valid data
        utils.validate(data, SCHEMA_IDX['list'])

        # correct data
        self.assertEqual(data['total'], 2) # two results, [msid1, msid2]
        self.assertEqual(idx[self.msid1]['version'], 3) # we get the unpublished v3 back
        self.assertEqual(idx[self.msid2]['version'], 3)
Exemplo n.º 11
0
    def test_article_list_including_unpublished(self):
        "a list of published and unpublished articles are returned to an authorized response"
        resp = self.ac.get(reverse('v2:article-list'))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type,
                         'application/vnd.elife.article-list+json;version=1')
        self.assertEqual(resp[settings.KONG_AUTH_HEADER], 'True')
        data = utils.json_loads(resp.content)
        idx = {int(item['id']): item for item in data['items']}

        # valid data
        utils.validate(data, SCHEMA_IDX['list'])

        # correct data
        self.assertEqual(data['total'], 2)  # two results, [msid1, msid2]
        self.assertEqual(idx[self.msid1]['version'],
                         3)  # we get the unpublished v3 back
        self.assertEqual(idx[self.msid2]['version'], 3)
Exemplo n.º 12
0
    def test_article_list(self):
        "a list of published articles are returned to an unauthenticated response"
        resp = self.c.get(reverse('v2:article-list'))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content_type,
                         'application/vnd.elife.article-list+json;version=1')
        data = utils.json_loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['list'])

        # correct data
        self.assertEqual(data['total'], 2)  # two results, [msid1, msid2]

        # FIXME: non-deterministic insertion order. sometimes you get av2, av1 ...
        av1, av2 = data['items']
        # print(data['items'])

        self.assertEqual(av1['version'], 2)
        self.assertEqual(av2['version'], 3)
Exemplo n.º 13
0
    def test_article_versions_list(self):
        "valid json content is returned"
        resp = self.c.get(
            reverse('v2:article-version-list', kwargs={'id': self.msid2}))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(
            resp.content_type,
            'application/vnd.elife.article-history+json;version=1')
        data = utils.json_loads(resp.content)

        # valid data
        utils.validate(data, SCHEMA_IDX['history'])

        # correct data
        self.assertEqual(len(data['versions']),
                         2)  # this article only has two *published*

        # correct order
        expected = [1, 2]
        given = [data['versions'][i]['version'] for i in range(0, 2)]
        self.assertEqual(given, expected)
Exemplo n.º 14
0
    def test_all(self):
        v1, v2, v12 = 1, 2, 12

        cases = [
            # content, request, response
            #(v1, v1, v1),
            #(v1, v2, v2),

            (v2, v1, v1),
            (v2, v2, v2),

            #(v1, v12, v2),
            (v2, v12, v2),
        ]

        content_idx = {
            v1: self.ajson_fixture_api1,
            v2: self.ajson_fixture_api2
        }

        request_idx = {
            v1: 'application/vnd.elife.article-poa+json; version=1',
            v2: 'application/vnd.elife.article-poa+json; version=2',
            v12: 'application/vnd.elife.article-poa+json; version=1, application/vnd.elife.article-poa+json; version=2',
        }

        response_idx = {
            v1: self.ajson_api1,
            v2: self.ajson_api2
        }

        schema_idx = {
            v1: settings.ALL_SCHEMA_IDX[self.status][1][1],
            v2: settings.ALL_SCHEMA_IDX[self.status][0][1],
        }

        for ckey, rqkey, rskey in cases:
            content = content_idx[ckey]
            request = request_idx[rqkey]
            response = response_idx[rskey]

            name = ' '.join(map(str, [ckey, rqkey, rskey]))
            # print(name)
            with self.subTest(name):
                try:
                    # Lax needs a v1 before a v2 can be published
                    self.add_or_update_article(**{
                        'manuscript_id': self.msid,
                        'version': 1,
                        'published': '2017-07-11T00:00:00Z'
                    })

                    self.publish_ajson(content)
                    actual_resp = self.c.get(reverse('v2:article', kwargs={'id': self.msid}), HTTP_ACCEPT=request)
                    self.assertEqual(actual_resp.status_code, 200)
                    # response is valid
                    self.assertTrue(utils.validate(actual_resp.json(), schema_idx[rskey]))
                    # response is equal to what we're expecting
                    actual_json = self.load_ajson2(actual_resp.json())
                    # slightly more isolated error messages
                    self.assertEqual(actual_json.keys(), response.keys())
                    for key in response.keys():
                        self.assertEqual(actual_json.get(key), response.get(key))

                finally:
                    models.Article.objects.all().delete()