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:
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user