"""GET /test-templates/count — total matching the same filters as the list endpoint, so the catalog UI can compute a true page count.""" import pytest @pytest.fixture def technique(api, auth_headers): resp = api( "post", "/api/v1/techniques", auth_headers, json={"mitre_id": "T1059.300", "name": "Count Endpoint Technique"}, ) assert resp.status_code == 201, resp.text return resp.json()["id"] def _create_template(api, headers, mitre_technique_id, name): resp = api( "post", "/api/v1/test-templates", headers, json={"mitre_technique_id": mitre_technique_id, "name": name}, ) assert resp.status_code == 201, resp.text return resp.json()["id"] def test_count_matches_number_of_matching_templates( client, db, api, auth_headers, red_lead_headers, technique, ): _create_template(api, red_lead_headers, "T1059.300", "Count test template A") _create_template(api, red_lead_headers, "T1059.300", "Count test template B") resp = api( "get", "/api/v1/test-templates/count", auth_headers, params={"mitre_technique_id": "T1059.300"}, ) assert resp.status_code == 200, resp.text assert resp.json()["total"] == 2 def test_count_respects_search_filter(client, db, api, auth_headers, red_lead_headers, technique): _create_template(api, red_lead_headers, "T1059.300", "Unique Zebra Template") _create_template(api, red_lead_headers, "T1059.300", "Something else entirely") resp = api("get", "/api/v1/test-templates/count", auth_headers, params={"search": "Zebra"}) assert resp.status_code == 200, resp.text assert resp.json()["total"] == 1 def test_count_matches_list_length_when_under_page_size( client, db, api, auth_headers, red_lead_headers, technique, ): _create_template(api, red_lead_headers, "T1059.300", "Parity check template") listed = api( "get", "/api/v1/test-templates", auth_headers, params={"mitre_technique_id": "T1059.300"}, ) counted = api( "get", "/api/v1/test-templates/count", auth_headers, params={"mitre_technique_id": "T1059.300"}, ) assert len(listed.json()) == counted.json()["total"] def test_count_accessible_to_any_authenticated_role(client, db, api, red_tech_headers): """Pagination is a basic UX need, not a lead-only privilege like /stats.""" resp = api("get", "/api/v1/test-templates/count", red_tech_headers) assert resp.status_code == 200, resp.text