From d1c2b4f1bb81d5ae4b60998275af90e340a185d3 Mon Sep 17 00:00:00 2001 From: aserrador Date: Sat, 11 Jul 2026 14:55:44 -0500 Subject: [PATCH] test(Tryton): add catalog sale test and validate build_tryton_comment - Added CatalogSale/CatalogSaleLine to setUp - Added explicit assertion linking TrytonSale.build_tryton_comment() to sale.description - Rewrote test_send_catalog_sales_to_tryton with proper CatalogSale data, validating comment format, description, reference and lines - Added direct assertion of TrytonCatalogSale.build_tryton_comment() --- .../tests/test_exportar_ventas_para_tryton.py | 132 +++++++++++++++++- 1 file changed, 130 insertions(+), 2 deletions(-) diff --git a/tienda_ilusion/don_confiao/tests/test_exportar_ventas_para_tryton.py b/tienda_ilusion/don_confiao/tests/test_exportar_ventas_para_tryton.py index ed27dcf..da6657f 100644 --- a/tienda_ilusion/don_confiao/tests/test_exportar_ventas_para_tryton.py +++ b/tienda_ilusion/don_confiao/tests/test_exportar_ventas_para_tryton.py @@ -3,9 +3,10 @@ from unittest.mock import patch, MagicMock from django.test import TestCase -from ..models.sales import Sale, SaleLine +from ..models.sales import Sale, SaleLine, CatalogSale, CatalogSaleLine from ..models.customers import Customer from ..models.products import Product +from ..services.tryton.client import TrytonSale, TrytonCatalogSale from .Mixins import LoginMixin @@ -44,6 +45,27 @@ class TestSendSalesToTryton(TestCase, LoginMixin): sale=self.sale, ) + self.catalog_sale = CatalogSale.objects.create( + customer=self.customer, + date="2024-09-02", + customer_name="Camilo", + customer_phone="3001234567", + customer_address="Calle 123", + pickup_method="Recogida en tienda", + ) + CatalogSaleLine.objects.create( + catalog_sale=self.catalog_sale, + product=self.product, + quantity=2, + unit_price=3000, + ) + CatalogSaleLine.objects.create( + catalog_sale=self.catalog_sale, + product=self.product, + quantity=3, + unit_price=5000, + ) + @patch("don_confiao.api.sales.get_tryton_client") def test_send_sales_to_tryton(self, mock_get_tryton_client): external_id = "23423" @@ -56,7 +78,9 @@ class TestSendSalesToTryton(TestCase, LoginMixin): self.assertEqual(response.status_code, 200) content = json.loads(response.content.decode("utf-8")) - self.assertEqual(content, {"successful": [self.sale.id], "failed": []}) + self.assertEqual( + content, {"successful": [self.sale.id], "failed": []} + ) updated_sale = Sale.objects.get(id=self.sale.id) self.assertEqual(updated_sale.external_id, external_id) @@ -89,6 +113,110 @@ class TestSendSalesToTryton(TestCase, LoginMixin): ) self.assertTrue(sale_params["self_pick_up"]) + sale_tryton = TrytonSale( + self.sale, SaleLine.objects.filter(sale=self.sale) + ) + self.assertEqual( + sale_tryton.build_tryton_comment(), self.sale.description + ) + + lines_block = sale_params["lines"] + self.assertEqual(len(lines_block), 1) + self.assertEqual(lines_block[0][0], "create") + + lines = lines_block[0][1] + self.assertEqual(len(lines), 2) + + self.assertEqual(lines[0]["product"], "1") + self.assertEqual( + lines[0]["quantity"], + {"__class__": "Decimal", "decimal": "2.00"}, + ) + self.assertEqual(lines[0]["type"], "line") + self.assertEqual(lines[0]["unit"], "1") + self.assertEqual( + lines[0]["unit_price"], + {"__class__": "Decimal", "decimal": "3000.00"}, + ) + + self.assertEqual(lines[1]["product"], "1") + self.assertEqual( + lines[1]["quantity"], + {"__class__": "Decimal", "decimal": "3.00"}, + ) + self.assertEqual(lines[1]["type"], "line") + self.assertEqual(lines[1]["unit"], "1") + self.assertEqual( + lines[1]["unit_price"], + {"__class__": "Decimal", "decimal": "5000.00"}, + ) + + @patch("don_confiao.api.sales.get_tryton_client") + def test_send_catalog_sales_to_tryton(self, mock_get_tryton_client): + external_id = "23423" + mock_client = MagicMock() + mock_client.call.return_value = [external_id] + mock_get_tryton_client.return_value = mock_client + + url = "/don_confiao/api/enviar_catalog_sales_a_tryton" + response = self.client.post(url) + + self.assertEqual(response.status_code, 200) + content = json.loads(response.content.decode("utf-8")) + self.assertEqual( + content, + {"successful": [self.catalog_sale.id], "failed": []}, + ) + + updated = CatalogSale.objects.get(id=self.catalog_sale.id) + self.assertEqual(updated.external_id, external_id) + + mock_get_tryton_client.assert_called_once() + + mock_client.call.assert_called_once() + call_args = mock_client.call.call_args + method, params = call_args[0] + + self.assertEqual(method, "model.sale.sale.create") + + tryton_context = params[1] + self.assertEqual(tryton_context, {"company": 1, "shops": [1]}) + + sale_params = params[0][0] + self.assertEqual(sale_params["company"], 1) + self.assertEqual(sale_params["shipment_address"], "307") + self.assertEqual(sale_params["invoice_address"], "307") + self.assertEqual(sale_params["currency"], 31) + self.assertEqual(sale_params["description"], "Venta de catálogo") + self.assertEqual(sale_params["party"], "1") + self.assertEqual( + sale_params["reference"], + f"don_confiao_catalog {self.catalog_sale.id}", + ) + self.assertEqual( + sale_params["sale_date"], + {"__class__": "date", "year": 2024, "month": 9, "day": 2}, + ) + self.assertTrue(sale_params["self_pick_up"]) + + expected_comment = ( + "Cliente: Camilo\n" + "Teléfono: 3001234567\n" + "Dirección: Calle 123\n" + "Método de recogida: Recogida en tienda\n" + ) + self.assertEqual(sale_params["comment"], expected_comment) + + catalog_tryton = TrytonCatalogSale( + self.catalog_sale, + CatalogSaleLine.objects.filter( + catalog_sale=self.catalog_sale + ), + ) + self.assertEqual( + catalog_tryton.build_tryton_comment(), expected_comment + ) + lines_block = sale_params["lines"] self.assertEqual(len(lines_block), 1) self.assertEqual(lines_block[0][0], "create") -- 2.49.1