home: add minerva dashboard scaffold
This commit is contained in:
110
home/minerva-dashboard/tests/test_app.py
Normal file
110
home/minerva-dashboard/tests/test_app.py
Normal file
@@ -0,0 +1,110 @@
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.main import create_app
|
||||
|
||||
|
||||
def make_client(tmp_path: Path) -> TestClient:
|
||||
app = create_app(state_dir=tmp_path)
|
||||
return TestClient(app)
|
||||
|
||||
|
||||
def test_health_endpoint_reports_ok(tmp_path: Path) -> None:
|
||||
client = make_client(tmp_path)
|
||||
|
||||
response = client.get('/api/health')
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {'status': 'ok'}
|
||||
|
||||
|
||||
def test_dashboard_summary_seeds_manndra_first(tmp_path: Path) -> None:
|
||||
client = make_client(tmp_path)
|
||||
|
||||
response = client.get('/api/dashboard/summary')
|
||||
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload['profile']['id'] == 'manndra'
|
||||
assert payload['profile']['display_name'] == 'Manndra'
|
||||
assert payload['profile']['persona'] == 'Minerva'
|
||||
assert payload['counts'] == {
|
||||
'agenda': 3,
|
||||
'reminders': 3,
|
||||
'lists': 2,
|
||||
'notes': 2,
|
||||
'links': 3,
|
||||
'meal_ideas': 3,
|
||||
'shortcuts': 3,
|
||||
'quick_actions': 3,
|
||||
}
|
||||
assert payload['agenda'][0]['title'] == 'Morning check-in'
|
||||
assert payload['lists'][0]['title'] == 'Errands'
|
||||
assert payload['meal_ideas'][0]['title'] == 'Easy comfort dinner'
|
||||
|
||||
|
||||
def test_quick_add_note_updates_summary_and_persists_newest_first(tmp_path: Path) -> None:
|
||||
client = make_client(tmp_path)
|
||||
|
||||
response = client.post(
|
||||
'/api/notes/quick-add',
|
||||
json={
|
||||
'title': 'Field trip forms',
|
||||
'body': 'Check whether anything needs signing tonight.',
|
||||
'category': 'school',
|
||||
'source': 'api-test',
|
||||
'pinned': False,
|
||||
},
|
||||
)
|
||||
|
||||
assert response.status_code == 201
|
||||
saved = response.json()
|
||||
assert saved['title'] == 'Field trip forms'
|
||||
assert saved['category'] == 'school'
|
||||
assert saved['source'] == 'api-test'
|
||||
|
||||
summary = client.get('/api/dashboard/summary')
|
||||
assert summary.status_code == 200
|
||||
payload = summary.json()
|
||||
assert payload['counts']['notes'] == 3
|
||||
assert payload['notes'][0]['title'] == 'Field trip forms'
|
||||
assert payload['notes'][0]['body'] == 'Check whether anything needs signing tonight.'
|
||||
|
||||
|
||||
def test_homepage_renders_ravenclaw_common_room_dashboard(tmp_path: Path) -> None:
|
||||
client = make_client(tmp_path)
|
||||
|
||||
response = client.get('/')
|
||||
|
||||
assert response.status_code == 200
|
||||
body = response.text
|
||||
assert 'Minerva Dashboard' in body
|
||||
assert 'Ravenclaw common room' in body
|
||||
assert 'Capture a note before it disappears' in body
|
||||
assert 'Dinner sparks' in body
|
||||
assert '/static/images/library-hero.jpg' in body
|
||||
assert '/static/images/owl-engraving.jpg' in body
|
||||
assert '/static/images/blue-interior.jpg' in body
|
||||
assert '/static/images/art-nouveau-frame.svg' in body
|
||||
|
||||
|
||||
def test_form_post_redirects_after_note_capture(tmp_path: Path) -> None:
|
||||
client = make_client(tmp_path)
|
||||
|
||||
response = client.post(
|
||||
'/quick-actions/notes',
|
||||
data={
|
||||
'title': 'Gift reminder',
|
||||
'body': 'Look for one elegant but practical option.',
|
||||
'category': 'household',
|
||||
},
|
||||
follow_redirects=False,
|
||||
)
|
||||
|
||||
assert response.status_code == 303
|
||||
assert response.headers['location'] == '/'
|
||||
|
||||
summary = client.get('/api/dashboard/summary').json()
|
||||
assert summary['counts']['notes'] == 3
|
||||
assert summary['notes'][0]['title'] == 'Gift reminder'
|
||||
Reference in New Issue
Block a user