- Fork elmeg-demo codebase for multi-band support - Add data importer infrastructure with base class - Create band-specific importers: - phish.py: Phish.net API v5 - grateful_dead.py: Grateful Stats API - setlistfm.py: Dead & Company, Billy Strings (Setlist.fm) - Add spec-kit configuration for Gemini - Update README with supported bands and architecture
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from fastapi.testclient import TestClient
|
|
from sqlmodel import Session
|
|
from models import Vertical, Show
|
|
|
|
def test_create_show(client: TestClient, session: Session, test_user_token: str):
|
|
# 1. Create a Vertical first (needed for FK)
|
|
vertical = Vertical(name="Phish", slug="phish")
|
|
session.add(vertical)
|
|
session.commit()
|
|
|
|
# 2. Create Show
|
|
response = client.post(
|
|
"/shows/",
|
|
json={
|
|
"date": "2023-12-31T00:00:00",
|
|
"vertical_id": vertical.id,
|
|
"notes": "New Year's Eve"
|
|
},
|
|
headers={"Authorization": f"Bearer {test_user_token}"}
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["notes"] == "New Year's Eve"
|
|
assert data["id"] is not None
|
|
|
|
from datetime import datetime
|
|
|
|
def test_read_shows(client: TestClient, session: Session):
|
|
# Setup data
|
|
vertical = Vertical(name="Goose", slug="goose")
|
|
session.add(vertical)
|
|
session.commit()
|
|
|
|
show = Show(date=datetime(2024, 1, 1), vertical_id=vertical.id, notes="Test Show")
|
|
session.add(show)
|
|
session.commit()
|
|
|
|
# Test Read
|
|
response = client.get("/shows/")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert len(data) > 0
|
|
assert data[0]["notes"] == "Test Show"
|
|
|
|
def test_attendance(client: TestClient, session: Session, test_user_token: str):
|
|
# Setup
|
|
vertical = Vertical(name="Test Band", slug="test-band")
|
|
session.add(vertical)
|
|
session.commit()
|
|
show = Show(date=datetime(2024, 1, 1), vertical_id=vertical.id)
|
|
session.add(show)
|
|
session.commit()
|
|
|
|
# Mark Attendance
|
|
response = client.post(
|
|
"/attendance/",
|
|
json={"show_id": show.id},
|
|
headers={"Authorization": f"Bearer {test_user_token}"}
|
|
)
|
|
assert response.status_code == 200
|
|
assert response.json()["show_id"] == show.id
|
|
|
|
# Verify in "My Attendance"
|
|
response = client.get(
|
|
"/attendance/me",
|
|
headers={"Authorization": f"Bearer {test_user_token}"}
|
|
)
|
|
assert response.status_code == 200
|
|
assert len(response.json()) == 1
|