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)
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')
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)
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'
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)
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
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()
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()
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)
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)
def test_it_has_an_orcid(orcid, token, expire): orcid_token = OrcidToken(orcid, token, expires_at(expire)) assert orcid_token.orcid == '{}'.format(orcid)
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)
def orcid_token() -> OrcidToken: return OrcidToken('0000-0002-1825-0097', '1/fFAGRNJru1FTz70BzhT3Zg', expires_at(1234))