<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="1" skipped="1" tests="23" time="10.081" timestamp="2026-05-26T07:14:18.504291+00:00" hostname="agent-env-07c95d3f-5a6a-49ec-9dd7-5643f5c9eede"><testcase classname="backend.tests.test_reports_and_backup.TestLoginRegression" name="test_login_success_returns_user_and_no_500" time="0.472" /><testcase classname="backend.tests.test_reports_and_backup.TestLoginRegression" name="test_login_wrong_password_401" time="0.390" /><testcase classname="backend.tests.test_reports_and_backup.TestReportSources" name="test_sources_returns_six_with_fields" time="0.412" /><testcase classname="backend.tests.test_reports_and_backup.TestReportPreview" name="test_preview_sales_basic" time="0.093" /><testcase classname="backend.tests.test_reports_and_backup.TestReportPreview" name="test_preview_invalid_source_400" time="0.045" /><testcase classname="backend.tests.test_reports_and_backup.TestReportPreview" name="test_preview_empty_columns_400" time="0.053" /><testcase classname="backend.tests.test_reports_and_backup.TestReportPreview" name="test_preview_with_date_filter_sort_group" time="0.045" /><testcase classname="backend.tests.test_reports_and_backup.TestSavedReports" name="test_save_returns_id" time="0.096" /><testcase classname="backend.tests.test_reports_and_backup.TestSavedReports" name="test_list_includes_new" time="0.141" /><testcase classname="backend.tests.test_reports_and_backup.TestSavedReports" name="test_run_returns_same_shape_as_preview" time="0.137" /><testcase classname="backend.tests.test_reports_and_backup.TestSavedReports" name="test_update_saved" time="0.139" /><testcase classname="backend.tests.test_reports_and_backup.TestSavedReports" name="test_delete_saved" time="0.194" /><testcase classname="backend.tests.test_reports_and_backup.TestSavedReports" name="test_export_csv" time="0.048" /><testcase classname="backend.tests.test_reports_and_backup.TestAiSummary" name="test_ai_summary_returns_text" time="3.220" /><testcase classname="backend.tests.test_reports_and_backup.TestBackup" name="test_create_backup" time="0.703" /><testcase classname="backend.tests.test_reports_and_backup.TestBackup" name="test_list_returns_array_newest_first" time="0.631" /><testcase classname="backend.tests.test_reports_and_backup.TestBackup" name="test_verify_sha256_matches" time="0.747" /><testcase classname="backend.tests.test_reports_and_backup.TestBackup" name="test_download_returns_binary" time="0.665" /><testcase classname="backend.tests.test_reports_and_backup.TestBackup" name="test_restore_merge_returns_counts" time="0.631"><failure message="Failed: ROUTE COLLISION: /api/backup/restore is shadowed by utilities.py's multipart upload route. The new JSON-body restore in backup_engine.py is unreachable.">backend/tests/test_reports_and_backup.py:263: in test_restore_merge_returns_counts
    pytest.fail(
E   Failed: ROUTE COLLISION: /api/backup/restore is shadowed by utilities.py's multipart upload route. The new JSON-body restore in backup_engine.py is unreachable.</failure></testcase><testcase classname="backend.tests.test_reports_and_backup.TestBackup" name="test_delete_backup" time="0.687" /><testcase classname="backend.tests.test_reports_and_backup.TestBackupSchedule" name="test_get_schedule_shape" time="0.045" /><testcase classname="backend.tests.test_reports_and_backup.TestBackupSchedule" name="test_put_schedule_saves_and_clamps" time="0.358" /><testcase classname="backend.tests.test_reports_and_backup.TestBackupPermissions" name="test_non_admin_403_on_list" time="0.045"><skipped type="pytest.skip" message="Could not create cashier: 404 {&quot;detail&quot;:&quot;Not Found&quot;}">/app/backend/tests/test_reports_and_backup.py:343: Could not create cashier: 404 {"detail":"Not Found"}</skipped></testcase></testsuite></testsuites>