Merge pull request 'test(Tryton): add catalog sale test and validate build_tryton_comment' (#44) from fix/EnviarComentarioConDetalleDelPedido into main
Reviewed-on: #44
This commit is contained in:
@@ -3,9 +3,10 @@ from unittest.mock import patch, MagicMock
|
|||||||
|
|
||||||
from django.test import TestCase
|
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.customers import Customer
|
||||||
from ..models.products import Product
|
from ..models.products import Product
|
||||||
|
from ..services.tryton.client import TrytonSale, TrytonCatalogSale
|
||||||
from .Mixins import LoginMixin
|
from .Mixins import LoginMixin
|
||||||
|
|
||||||
|
|
||||||
@@ -44,6 +45,27 @@ class TestSendSalesToTryton(TestCase, LoginMixin):
|
|||||||
sale=self.sale,
|
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")
|
@patch("don_confiao.api.sales.get_tryton_client")
|
||||||
def test_send_sales_to_tryton(self, mock_get_tryton_client):
|
def test_send_sales_to_tryton(self, mock_get_tryton_client):
|
||||||
external_id = "23423"
|
external_id = "23423"
|
||||||
@@ -56,7 +78,9 @@ class TestSendSalesToTryton(TestCase, LoginMixin):
|
|||||||
|
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
content = json.loads(response.content.decode("utf-8"))
|
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)
|
updated_sale = Sale.objects.get(id=self.sale.id)
|
||||||
self.assertEqual(updated_sale.external_id, external_id)
|
self.assertEqual(updated_sale.external_id, external_id)
|
||||||
@@ -89,6 +113,110 @@ class TestSendSalesToTryton(TestCase, LoginMixin):
|
|||||||
)
|
)
|
||||||
self.assertTrue(sale_params["self_pick_up"])
|
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"]
|
lines_block = sale_params["lines"]
|
||||||
self.assertEqual(len(lines_block), 1)
|
self.assertEqual(len(lines_block), 1)
|
||||||
self.assertEqual(lines_block[0][0], "create")
|
self.assertEqual(lines_block[0][0], "create")
|
||||||
|
|||||||
Reference in New Issue
Block a user