fix: catalog sale lines not being created due to wrong field name and missing read_only config

- Changed test payload from 'saleline_set' to 'catalogsaleline_set'
- Removed extraneous fields 'payment_method' and 'catalog_sale' from test data
- Made 'catalog_sale' read_only in CatalogSaleLineSerializer to allow nested creation
This commit is contained in:
2026-05-28 18:56:40 -05:00
parent e658901165
commit dde6f7329f
2 changed files with 7 additions and 15 deletions

View File

@@ -38,6 +38,7 @@ class SaleSerializer(serializers.ModelSerializer):
class CatalogSaleLineSerializer(serializers.ModelSerializer): class CatalogSaleLineSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = CatalogSaleLine model = CatalogSaleLine
read_only_fields = ["catalog_sale"]
fields = [ fields = [
"id", "id",
"catalog_sale", "catalog_sale",
@@ -48,9 +49,7 @@ class CatalogSaleLineSerializer(serializers.ModelSerializer):
class CatalogSaleSerializer(serializers.ModelSerializer): class CatalogSaleSerializer(serializers.ModelSerializer):
catalogsaleline_set = CatalogSaleLineSerializer( catalogsaleline_set = CatalogSaleLineSerializer(many=True, required=False)
many=True, required=False
)
total = serializers.ReadOnlyField(source="get_total") total = serializers.ReadOnlyField(source="get_total")
class Meta: class Meta:
@@ -67,9 +66,7 @@ class CatalogSaleSerializer(serializers.ModelSerializer):
lines_data = validated_data.pop("catalogsaleline_set", []) lines_data = validated_data.pop("catalogsaleline_set", [])
catalog_sale = CatalogSale.objects.create(**validated_data) catalog_sale = CatalogSale.objects.create(**validated_data)
for line_data in lines_data: for line_data in lines_data:
CatalogSaleLine.objects.create( CatalogSaleLine.objects.create(catalog_sale=catalog_sale, **line_data)
catalog_sale=catalog_sale, **line_data
)
return catalog_sale return catalog_sale

View File

@@ -17,9 +17,7 @@ class TestAPI(APITestCase, LoginMixin):
self.product = Product.objects.create( self.product = Product.objects.create(
name="Panela", price=5000, measuring_unit="UNIT" name="Panela", price=5000, measuring_unit="UNIT"
) )
self.customer = Customer.objects.create( self.customer = Customer.objects.create(name="Camilo", external_id="18")
name="Camilo", external_id="18"
)
def test_create_sale(self): def test_create_sale(self):
response = self._create_sale() response = self._create_sale()
@@ -42,6 +40,7 @@ class TestAPI(APITestCase, LoginMixin):
sale = CatalogSale.objects.all()[0] sale = CatalogSale.objects.all()[0]
self.assertEqual(sale.customer.name, self.customer.name) self.assertEqual(sale.customer.name, self.customer.name)
self.assertEqual(sale.id, content["id"]) self.assertEqual(sale.id, content["id"])
self.assertEqual(sale.catalogsaleline_set.count(), 2)
def test_create_sale_with_decimal(self): def test_create_sale_with_decimal(self):
response = self._create_sale_with_decimal() response = self._create_sale_with_decimal()
@@ -66,9 +65,7 @@ class TestAPI(APITestCase, LoginMixin):
json_response = json.loads(response.content.decode("utf-8")) json_response = json.loads(response.content.decode("utf-8"))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(self.customer.name, json_response[0]["name"]) self.assertEqual(self.customer.name, json_response[0]["name"])
self.assertEqual( self.assertEqual(self.customer.external_id, json_response[0]["external_id"])
self.customer.external_id, json_response[0]["external_id"]
)
def test_get_sales(self): def test_get_sales(self):
url = "/don_confiao/api/sales/" url = "/don_confiao/api/sales/"
@@ -190,8 +187,7 @@ class TestAPI(APITestCase, LoginMixin):
data = { data = {
"customer": self.customer.id, "customer": self.customer.id,
"date": "2024-09-02", "date": "2024-09-02",
"payment_method": "CASH", "catalogsaleline_set": [
"saleline_set": [
{ {
"product": self.product.id, "product": self.product.id,
"quantity": 2, "quantity": 2,
@@ -203,7 +199,6 @@ class TestAPI(APITestCase, LoginMixin):
"unit_price": 5000, "unit_price": 5000,
}, },
], ],
"catalog_sale": True,
} }
return self.client.post(url, data, format="json") return self.client.post(url, data, format="json")