Add organization stats endpoint
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 24s
CI/CD Pipeline / Build and Push Images (push) Successful in 10s
CI/CD Pipeline / Internal Notify (push) Successful in 0s
CI/CD Pipeline / Deploy Dev in Dokploy (push) Successful in 1s

This commit is contained in:
2026-05-12 17:48:54 +02:00
parent ab3e672a8d
commit 89607356b7
6 changed files with 342 additions and 13 deletions

View File

@@ -697,6 +697,112 @@ class ParsersViewSetTest(APITestCase):
self.assertEqual(unified_response.data["data"][0]["id"], report.id)
self.assertEqual(unified_response.data["data"][0]["title"], report.file_name)
def test_fns_financial_results_searches_and_orders_by_registry_organization(self):
alpha_org = RegisterOrganizationFactory(
pn_name='alpha "ФНС"',
mn_ogrn=1027700000001,
mn_inn=7701000001,
)
beta_org = RegisterOrganizationFactory(
pn_name='Beta "ФНС"',
mn_ogrn=1027700000002,
mn_inn=7701000002,
)
alpha_report = FinancialReport.objects.create(
external_id="fns-alpha",
ogrn=str(alpha_org.mn_ogrn),
registry_organization=alpha_org,
file_name=f"fin_fns-alpha_{alpha_org.mn_ogrn}.xlsx",
file_hash=fake.sha256(raw_output=False),
load_batch=1,
status=FinancialReport.Status.SUCCESS,
source=FinancialReport.SourceType.API,
)
beta_report = FinancialReport.objects.create(
external_id="fns-beta",
ogrn=str(beta_org.mn_ogrn),
registry_organization=beta_org,
file_name=f"fin_fns-beta_{beta_org.mn_ogrn}.xlsx",
file_hash=fake.sha256(raw_output=False),
load_batch=1,
status=FinancialReport.Status.SUCCESS,
source=FinancialReport.SourceType.API,
)
self.client.force_authenticate(self.user)
name_response = self.client.get(
"/api/v1/parsers/results/fns_financial/",
{"search": "alpha"},
)
inn_response = self.client.get(
"/api/v1/parsers/results/fns_financial/",
{"search": str(beta_org.mn_inn)},
)
ordered_response = self.client.get(
"/api/v1/parsers/results/fns_financial/",
{"ordering": "organisation_name"},
)
self.assertEqual(name_response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in name_response.data["data"]],
[alpha_report.id],
)
self.assertEqual(
name_response.data["data"][0]["organisation_name"],
alpha_org.pn_name,
)
self.assertEqual(name_response.data["data"][0]["inn"], str(alpha_org.mn_inn))
self.assertEqual(inn_response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in inn_response.data["data"]],
[beta_report.id],
)
self.assertEqual(ordered_response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in ordered_response.data["data"]],
[alpha_report.id, beta_report.id],
)
def test_eis_results_order_text_case_insensitively_and_by_amount(self):
low_amount = GenericParserRecord.objects.create(
load_batch=1,
source=ParserLoadLog.Source.PROCUREMENTS_44FZ,
external_id="amount-low",
organisation_name="alpha customer",
title="Low amount",
amount="10.00",
)
high_amount = GenericParserRecord.objects.create(
load_batch=1,
source=ParserLoadLog.Source.PROCUREMENTS_44FZ,
external_id="amount-high",
organisation_name="Beta customer",
title="High amount",
amount="20.00",
)
self.client.force_authenticate(self.user)
amount_response = self.client.get(
"/api/v1/eis/procurements-44fz/",
{"ordering": "amount"},
)
name_response = self.client.get(
"/api/v1/eis/procurements-44fz/",
{"ordering": "-organisation_name"},
)
self.assertEqual(amount_response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in amount_response.data["data"]],
[low_amount.id, high_amount.id],
)
self.assertEqual(name_response.status_code, status.HTTP_200_OK)
self.assertEqual(
[item["id"] for item in name_response.data["data"]],
[high_amount.id, low_amount.id],
)
def test_system_logs_admin_only(self):
log = ParserLoadLogFactory()
url_logs = reverse("api_v1:system:parser-logs-list")