예제 #1
0
    def test_Kibana(self):
        kibana_log = logdir + '/test_kibana.log'
        if os.path.exists(kibana_log):
            os.remove(kibana_log)

        with patch.object(report.requests, 'post') as post:
            data = {u'responses': [{u'hits': {u'total': 5}, u'status': 200}]}
            resp = PropertyMock()
            resp.text = str(data)
            resp.json = lambda: data
            resp.status_code = 200
            post.return_value = resp

            report.num_refused_claims(n_days=1, test=True)
            report.num_missing_profile(n_days=1, test=True)

            log = open(logdir + '/test_kibana.log').read()
            line = 0
            for x in log.strip().split('\n'):
                j = json.loads(x)
                if line == 0:
                    self.assertEqual(
                        j['message'],
                        u'Number of claims rejected in the last 1 days: 5')
                if line == 1:
                    self.assertEqual(
                        j['message'],
                        u'Number of missing profile errors in the last 1 days: 5'
                    )
                line += 1
예제 #2
0
 def test_create_client(self):
     data = {
         "access_token": "foobarbaz",
         "username": "******",
         "token_type": "Bearer",
         "expire_in": "2050-01-01T00:00:00",
         "refresh_token": "refreshfoo",
         "scopes": ["api", "execute-query", "store-query"],
         "client_id": "abcd",
         "client_secret": "clientsecret",
         "ratelimit": 1.0
     }
     r = PropertyMock()
     r.text = str(data)
     r.json = lambda: data
     r.status_code = 200
     with mock.patch.object(self.app.client, 'get',
                            return_value=r) as client:
         c = self.app.create_client()
         self.assertDictContainsSubset(
             {
                 'username': u'*****@*****.**',
                 'scopes': 'api execute-query store-query',
                 'token': u'foobarbaz',
                 'client_id': u'abcd',
                 'client_secret': u'clientsecret',
                 'expire_in': '2050-01-01T00:00:00+00:00',
                 'id': 1,
                 'refresh_token': u'refreshfoo'
             }, c)
예제 #3
0
    def test_task_check_orcid_updates(self):

        with patch.object(tasks.requests, 'get') as get, \
            patch.object(tasks.task_index_orcid_profile, 'delay') as next_task, \
            patch.object(tasks.task_check_orcid_updates, 'apply_async') as recheck_task:

            #data = open(os.path.join(self.proj_home, 'ADSOrcid/tests/stub_data', '0000-0003-3041-2092.orcid-updates.json'), 'r').read()
            data = [{
                'orcid_id': '0000-0003-3041-2092',
                'updated': str(utils.get_date())
            }, {
                'orcid_id': '0000-0003-3041-2093',
                'updated': str(utils.get_date())
            }]
            r = PropertyMock()
            r.text = str(data)
            r.json = lambda: data
            r.status_code = 200
            get.return_value = r

            tasks.task_check_orcid_updates({})  # could be anything

            self.assertEqual(next_task.call_args_list[0][0][0]['orcidid'],
                             '0000-0003-3041-2092')
            self.assertEqual(next_task.call_args_list[1][0][0]['orcidid'],
                             '0000-0003-3041-2093')
            self.assertEqual(str(recheck_task.call_args_list[0]),
                             "call(args=({u'errcount': 0},), countdown=300)")
예제 #4
0
    def test_task_index_orcid_profile(self):

        with patch.object(self.app, 'retrieve_orcid') as retrieve_orcid, \
            patch.object(tasks.requests, 'get') as get, \
            patch.object(self.app, 'get_claims') as get_claims, \
            patch.object(self.app, 'insert_claims') as insert_claims, \
            patch.object(tasks.task_index_orcid_profile, 'apply_async') as task_index_orcid_profile, \
            patch.object(tasks.task_match_claim, 'delay') as next_task:

            r = PropertyMock()
            data = {
                'bibcode': {
                    'status': 'some status',
                    'title': 'some title'
                }
            }
            r.text = str(data)
            r.json = lambda: data
            r.status_code = 200
            get.return_value = r

            get_claims.return_value = (
                {
                    'bibcode1':
                    ('Bibcode1', utils.get_date('2017-01-01'), 'provenance',
                     ['id1', 'id2'], ['Stern, D K', 'author two']),
                    'bibcode2':
                    ('Bibcode2', utils.get_date('2017-01-01'), 'provenance',
                     ['id1', 'id2'], ['author one', 'Stern, D K']),
                    'bibcode3':
                    ('Bibcode3', utils.get_date('2017-01-01'), 'provenance',
                     ['id1', 'id2'], ['Stern, D K', 'author two']),
                },
                {
                    'bibcode1': ('Bibcode1', utils.get_date('2017-01-01')),
                    'bibcode4': ('Bibcode4', utils.get_date('2017-01-01')
                                 ),  # we have, but orcid no more
                },
                {
                    'bibcode2': ('Bibcode2', utils.get_date('2017-01-01')),
                })
            insert_claims.return_value = [
                {
                    'status': u'#full-import',
                    'bibcode': u'',
                    'created': '2017-05-26T21:29:22.726506+00:00',
                    'provenance': u'OrcidImporter',
                    'orcidid': '0000-0003-3041-2092',
                    'id': None
                },
                {
                    'status': u'claimed',
                    'bibcode': 'Bibcode2',
                    'created': '2017-01-01T00:00:00+00:00',
                    'provenance': u'provenance',
                    'orcidid': '0000-0003-3041-2092',
                    'id': None
                },
                {
                    'status': u'claimed',
                    'bibcode': 'Bibcode3',
                    'created': '2017-01-01T00:00:00+00:00',
                    'provenance': u'provenance',
                    'orcidid': '0000-0003-3041-2092',
                    'id': None
                },
                {
                    'status': u'removed',
                    'bibcode': 'Bibcode4',
                    'created': '2017-05-26T21:29:22.728368+00:00',
                    'provenance': u'OrcidImporter',
                    'orcidid': '0000-0003-3041-2092',
                    'id': None
                },
                {
                    'status': u'unchanged',
                    'bibcode': 'Bibcode1',
                    'created': '2017-01-01T00:00:00+00:00',
                    'provenance': u'OrcidImporter',
                    'orcidid': '0000-0003-3041-2092',
                    'id': None
                },
            ]

            self.assertFalse(next_task.called)

            # check authors can be skipped
            retrieve_orcid.return_value = {
                'status': 'blacklisted',
                'name': u'Stern, D K',
                'facts': {
                    u'author': [u'Stern, D', u'Stern, D K', u'Stern, Daniel'],
                    u'orcid_name': [u'Stern, Daniel'],
                    u'author_norm': [u'Stern, D'],
                    u'name': u'Stern, D K'
                },
                'orcidid': u'0000-0003-2686-9241',
                'id': 1,
                'account_id': None,
                'updated': utils.get_date('2017-01-01')
            }

            tasks.task_index_orcid_profile({'orcidid': '0000-0003-3041-2092'})

            self.assertFalse(next_task.called)

            retrieve_orcid.return_value = {
                'status': None,
                'name': u'Stern, D K',
                'facts': {
                    u'author': [u'Stern, D', u'Stern, D K', u'Stern, Daniel'],
                    u'orcid_name': [u'Stern, Daniel'],
                    u'author_norm': [u'Stern, D'],
                    u'name': u'Stern, D K'
                },
                'orcidid': u'0000-0003-2686-9241',
                'id': 1,
                'account_id': None,
                'updated': utils.get_date('2017-01-01')
            }

            tasks.task_index_orcid_profile({'orcidid': '0000-0003-3041-2092'})

            self.assertTrue(next_task.called)
            self.assertEqual(next_task.call_count, 4)

            self.assertEqual([(x.bibcode, x.status)
                              for x in insert_claims.call_args[0][0]],
                             [(u'', u'#full-import'), ('Bibcode2', u'claimed'),
                              ('Bibcode3', u'claimed'),
                              ('Bibcode4', u'removed'),
                              ('Bibcode1', u'unchanged')])

            self.assertEqual([(x[0][0]['bibcode'], x[0][0]['status'])
                              for x in next_task.call_args_list],
                             [('Bibcode2', u'claimed'),
                              ('Bibcode3', u'claimed'),
                              ('Bibcode4', u'removed'),
                              ('Bibcode1', u'unchanged')])

            self.assertEqual(
                (next_task.call_args_list[0][0][0]['bibcode'],
                 next_task.call_args_list[0][0][0]['author_list']),
                ('Bibcode2', ['author one', 'Stern, D K']))

            self.assertEqual(
                (next_task.call_args_list[0][0][0]['bibcode'],
                 next_task.call_args_list[0][0][0]['identifiers']),
                ('Bibcode2', ['id1', 'id2']))
예제 #5
0
    def test_task_match_removed_claim(self):

        with patch.object(self.app, 'retrieve_record') as retrieve_record, \
                patch.object(self.app, 'retrieve_metadata') as retrieve_metadata, \
                patch.object(self.app, 'record_claims') as record_claims, \
                patch.object(tasks.requests, 'post') as post, \
                patch.object(tasks.task_output_results, 'delay') as next_task:

            retrieve_record.return_value = {
                'bibcode': 'BIBCODE22',
                'authors':
                ['Einstein, A', 'Socrates', 'Stern, D K', 'Munger, C'],
                'claims': {
                    'verified': ['-', '-', '-', '-'],
                    'unverified': ['-', '-', '0000-0003-3041-2092', '-']
                }
            }

            retrieve_metadata.return_value = {
                'identifier': ['id1', 'id2'],
                u'author_list':
                ['author one', 'author two', 'Stern, D K', 'author four']
            }

            r = PropertyMock()
            data = {'BIBCODE22': 'status'}
            r.text = str(data)
            r.json = lambda: data
            r.status_code = 200
            post.return_value = r

            self.assertFalse(next_task.called)
            tasks.task_match_claim({
                'status':
                u'removed',
                'bibcode':
                'BIBCODE22',
                u'name':
                u'Stern, D K',
                'provenance':
                u'provenance',
                u'orcid_name': [u'Stern, Daniel'],
                u'author_norm': [u'Stern, D'],
                u'author_status':
                None,
                'orcidid':
                '0000-0003-3041-2092',
                u'author': [u'Stern, D', u'Stern, D K', u'Stern, Daniel'],
                u'author_id':
                1,
                u'account_id':
                None
            })

            self.assertEqual(('BIBCODE22', {
                'verified': ['-', '-', '-', '-'],
                'unverified': ['-', '-', '-', '-']
            }, ['Einstein, A', 'Socrates', 'Stern, D K', 'Munger, C']),
                             record_claims.call_args[0])

            self.assertEqual(
                {
                    'bibcode':
                    'BIBCODE22',
                    'authors':
                    ['Einstein, A', 'Socrates', 'Stern, D K', 'Munger, C'],
                    'verified': ['-', '-', '-', '-'],
                    'unverified': ['-', '-', '-', '-']
                }, next_task.call_args[0][0].toJSON())