Complete authentication and profile features

This commit is contained in:
Olaf
2026-08-24 14:50:05 +02:00
parent 1c827956c4
commit 01702fcadf
17 changed files with 227 additions and 40 deletions
+11 -1
View File
@@ -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
+17 -3
View File
@@ -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: &quot;' 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