Ejemplo n.º 1
0
def test_it_updates_the_access_token_when_exchanging(
        test_client: FlaskClient) -> None:
    original_orcid_token = OrcidToken('0000-0002-1825-0097',
                                      'old-access-token', expires_at(1234))

    db.session.add(original_orcid_token)
    db.session.commit()

    with requests_mock.Mocker() as mocker:
        mocker.post('http://www.example.com/oauth/token',
                    json={
                        'access_token': '1/fFAGRNJru1FTz70BzhT3Zg',
                        'expires_in': 3920,
                        'foo': 'bar',
                        'token_type': 'Bearer',
                        'orcid': '0000-0002-1825-0097',
                        'name': 'Josiah Carberry'
                    })
        mocker.get(
            'http://www.example.com/api/v2.1/0000-0002-1825-0097/record',
            status_code=404)

        test_client.post('/oauth2/token',
                         data={
                             'client_id': 'client_id',
                             'client_secret': 'client_secret',
                             'redirect_uri':
                             'http://www.example.com/client/redirect',
                             'grant_type': 'authorization_code',
                             'code': '1234'
                         })

    assert OrcidToken.query.count() == 1
    assert original_orcid_token.access_token == '1/fFAGRNJru1FTz70BzhT3Zg'
    assert original_orcid_token.expires_at == expires_at(3920)
Ejemplo n.º 2
0
    def _find_and_update_access_token(token_data: dict) -> OrcidToken:
        try:
            orcid_token = orcid_tokens.get(token_data['orcid'])
            orcid_token.access_token = token_data['access_token']
            orcid_token.expires_at = expires_at(token_data['expires_in'])
        except OrcidTokenNotFound:
            LOGGER.info('ORCID token not found for %s. Creating Orcid Token.',
                        token_data['orcid'])
            orcid_token = OrcidToken(token_data['orcid'],
                                     token_data['access_token'],
                                     expires_at(token_data['expires_in']))
            orcid_tokens.add(orcid_token)

        return orcid_token
Ejemplo n.º 3
0
def test_it_clears_orcid_tokens(orcid, token, expire):
    orcid_tokens = SQLAlchemyOrcidTokens(db)
    orcid_tokens.add(OrcidToken(orcid, token, expires_at(expire)))
    orcid_tokens.clear()

    with pytest.raises(OrcidTokenNotFound):
        orcid_tokens.get(orcid)
Ejemplo n.º 4
0
def test_it_contains_orcid_tokens():
    orcid_tokens = SQLAlchemyOrcidTokens(db)

    orcid_token1 = OrcidToken('0000-0002-1825-0097',
                              '1/fFAGRNJru1FTz70BzhT3Zg', expires_at(1234))
    orcid_token2 = OrcidToken('0000-0002-1825-0098',
                              '1/fFAGRNJru1FTz70BzhT3Zh', expires_at(1234))

    orcid_tokens.add(orcid_token1)
    orcid_tokens.add(orcid_token2)

    assert orcid_tokens.get('0000-0002-1825-0097') == orcid_token1
    assert orcid_tokens.get('0000-0002-1825-0098') == orcid_token2

    with pytest.raises(OrcidTokenNotFound):
        orcid_tokens.get('0000-0002-1825-0099')
Ejemplo n.º 5
0
def test_it_records_the_access_token_when_exchanging(
        test_client: FlaskClient) -> None:
    with requests_mock.Mocker() as mocker:
        mocker.post('http://www.example.com/oauth/token',
                    json={
                        'access_token': '1/fFAGRNJru1FTz70BzhT3Zg',
                        'expires_in': 3920,
                        'foo': 'bar',
                        'token_type': 'Bearer',
                        'orcid': '0000-0002-1825-0097',
                        'name': 'Josiah Carberry'
                    })
        mocker.get(
            'http://www.example.com/api/v2.1/0000-0002-1825-0097/record',
            status_code=404)

        response = test_client.post(
            '/oauth2/token',
            data={
                'client_id': 'client_id',
                'client_secret': 'client_secret',
                'redirect_uri': 'http://www.example.com/client/redirect',
                'grant_type': 'authorization_code',
                'code': '1234'
            })

    assert response.status_code == 200

    assert OrcidToken.query.count() == 1

    orcid_token = OrcidToken.query.filter_by(orcid='0000-0002-1825-0097').one()

    assert orcid_token.access_token == '1/fFAGRNJru1FTz70BzhT3Zg'
    assert orcid_token.expires_at.isoformat() == expires_at(3920).isoformat()
Ejemplo n.º 6
0
def test_it_updates_and_returns_204_if_a_profile_is_found(
        test_client: FlaskClient, webhook_payload: str,
        commit: Callable[[], None]) -> None:
    profile = Profile('a1b2c3d4', Name('Foo Bar'), '0000-0002-1825-0097')
    orcid_token = OrcidToken('0000-0002-1825-0097', 'access-token',
                             expires_at(1234))

    db.session.add(profile)
    db.session.add(orcid_token)

    commit()

    with requests_mock.Mocker() as mocker:
        mocker.get(
            'http://www.example.com/api/v2.1/0000-0002-1825-0097/record',
            json={
                'person': {
                    'name': {
                        'family-name': {
                            'value': 'Family Name'
                        },
                        'given-names': {
                            'value': 'Given Names'
                        }
                    }
                }
            })

        response = test_client.post(
            '/orcid-webhook/{}'.format(webhook_payload))

    assert response.status_code == 204
    assert profile.name.preferred == 'Given Names Family Name'
Ejemplo n.º 7
0
def test_it_can_remove_a_single_orcid_token():
    orcid = '0000-0002-1825-0097'
    orcid_tokens = SQLAlchemyOrcidTokens(db)
    orcid_token = OrcidToken(orcid, '1/fFAGRNJru1FTz70BzhT3Zg',
                             expires_at(1234))
    orcid_tokens.add(orcid_token)

    assert orcid_tokens.get(orcid=orcid) == orcid_token

    orcid_tokens.remove(orcid)

    with pytest.raises(OrcidTokenNotFound):
        orcid_tokens.get(orcid)
Ejemplo n.º 8
0
def test_it_add_utc_to_expiry_dates(orcid, token):
    orcid_token = OrcidToken(orcid, token, datetime(2017, 1, 1, 0, 20, 34))

    assert orcid_token.expires_at.isoformat() == expires_at(1234).isoformat()
Ejemplo n.º 9
0
def test_it_converts_expiry_dates_to_utc(orcid, token):
    orcid_token = OrcidToken(
        orcid, token,
        datetime(2017, 1, 1, 1, 20, 34, tzinfo=timezone(timedelta(hours=1))))

    assert orcid_token.expires_at.isoformat() == expires_at(1234).isoformat()
Ejemplo n.º 10
0
def test_it_has_an_expiry_date(orcid, token, expire):
    orcid_token = OrcidToken(orcid, token, expires_at(expire))

    assert orcid_token.expires_at == expires_at(expire)
Ejemplo n.º 11
0
def test_it_has_an_access_token(orcid, token, expire):
    orcid_token = OrcidToken(orcid, token, expires_at(expire))

    assert orcid_token.access_token == '{}'.format(token)
Ejemplo n.º 12
0
def test_it_has_an_orcid(orcid, token, expire):
    orcid_token = OrcidToken(orcid, token, expires_at(expire))

    assert orcid_token.orcid == '{}'.format(orcid)
Ejemplo n.º 13
0
def test_it_can_be_printed(orcid, token, expire):
    orcid_token = OrcidToken(orcid, token, expires_at(expire))

    assert repr(orcid_token) == "<OrcidToken for {!r}>".format(orcid)
Ejemplo n.º 14
0
def test_it_adds_time():
    output = expires_at(1234)

    assert datetime(2017, 1, 1, 0, 20, 34, tzinfo=timezone.utc).isoformat() == output.isoformat()
Ejemplo n.º 15
0
def orcid_token() -> OrcidToken:
    return OrcidToken('0000-0002-1825-0097', '1/fFAGRNJru1FTz70BzhT3Zg',
                      expires_at(1234))