fs-lawrisk/tests/test_permit_browser.py

121 lines
3.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python
"""Test script for permit browser API"""
import sys
import os
import json
# Add project root to path
project_root = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, project_root)
# Load .env
from lawrisk.utils.env_loader import load_env
load_env('.env', override=False)
# Import database connection
import pg8000
def test_permit_filtering():
"""Test the permit filtering functionality"""
print("=" * 60)
print("Testing Permit Browser API")
print("=" * 60)
print()
# Connect to database
conn = pg8000.connect(
host=os.getenv('LIC_PG_HOST'),
port=int(os.getenv('LIC_PG_PORT', '5432')),
user=os.getenv('LIC_PG_USER'),
password=os.getenv('LIC_PG_PASSWORD'),
database=os.getenv('LIC_PG_DATABASE')
)
cur = conn.cursor()
# Test 1: Check regions
print("1. Testing regions...")
cur.execute("SELECT id, name FROM regions ORDER BY name")
regions = [{"id": str(r[0]), "name": str(r[1])} for r in cur.fetchall()]
print(f" Found {len(regions)} regions")
for region in regions[:3]:
print(f" - {region['name']} (ID: {region['id'][:8]}...)")
print()
# Test 2: Check themes
print("2. Testing themes...")
cur.execute("SELECT id, name FROM themes ORDER BY name LIMIT 10")
themes = [{"id": str(t[0]), "name": str(t[1])} for t in cur.fetchall()]
print(f" Found {len(themes)} themes")
for theme in themes[:3]:
print(f" - {theme['name']} (ID: {theme['id'][:8]}...)")
print()
# Test 3: Check service departments
print("3. Testing service departments...")
cur.execute("SELECT id, name, code FROM service_departments ORDER BY name LIMIT 10")
departments = [{"id": str(d[0]), "name": str(d[1]), "code": str(d[2])} for d in cur.fetchall()]
print(f" Found {len(departments)} departments")
for dept in departments[:3]:
print(f" - {dept['name']} ({dept['code']})")
print()
# Test 4: Check permits
print("4. Testing permits...")
cur.execute("""
SELECT COUNT(DISTINCT permit_id || '_' || region_id)
FROM region_theme_permits
""")
permit_count = cur.fetchone()[0]
print(f" Total permit-region combinations: {permit_count}")
print()
# Test 5: Sample permit data
print("5. Sample permit data...")
cur.execute("""
SELECT DISTINCT
p.name AS permit_name,
r.name AS region_name,
t.name AS theme_name
FROM region_theme_permits rtp
JOIN permits p ON p.id = rtp.permit_id
JOIN regions r ON r.id = rtp.region_id
LEFT JOIN themes t ON t.id = rtp.theme_id
ORDER BY p.name
LIMIT 5
""")
sample_permits = cur.fetchall()
for permit_name, region_name, theme_name in sample_permits:
print(f" - {permit_name}")
print(f" Region: {region_name}, Theme: {theme_name or 'N/A'}")
print()
# Test 6: Risk statistics
print("6. Risk statistics...")
cur.execute("""
SELECT
COUNT(DISTINCT rpr.permit_id || '_' || rpr.region_id) AS permits_with_risks,
SUM(COUNT(rpr.risk_id)) OVER () AS total_risk_mappings
FROM region_permit_risks rpr
""")
risk_stats = cur.fetchone()
print(f" Permits with risks: {risk_stats[0]}")
print(f" Total risk mappings: {risk_stats[1]}")
print()
conn.close()
print("=" * 60)
print("Test completed successfully!")
print("=" * 60)
print()
print("Summary:")
print(f" - {len(regions)} regions available")
print(f" - {len(themes)} themes available")
print(f" - {len(departments)} departments available")
print(f" - {permit_count} permit-region combinations")
print()
print("The permit browser should work correctly with this data.")
if __name__ == "__main__":
test_permit_filtering()