def test_indieauth_login(app, client, mocker): mock_get = mocker.patch('requests.get') mock_post = mocker.patch('requests.post') mock_login = mocker.patch('flask.ext.login.login_user') mock_logout = mocker.patch('flask.ext.login.logout_user') user_html = '<html><a class="h-card" href="/" rel="me">Example User</a></html>' mock_get.return_value = FakeResponse(user_html) rv = client.get('/login?me=http://example.com') assert rv.status_code == 302 assert_urls_match( rv.location, 'https://indieauth.com/auth?' + urllib.parse.urlencode( { 'state': None, 'me': 'http://example.com', 'client_id': 'http://example.com', 'redirect_uri': 'http://localhost/login_callback', })) mock_get.assert_called_once_with('http://example.com') mock_get.reset_mock() mock_post.return_value = FakeResponse( urllib.parse.urlencode({ 'me': 'http://example.com', })) rv = client.get('/login_callback?' + urllib.parse.urlencode({'code': 'abc123'})) assert rv.status_code == 302 assert rv.location == 'http://localhost/' mock_post.assert_called_once_with('https://indieauth.com/auth', data={ 'code': 'abc123', 'client_id': 'http://example.com', 'redirect_uri': 'http://localhost/login_callback', 'state': None, }) mock_get.assert_called_once_with( 'http://example.com', headers={'User-Agent': mf2py.Parser.useragent}) mock_login.assert_called_once_with(User(id=1, name='Example User'), remember=True) cred = Credential.query.filter_by(type='indieauth', value='http://example.com').first() assert cred assert cred.user assert cred.user.name == 'Example User' client.get('/logout') mock_logout.assert_called_once_with()
def test_indieauth_login(app, client, mocker): mock_get = mocker.patch('requests.get') mock_post = mocker.patch('requests.post') mock_login = mocker.patch('flask.ext.login.login_user') mock_logout = mocker.patch('flask.ext.login.logout_user') user_html = '<html><a class="h-card" href="/" rel="me">Example User</a></html>' mock_get.return_value = FakeResponse(user_html) rv = client.get('/login?me=http://example.com') assert rv.status_code == 302 assert_urls_match( rv.location, 'https://indieauth.com/auth?' + urllib.parse.urlencode({ 'state': None, 'me': 'http://example.com', 'client_id': 'http://example.com', 'redirect_uri': 'http://localhost/login_callback', })) mock_get.assert_called_once_with('http://example.com') mock_get.reset_mock() mock_post.return_value = FakeResponse(urllib.parse.urlencode({ 'me': 'http://example.com', })) rv = client.get('/login_callback?' + urllib.parse.urlencode({ 'code': 'abc123' })) assert rv.status_code == 302 assert rv.location == 'http://localhost/' mock_post.assert_called_once_with('https://indieauth.com/auth', data={ 'code': 'abc123', 'client_id': 'http://example.com', 'redirect_uri': 'http://localhost/login_callback', 'state': None, }) mock_get.assert_called_once_with('http://example.com', headers={'User-Agent': mf2py.Parser.useragent}) mock_login.assert_called_once_with( User(id=1, name='Example User'), remember=True) cred = Credential.query.filter_by(type='indieauth', value='http://example.com').first() assert cred assert cred.user assert cred.user.name == 'Example User' client.get('/logout') mock_logout.assert_called_once_with()
def test_indieauth_login(app, client, mocker): mock_get = mocker.patch('requests.get') mock_post = mocker.patch('requests.post') mock_login = mocker.patch('flask_login.login_user') mock_logout = mocker.patch('flask_login.logout_user') mock_get.return_value = FakeResponse('<html></html>') rv = client.get('/login?me=http://example.com') assert rv.status_code == 302 assert_urls_match( rv.location, 'https://indieauth.com/auth?' + urllib.parse.urlencode({ 'state': None, 'me': 'http://example.com', 'client_id': 'http://example.com', 'redirect_uri': 'http://localhost/login_callback', })) mock_get.assert_called_once_with('http://example.com') mock_get.reset_mock() mock_post.return_value = FakeResponse(urllib.parse.urlencode({ 'me': 'http://example.com', })) rv = client.get('/login_callback?' + urllib.parse.urlencode({ 'code': 'abc123' })) assert rv.status_code == 302 assert rv.location == 'http://localhost/' mock_post.assert_called_once_with('https://indieauth.com/auth', data={ 'code': 'abc123', 'client_id': 'http://example.com', 'redirect_uri': 'http://localhost/login_callback', 'state': None, }) mock_login.assert_called_once_with(User('example.com'), remember=True) client.get('/logout') mock_logout.assert_called_once_with()