Complete authentication and profile features
This commit is contained in:
@@ -100,11 +100,15 @@ def test_submit_link_stores_cleaned_url_and_public_feed():
|
||||
matching = next(item for item in feed if item['id'] == data['id'])
|
||||
assert matching['comment'] == 'Interesting read'
|
||||
assert matching['user']['username'] == 'alice'
|
||||
assert 'avatar_url' in matching['user']
|
||||
|
||||
filtered_response = client.get('/api/public/feed/alice')
|
||||
assert filtered_response.status_code == 200
|
||||
assert all(item['user']['username'] == 'alice' for item in filtered_response.json())
|
||||
assert client.get('/api/public/feed/does-not-exist').json() == []
|
||||
users_response = client.get('/api/public/users')
|
||||
assert users_response.status_code == 200
|
||||
assert 'alice' in users_response.json()
|
||||
|
||||
|
||||
def test_logout_revokes_token_and_admin_can_list_plugins():
|
||||
@@ -129,7 +133,13 @@ def test_public_and_admin_pages_render_html():
|
||||
assert 'LinkLog' in root_page.text
|
||||
assert 'class="login-button" href="/login"' in root_page.text
|
||||
assert client.get('/alice').status_code == 200
|
||||
assert 'alice' in client.get('/alice').text
|
||||
assert client.get('/alice/').status_code == 200
|
||||
user_page = client.get('/alice').text
|
||||
assert 'alice' in user_page
|
||||
assert 'data-user-filter="alice"' in user_page
|
||||
assert 'profile-summary' in user_page
|
||||
feed_script = TestClient(app).get('/static/feed.js?v=4').text
|
||||
assert 'window.location.assign(selectedUser ? `/${encodeURIComponent(selectedUser)}/` : \'/\')' in feed_script
|
||||
assert client.get('/login').status_code == 200
|
||||
assert 'Sign in' in client.get('/login').text
|
||||
assert client.get('/admin').status_code == 200
|
||||
|
||||
@@ -19,11 +19,11 @@ def test_user_config_api_and_profile_page():
|
||||
assert payload['username'] == 'alice'
|
||||
|
||||
update_response = client.put('/api/user/me', json={
|
||||
'username': 'should-not-change',
|
||||
'email': 'alice@example.com',
|
||||
'bio': 'Updated bio',
|
||||
'avatar_url': 'https://example.com/new-avatar.png'
|
||||
}, headers=headers)
|
||||
assert update_response.status_code == 200
|
||||
assert client.get('/api/user/me', headers=headers).json()['username'] == 'alice'
|
||||
|
||||
page_response = client.get('/profile')
|
||||
assert page_response.status_code == 200
|
||||
@@ -31,9 +31,23 @@ def test_user_config_api_and_profile_page():
|
||||
assert '<output id="username" class="readonly-value">Loading...</output>' in page_response.text
|
||||
assert 'name="username"' not in page_response.text
|
||||
assert '<textarea id="bio" name="bio" rows="4"></textarea>' in page_response.text
|
||||
assert 'https://example.com/avatar.png' in page_response.text
|
||||
assert 'name="avatar" type="file"' in page_response.text
|
||||
assert 'name="avatar_url"' not in page_response.text
|
||||
assert 'value="mastodon.social"' in page_response.text
|
||||
assert 'From my #LinkLog: "' in page_response.text
|
||||
assert 'id="admin-link"' in page_response.text
|
||||
assert 'class="login-button hidden"' in page_response.text
|
||||
assert 'id="logout-button" class="logout-button hidden"' in page_response.text
|
||||
|
||||
upload_response = client.post(
|
||||
'/api/user/avatar',
|
||||
headers=headers,
|
||||
files={'avatar': ('avatar.png', b'fake-png-data', 'image/png')},
|
||||
)
|
||||
assert upload_response.status_code == 200
|
||||
avatar_url = upload_response.json()['avatar_url']
|
||||
assert avatar_url.startswith('/media/user-1.png')
|
||||
assert client.get(avatar_url).content == b'fake-png-data'
|
||||
|
||||
updated_profile = client.get('/api/user/me', headers=headers).json()
|
||||
assert updated_profile['avatar_url'] == avatar_url
|
||||
|
||||
Reference in New Issue
Block a user