From 58d831343783b481c5060507c6e1813981ba8108 Mon Sep 17 00:00:00 2001 From: DarKylX Date: Sun, 4 Oct 2026 19:05:03 +0300 Subject: [PATCH] fix(projects): include linked program name in project detail --- projects/serializers.py | 2 ++ projects/tests/test_program_project_detail_access.py | 9 +++++++++ users/tests/test_project_list_program_contract.py | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/projects/serializers.py b/projects/serializers.py index dc6f5aef..e6135fab 100644 --- a/projects/serializers.py +++ b/projects/serializers.py @@ -88,6 +88,7 @@ class Meta: class PartnerProgramProjectSerializer(serializers.ModelSerializer): + name = serializers.CharField(source="partner_program.name", read_only=True) program_link_id = serializers.IntegerField(source="pk", read_only=True) program_id = serializers.IntegerField(source="partner_program.id", read_only=True) is_submitted = serializers.BooleanField(source="submitted", read_only=True) @@ -98,6 +99,7 @@ class PartnerProgramProjectSerializer(serializers.ModelSerializer): class Meta: model = PartnerProgramProject fields = [ + "name", "program_link_id", "program_id", "is_submitted", diff --git a/projects/tests/test_program_project_detail_access.py b/projects/tests/test_program_project_detail_access.py index a2cbd48d..9ea48cd6 100644 --- a/projects/tests/test_program_project_detail_access.py +++ b/projects/tests/test_program_project_detail_access.py @@ -185,8 +185,17 @@ def test_multiple_links_return_earliest_link_deterministically(self): data = self.detail()["partner_program"] self.assertEqual(data, PartnerProgramProjectSerializer(first).data) self.assertEqual(data["program_id"], self.first_link_program.pk) + self.assertEqual(data["name"], self.first_link_program.name) self.assertFalse(data["is_submitted"]) + def test_detail_returns_current_program_name_after_rename(self): + link_project_to_program(self.project, self.first_link_program) + self.first_link_program.name = "Новое название программы" + self.first_link_program.save(update_fields=["name"]) + self.assertEqual( + self.detail()["partner_program"]["name"], "Новое название программы" + ) + def test_single_link_serializer_uses_one_join_and_existing_field_queries(self): link_project_to_program(self.project, self.first_link_program) # Existing contract: joined link/program, program fields, field values. diff --git a/users/tests/test_project_list_program_contract.py b/users/tests/test_project_list_program_contract.py index 753ab750..f5f67530 100644 --- a/users/tests/test_project_list_program_contract.py +++ b/users/tests/test_project_list_program_contract.py @@ -131,7 +131,7 @@ def test_leader_and_collaborator_see_identical_lifecycle(self): self.assertEqual(self.list_program(self.endpoints[0]), leader_metadata) detail = self.client.get(f"/projects/{self.project.pk}/") self.assertEqual(detail.status_code, 200) - for field in ("program_link_id", "program_id", "is_submitted"): + for field in ("name", "program_link_id", "program_id", "is_submitted"): self.assertEqual( detail.data["partner_program"][field], leader_metadata[field] )