nthinspectiontool/tests/test_inspections.py

171 lines
6.6 KiB
Python
Raw Permalink Normal View History

2026-03-30 14:01:29 +00:00
"""
Unit tests for inspection CRUD operations.
"""
import pytest
from datetime import date
from app import db
from app.models import Inspection, ConclusionStatus, ActionRequired, User, Photo
2026-04-08 07:22:02 +00:00
def test_create_inspection(client, test_user, app):
2026-03-30 14:01:29 +00:00
"""Test creating a new inspection."""
2026-04-08 07:22:02 +00:00
# Print all registered routes for debugging
print("Registered routes:")
for rule in app.url_map.iter_rules():
print(f" {rule.rule} -> {rule.endpoint}")
# Login the user manually
with app.app_context():
user = User.query.get(test_user)
login_response = client.post('/auth/login', data={
'username': user.username,
'password': 'testpass'
}, follow_redirects=True)
print(f"Login response status: {login_response.status_code}")
print(f"Login response data (first 200 chars): {login_response.data[:200]}")
# Now try to access the new inspection form
response = client.get('/new')
print(f"New inspection form status: {response.status_code}")
if response.status_code != 200:
print(f"Response data: {response.data[:200]}") # First 200 chars
# Actually perform the test
response = client.post('/new', data={
2026-03-30 14:01:29 +00:00
'installation_name': 'Test Installation',
'location': 'Test Location',
'inspection_date': '2026-01-01',
'reference_number': '54321',
'observations': 'Test observations',
'conclusion_text': 'Test conclusion',
'conclusion_status': ConclusionStatus.OK.value,
'submit': 'Submit'
}, follow_redirects=True)
2026-04-08 07:22:02 +00:00
print(f"POST response status: {response.status_code}")
print(f"POST response data (first 500 chars): {response.data[:500]}")
2026-03-30 14:01:29 +00:00
assert response.status_code == 200
assert b'Inspection report created successfully' in response.data
# Verify inspection was created in database
with app.app_context():
2026-04-08 07:22:02 +00:00
user_obj = User.query.get(test_user)
2026-03-30 14:01:29 +00:00
inspection = Inspection.query.filter_by(reference_number=54321).first()
assert inspection is not None
assert inspection.installation_name == 'Test Installation'
assert inspection.location == 'Test Location'
2026-04-08 07:22:02 +00:00
assert inspection.created_by == user_obj.id
2026-03-30 14:01:29 +00:00
def test_view_inspection(auth_client, test_user, app):
"""Test viewing an inspection."""
with app.app_context():
# Get the user object from the ID
user = User.query.get(test_user)
# Create an inspection first
inspection = Inspection(
installation_name='Test Installation',
location='Test Location',
inspection_date=date(2026, 1, 1),
reference_number='99999',
observations='Test observations',
conclusion_text='Test conclusion',
conclusion_status=ConclusionStatus.OK,
created_by=user.id
)
db.session.add(inspection)
db.session.commit()
2026-04-08 07:22:02 +00:00
inspection_id = inspection.id # Save the ID for later use
2026-03-30 14:01:29 +00:00
# View the inspection
2026-04-08 07:22:02 +00:00
response = auth_client.get(f'/{inspection_id}')
2026-03-30 14:01:29 +00:00
assert response.status_code == 200
assert b'Test Installation' in response.data
assert b'Test Location' in response.data
assert b'99999' in response.data
def test_edit_inspection(auth_client, test_user, app):
"""Test editing an inspection."""
with app.app_context():
# Get the user object from the ID
user = User.query.get(test_user)
# Create an inspection first
inspection = Inspection(
installation_name='Original Installation',
location='Original Location',
inspection_date=date(2026, 1, 1),
reference_number='11111',
observations='Original observations',
conclusion_text='Original conclusion',
conclusion_status=ConclusionStatus.OK,
created_by=user.id
)
db.session.add(inspection)
db.session.commit()
2026-04-08 07:22:02 +00:00
inspection_id = inspection.id # Save the ID for later use
2026-03-30 14:01:29 +00:00
# Edit the inspection
2026-04-08 07:22:02 +00:00
response = auth_client.post(f'/{inspection_id}/edit', data={
2026-03-30 14:01:29 +00:00
'installation_name': 'Edited Installation',
'location': 'Edited Location',
'inspection_date': '2026-01-02',
'reference_number': '22222',
'observations': 'Edited observations',
'conclusion_text': 'Edited conclusion',
'conclusion_status': ConclusionStatus.MINOR.value,
'submit': 'Submit'
}, follow_redirects=True)
assert response.status_code == 200
assert b'Inspection report updated successfully' in response.data
# Verify changes were saved
2026-04-08 07:22:02 +00:00
with app.app_context():
inspection = Inspection.query.get(inspection_id) # Refetch to avoid detachment issues
assert inspection.installation_name == 'Edited Installation'
assert inspection.location == 'Edited Location'
assert inspection.reference_number == 22222
assert inspection.observations == 'Edited observations'
assert inspection.conclusion_text == 'Edited conclusion'
assert inspection.conclusion_status == ConclusionStatus.MINOR
assert inspection.version == 2 # Version should be incremented
2026-03-30 14:01:29 +00:00
def test_inspection_version_increment(auth_client, test_user, app):
"""Test that inspection version increments on update."""
with app.app_context():
# Get the user object from the ID
user = User.query.get(test_user)
inspection = Inspection(
installation_name='Test Installation',
location='Test Location',
2026-04-08 07:22:02 +00:00
inspection_date=date(2026, 1, 1),
2026-03-30 14:01:29 +00:00
reference_number='33333',
observations='Test observations',
conclusion_text='Test conclusion',
conclusion_status=ConclusionStatus.OK,
created_by=user.id
)
db.session.add(inspection)
db.session.commit()
2026-04-08 07:22:02 +00:00
inspection_id = inspection.id # Save the ID for later use
2026-03-30 14:01:29 +00:00
assert inspection.version == 1
# Update the inspection
2026-04-08 07:22:02 +00:00
auth_client.post(f'/{inspection_id}/edit', data={
2026-03-30 14:01:29 +00:00
'installation_name': 'Updated Installation',
'location': 'Test Location', # Keep same location
'inspection_date': '2026-01-01',
'reference_number': '33333', # Keep same reference number
'observations': 'Updated observations',
'conclusion_text': 'Updated conclusion',
'conclusion_status': ConclusionStatus.OK.value,
'submit': 'Submit'
})
2026-04-08 07:22:02 +00:00
with app.app_context():
inspection = Inspection.query.get(inspection_id) # Refetch to avoid detachment issues
assert inspection.version == 2