108 lines
3.6 KiB
Python
108 lines
3.6 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from arr_web.repository import (
|
|
DAILY_DOWNLOAD_SQL,
|
|
JOBS_COUNT_SQL,
|
|
JOBS_SQL,
|
|
JOB_TRACE_ATTEMPTS_SQL,
|
|
JOB_TRACE_DELIVERIES_SQL,
|
|
JOB_TRACE_OUTBOX_SQL,
|
|
JOB_TRACE_RUN_SQL,
|
|
JOB_TRACE_SUBMISSIONS_SQL,
|
|
JOB_TRACE_VERSIONS_SQL,
|
|
MONTHLY_DOWNLOAD_SQL,
|
|
MONTHLY_RUNS_COUNT_SQL,
|
|
MONTHLY_RUNS_SQL,
|
|
)
|
|
|
|
|
|
class PortalRepositorySchemaTests(unittest.TestCase):
|
|
def test_queries_use_arr_mvp_v1_relations(self) -> None:
|
|
sql = " ".join(
|
|
(
|
|
JOBS_SQL,
|
|
JOBS_COUNT_SQL,
|
|
DAILY_DOWNLOAD_SQL,
|
|
MONTHLY_DOWNLOAD_SQL,
|
|
MONTHLY_RUNS_SQL,
|
|
MONTHLY_RUNS_COUNT_SQL,
|
|
JOB_TRACE_RUN_SQL,
|
|
JOB_TRACE_ATTEMPTS_SQL,
|
|
JOB_TRACE_DELIVERIES_SQL,
|
|
JOB_TRACE_SUBMISSIONS_SQL,
|
|
JOB_TRACE_VERSIONS_SQL,
|
|
JOB_TRACE_OUTBOX_SQL,
|
|
)
|
|
)
|
|
for required in (
|
|
"ingestion.processing_runs",
|
|
"ingestion.artifacts",
|
|
"finance.daily_versions",
|
|
"reporting.monthly_runs",
|
|
):
|
|
with self.subTest(required=required):
|
|
self.assertIn(required, sql)
|
|
|
|
for removed in (
|
|
"finance.processing_jobs",
|
|
"booking.file_objects",
|
|
"finance.report_versions",
|
|
"finance.report_channel_manifest",
|
|
):
|
|
with self.subTest(removed=removed):
|
|
self.assertNotIn(removed, sql)
|
|
|
|
def test_history_queries_count_and_page_in_the_same_repository_contract(self) -> None:
|
|
self.assertIn("count(*)", JOBS_COUNT_SQL.lower())
|
|
self.assertIn("count(*)", MONTHLY_RUNS_COUNT_SQL.lower())
|
|
self.assertIn("limit %s offset %s", JOBS_SQL.lower())
|
|
self.assertIn("limit %s offset %s", MONTHLY_RUNS_SQL.lower())
|
|
self.assertIn("run.as_of_date AS max_arrival_date", MONTHLY_RUNS_SQL)
|
|
|
|
def test_job_trace_queries_expose_only_diagnostic_columns(self) -> None:
|
|
trace_sql = " ".join(
|
|
(
|
|
JOB_TRACE_RUN_SQL,
|
|
JOB_TRACE_ATTEMPTS_SQL,
|
|
JOB_TRACE_DELIVERIES_SQL,
|
|
JOB_TRACE_SUBMISSIONS_SQL,
|
|
JOB_TRACE_VERSIONS_SQL,
|
|
JOB_TRACE_OUTBOX_SQL,
|
|
)
|
|
).lower()
|
|
for required in (
|
|
"ingestion.processing_attempts",
|
|
"ingestion.processing_deliveries",
|
|
"ingestion.result_submissions",
|
|
"ingestion.outbox_events",
|
|
"finance.daily_versions",
|
|
):
|
|
self.assertIn(required, trace_sql)
|
|
for private_column in (
|
|
"object_key",
|
|
"delivery_json",
|
|
"envelope_json",
|
|
"payload_json",
|
|
"receipt_json",
|
|
"grant_sha256",
|
|
):
|
|
self.assertNotIn(private_column, trace_sql)
|
|
|
|
def test_job_history_and_trace_are_limited_to_daily_processing_runs(self) -> None:
|
|
daily_pipeline_filter = "run.pipeline_type = 'opera_daily'"
|
|
self.assertIn(daily_pipeline_filter, JOBS_SQL)
|
|
self.assertIn(daily_pipeline_filter, JOBS_COUNT_SQL)
|
|
self.assertIn(daily_pipeline_filter, JOB_TRACE_RUN_SQL)
|
|
|
|
def test_daily_filename_uses_uploaded_provenance_not_internal_artifact_name(self) -> None:
|
|
self.assertIn("run.uploaded_filename", JOBS_SQL)
|
|
self.assertIn("run.uploaded_filename", JOB_TRACE_RUN_SQL)
|
|
self.assertNotIn("source.original_filename", JOBS_SQL)
|
|
self.assertNotIn("source.original_filename", JOB_TRACE_RUN_SQL)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=2)
|