feat: add gosedo and media news sources
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 1m10s
CI/CD Pipeline / Build and Push Images (push) Successful in 19s
CI/CD Pipeline / Internal Notify (push) Successful in 0s
CI/CD Pipeline / Deploy Dev via Compose (push) Successful in 24s

This commit is contained in:
2026-08-13 14:12:53 +02:00
parent 1c2dd985d4
commit a0eb0a5303
29 changed files with 3228 additions and 85 deletions

View File

@@ -17,6 +17,7 @@ from django.utils import timezone
from openpyxl import load_workbook
from organizations.models import (
FinancialIndicatorsExtension,
MediaMentionExtension,
Organization,
OrganizationSourceFinancialLine,
OrganizationSourceRecord,
@@ -91,9 +92,9 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
call_command("build_source_record_exports", stdout=command_output)
generation = load_current_source_record_export_generation()
self.assertEqual(generation.artifacts_count, 25)
self.assertEqual(generation.artifacts_count, 31)
self.assertEqual(generation.export_year, timezone.localdate().year)
self.assertIn('"artifacts_count": 25', command_output.getvalue())
self.assertIn('"artifacts_count": 31', command_output.getvalue())
def test_generation_contains_only_records_from_its_calendar_year(self):
export_year = 2026
@@ -179,7 +180,6 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
{row["uid"] for row in inspection_rows},
{str(current_record.pk), str(dateless_current_record.pk)},
)
financial_path = next(
artifact.path
for artifact in generation.artifacts
@@ -195,6 +195,46 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
{export_year},
)
def test_media_mentions_export_keeps_all_history_and_full_text(self):
generated_at = datetime(2026, 8, 4, 6, 0, tzinfo=UTC)
organization = Organization.objects.create(
name="АО История СМИ",
inn="7707083802",
)
extension = MediaMentionExtension.objects.create(
organization=organization,
title="Новости СМИ",
)
old_record = OrganizationSourceRecord.objects.create(
extension=extension,
record_type="media_mention",
source="media_news",
external_id="old-media-mention",
title="Старая публикация",
record_date="2023-02-15",
payload={
"news_source": "Архивное СМИ",
"excerpt_lines": ["Строка 1", "Строка 2"],
"full_text": "Строка 1\nСтрока 2\nПолная история",
},
)
generation = build_source_record_export_artifacts(now=generated_at)
media_path = next(
artifact.path
for artifact in generation.artifacts
if artifact.source_group == SourceGroup.MEDIA_MENTIONS.value
and artifact.file_format == "json"
)
rows = json.loads(media_path.read_text(encoding="utf-8"))
exported = next(row for row in rows if row["uid"] == str(old_record.pk))
self.assertEqual(exported["record_date"], "2023-02-15")
self.assertEqual(
exported["payload.full_text"],
"Строка 1\nСтрока 2\nПолная история",
)
def test_new_calendar_year_requires_a_new_prepared_generation(self):
generated_at = datetime(2026, 12, 31, 23, 59, tzinfo=UTC)
build_source_record_export_artifacts(now=generated_at)
@@ -273,7 +313,7 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
self.assertEqual(
response["X-Source-Export-Generated-At"], generation.generated_at
)
self.assertEqual(generation.artifacts_count, 25)
self.assertEqual(generation.artifacts_count, 31)
self.assertIn(
'filename="planned-inspections__financial-indicators_',
response["Content-Disposition"],
@@ -468,8 +508,8 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
key=lambda item: item.file_name,
)
self.assertEqual(generation.artifacts_count, 25)
self.assertEqual(generation.files_count, 26)
self.assertEqual(generation.artifacts_count, 31)
self.assertEqual(generation.files_count, 32)
self.assertEqual(
[item.file_name for item in artifacts],
[
@@ -667,7 +707,7 @@ class OrganizationSourceRecordExportApiV2Test(APITestCase):
first_generation = build_source_record_export_artifacts()
current_generation = load_current_source_record_export_generation()
self.assertEqual(first_generation.artifacts_count, 25)
self.assertEqual(first_generation.artifacts_count, 31)
self.assertEqual(
current_generation.generation_id, first_generation.generation_id
)

View File

@@ -145,7 +145,7 @@ class SourceRecordExportArtifactsTaskTest(TestCase):
result = refresh_source_record_export_artifacts()
self.assertEqual(result["status"], "success")
self.assertEqual(result["artifacts_count"], 25)
self.assertEqual(result["artifacts_count"], 31)
self.assertEqual(result["export_year"], timezone.localdate().year)
self.assertIsNone(cache.get(settings.SOURCE_RECORD_EXPORT_LOCK_KEY))

View File

@@ -214,7 +214,7 @@ class TestCompaniesCommandsTest(TestCase):
year=stale_year,
).exists()
)
self.assertEqual(OrganizationSourceRecord.objects.count(), 20 * 15)
self.assertEqual(OrganizationSourceRecord.objects.count(), 20 * 17)
def test_create_replaces_stale_source_record_for_same_legacy_row(self):
call_command("create_test_companies", stdout=StringIO())
@@ -276,6 +276,8 @@ class TestCompaniesCommandsTest(TestCase):
"defense_unreliable_suppliers": 40,
"information_security_registries": 20,
"labor_vacancies": 20,
"electronic_document_exchange": 20,
"media_mentions": 20,
},
)
self.assertEqual(len(reports), 20)