"""TDD: Tenant CRUD API tests""" def test_create_tenant(client): payload = { "code": "PORS01", "prefix": "PC", "name": "Porsche測試公司", "domain": "porsche.lab.taipei", "status": "trial", } resp = client.post("/api/v1/tenants", json=payload) assert resp.status_code == 201 data = resp.json() assert data["code"] == "PORS01" assert data["prefix"] == "PC" assert data["domain"] == "porsche.lab.taipei" assert data["status"] == "trial" assert data["is_active"] is True assert data["quota_per_user"] == 20 assert data["total_quota"] == 200 assert data["id"] is not None def test_create_tenant_duplicate_code(client, sample_tenant): payload = { "code": sample_tenant["code"], "prefix": "XX", "name": "重複代碼", "domain": "another.lab.taipei", "status": "trial", } resp = client.post("/api/v1/tenants", json=payload) assert resp.status_code == 409 def test_create_tenant_duplicate_domain(client, sample_tenant): payload = { "code": "NEWCODE", "prefix": "XX", "name": "重複網域", "domain": sample_tenant["domain"], "status": "trial", } resp = client.post("/api/v1/tenants", json=payload) assert resp.status_code == 409 def test_list_tenants(client, sample_tenant): resp = client.get("/api/v1/tenants") assert resp.status_code == 200 tenants = resp.json() assert len(tenants) == 1 assert tenants[0]["code"] == sample_tenant["code"] def test_list_tenants_filter_active(client, sample_tenant): # Deactivate client.put(f"/api/v1/tenants/{sample_tenant['id']}", json={"is_active": False}) resp = client.get("/api/v1/tenants", params={"is_active": True}) assert resp.status_code == 200 assert len(resp.json()) == 0 def test_get_tenant(client, sample_tenant): resp = client.get(f"/api/v1/tenants/{sample_tenant['id']}") assert resp.status_code == 200 data = resp.json() assert data["id"] == sample_tenant["id"] assert data["code"] == sample_tenant["code"] assert data["lights"] is None # No schedule runs yet def test_get_tenant_not_found(client): resp = client.get("/api/v1/tenants/99999") assert resp.status_code == 404 def test_update_tenant(client, sample_tenant): resp = client.put( f"/api/v1/tenants/{sample_tenant['id']}", json={"name": "更新後的名稱", "status": "active"}, ) assert resp.status_code == 200 data = resp.json() assert data["name"] == "更新後的名稱" assert data["status"] == "active" def test_delete_tenant(client, sample_tenant): resp = client.delete(f"/api/v1/tenants/{sample_tenant['id']}") assert resp.status_code == 204 resp = client.get(f"/api/v1/tenants/{sample_tenant['id']}") assert resp.status_code == 404 def test_health_endpoint(client): resp = client.get("/health") assert resp.status_code == 200 assert resp.json()["status"] == "ok"