diff --git a/tienda_ilusion/don_confiao/serializers/geography.py b/tienda_ilusion/don_confiao/serializers/geography.py index 5d93de0..e1a5abb 100644 --- a/tienda_ilusion/don_confiao/serializers/geography.py +++ b/tienda_ilusion/don_confiao/serializers/geography.py @@ -9,13 +9,38 @@ class CountrySerializer(serializers.ModelSerializer): fields = ["id", "name", "code"] -class DepartmentSerializer(serializers.ModelSerializer): +class CountryBriefSerializer(serializers.ModelSerializer): + class Meta: + model = Country + fields = ["id", "name", "code"] + + +class DepartmentBriefSerializer(serializers.ModelSerializer): class Meta: model = Department - fields = ["id", "name", "country"] + fields = ["id", "name"] + + +class MunicipalityBriefSerializer(serializers.ModelSerializer): + class Meta: + model = Municipality + fields = ["id", "name"] + + +class DepartmentSerializer(serializers.ModelSerializer): + country_detail = CountryBriefSerializer(source="country", read_only=True) + + class Meta: + model = Department + fields = ["id", "name", "country", "country_detail"] class MunicipalitySerializer(serializers.ModelSerializer): + department_detail = DepartmentBriefSerializer( + source="department", read_only=True + ) + country_detail = CountryBriefSerializer(source="country", read_only=True) + class Meta: model = Municipality - fields = ["id", "name", "department", "country"] + fields = ["id", "name", "department", "department_detail", "country", "country_detail"] diff --git a/tienda_ilusion/don_confiao/serializers/provenance.py b/tienda_ilusion/don_confiao/serializers/provenance.py index f1685da..473d9e9 100644 --- a/tienda_ilusion/don_confiao/serializers/provenance.py +++ b/tienda_ilusion/don_confiao/serializers/provenance.py @@ -1,25 +1,11 @@ from rest_framework import serializers -from ..models.geography import Country, Department, Municipality from ..models.provenance import Organization, Supplier - - -class CountryBriefSerializer(serializers.ModelSerializer): - class Meta: - model = Country - fields = ["id", "name", "code"] - - -class DepartmentBriefSerializer(serializers.ModelSerializer): - class Meta: - model = Department - fields = ["id", "name"] - - -class MunicipalityBriefSerializer(serializers.ModelSerializer): - class Meta: - model = Municipality - fields = ["id", "name"] +from .geography import ( + CountryBriefSerializer, + DepartmentBriefSerializer, + MunicipalityBriefSerializer, +) class OrganizationSerializer(serializers.ModelSerializer): diff --git a/tienda_ilusion/don_confiao/services/provenance.py b/tienda_ilusion/don_confiao/services/provenance.py index ab37c1a..5058ed4 100644 --- a/tienda_ilusion/don_confiao/services/provenance.py +++ b/tienda_ilusion/don_confiao/services/provenance.py @@ -1,7 +1,9 @@ -from ..serializers.provenance import ( +from ..serializers.geography import ( CountryBriefSerializer, DepartmentBriefSerializer, MunicipalityBriefSerializer, +) +from ..serializers.provenance import ( OrganizationBriefSerializer, SupplierBriefSerializer, ) diff --git a/tienda_ilusion/don_confiao/tests/test_provenance_api.py b/tienda_ilusion/don_confiao/tests/test_provenance_api.py index 0982d2d..abcd719 100644 --- a/tienda_ilusion/don_confiao/tests/test_provenance_api.py +++ b/tienda_ilusion/don_confiao/tests/test_provenance_api.py @@ -219,6 +219,28 @@ class TestProvenanceCRUD(APITestCase, LoginMixin): self.assertEqual(data["municipality_detail"]["name"], "La Mesa") self.assertIn("products", data) + def test_department_serializer_includes_country_detail(self): + response = self.client.get( + f"/don_confiao/api/departments/{self.department.id}/" + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(data["country"], self.country.id) + self.assertEqual(data["country_detail"]["name"], "Colombia") + self.assertEqual(data["country_detail"]["code"], "CO") + + def test_municipality_serializer_includes_fk_details(self): + response = self.client.get( + f"/don_confiao/api/municipalities/{self.municipality.id}/" + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + data = response.json() + self.assertEqual(data["department"], self.department.id) + self.assertEqual(data["department_detail"]["name"], "Cundinamarca") + self.assertEqual(data["country"], self.country.id) + self.assertEqual(data["country_detail"]["name"], "Colombia") + self.assertEqual(data["country_detail"]["code"], "CO") + def test_link_product_to_suppliers_via_product_api(self): product = Product.objects.create(name="Panela", price=5000) supplier2 = Supplier.objects.create(name="Proveedor 2")