addons-cm/website_sale_aplicoop/tests/test_save_order_endpoints.py
snt 6fbc7b9456 [FIX] website_sale_aplicoop: Remove redundant string= attributes and fix OCA linting warnings
- Remove redundant string= from 17 field definitions where name matches string value (W8113)
- Convert @staticmethod to instance methods in selection methods for proper self.env._() access
- Fix W8161 (prefer-env-translation) by using self.env._() instead of standalone _()
- Fix W8301/W8115 (translation-not-lazy) by proper placement of % interpolation outside self.env._()
- Remove unused imports of odoo._ from group_order.py and sale_order_extension.py
- All OCA linting warnings in website_sale_aplicoop main models are now resolved

Changes:
- website_sale_aplicoop/models/group_order.py: 21 field definitions cleaned
- website_sale_aplicoop/models/sale_order_extension.py: 5 field definitions cleaned + @staticmethod conversion
- Consistent with OCA standards for addon submission
2026-02-18 17:54:43 +01:00

351 lines
13 KiB
Python

# Copyright 2025 Criptomart
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
"""
Test suite for save_eskaera_draft() and save_cart_draft() endpoints.
These tests ensure that both endpoints correctly save group_order_id and
related fields (pickup_day, pickup_date, home_delivery) when creating
draft sale orders.
See: website_sale_aplicoop/controllers/website_sale.py
"""
from datetime import datetime
from datetime import timedelta
from odoo.tests.common import TransactionCase
class TestSaveOrderEndpoints(TransactionCase):
"""Test suite for order-saving endpoints."""
def setUp(self):
super().setUp()
# Create a consumer group
self.group = self.env["res.partner"].create(
{
"name": "Test Group",
"is_company": True,
"email": "group@test.com",
}
)
# Create a group member (user partner)
self.member_partner = self.env["res.partner"].create(
{
"name": "Group Member Partner",
"email": "member@test.com",
}
)
# Add member to group
self.group.member_ids = [(4, self.member_partner.id)]
# Create test user
self.user = self.env["res.users"].create(
{
"name": "Test User",
"login": "testuser@test.com",
"email": "testuser@test.com",
"partner_id": self.member_partner.id,
}
)
# Create a group order
start_date = datetime.now().date()
end_date = start_date + timedelta(days=7)
self.group_order = self.env["group.order"].create(
{
"name": "Test Group Order",
"group_ids": [(6, 0, [self.group.id])],
"type": "regular",
"start_date": start_date,
"end_date": end_date,
"period": "weekly",
"pickup_day": "3", # Wednesday
"pickup_date": start_date + timedelta(days=3),
"home_delivery": False,
"cutoff_day": "0",
}
)
# Open the group order
self.group_order.action_open()
# Create products for the order
self.category = self.env["product.category"].create(
{
"name": "Test Category",
}
)
self.product = self.env["product.product"].create(
{
"name": "Test Product",
"type": "consu",
"list_price": 10.0,
"categ_id": self.category.id,
}
)
# Associate product with group order
self.group_order.product_ids = [(4, self.product.id)]
def test_save_eskaera_draft_creates_order_with_group_order_id(self):
"""
Test that save_eskaera_draft() creates a sale.order with group_order_id.
This is the main fix: ensure that the /eskaera/save-order endpoint
correctly links the created sale.order to the group.order.
"""
# Simulate what the controller does: create order with group_order_id
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"pickup_date": self.group_order.pickup_date,
"home_delivery": self.group_order.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify the order was created with group_order_id
self.assertIsNotNone(sale_order.id)
self.assertEqual(sale_order.group_order_id.id, self.group_order.id)
self.assertEqual(sale_order.group_order_id.name, self.group_order.name)
def test_save_eskaera_draft_propagates_pickup_day(self):
"""Test that save_eskaera_draft() propagates pickup_day correctly."""
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"pickup_date": self.group_order.pickup_date,
"home_delivery": self.group_order.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify pickup_day was propagated
self.assertEqual(sale_order.pickup_day, "3")
self.assertEqual(sale_order.pickup_day, self.group_order.pickup_day)
def test_save_eskaera_draft_propagates_pickup_date(self):
"""Test that save_eskaera_draft() propagates pickup_date correctly."""
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"pickup_date": self.group_order.pickup_date,
"home_delivery": self.group_order.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify pickup_date was propagated
self.assertEqual(sale_order.pickup_date, self.group_order.pickup_date)
def test_save_eskaera_draft_propagates_home_delivery(self):
"""Test that save_eskaera_draft() propagates home_delivery correctly."""
# Create a group order with home_delivery=True
group_order_home = self.env["group.order"].create(
{
"name": "Test Group Order with Home Delivery",
"group_ids": [(6, 0, [self.group.id])],
"type": "regular",
"start_date": datetime.now().date(),
"end_date": datetime.now().date() + timedelta(days=7),
"period": "weekly",
"pickup_day": "3",
"pickup_date": datetime.now().date() + timedelta(days=3),
"home_delivery": True, # Enable home delivery
"cutoff_day": "0",
}
)
group_order_home.action_open()
# Test with home_delivery=True
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": group_order_home.id,
"pickup_day": group_order_home.pickup_day,
"pickup_date": group_order_home.pickup_date,
"home_delivery": group_order_home.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify home_delivery was propagated
self.assertTrue(sale_order.home_delivery)
self.assertEqual(sale_order.home_delivery, group_order_home.home_delivery)
def test_save_eskaera_draft_order_is_draft_state(self):
"""Test that save_eskaera_draft() creates order in draft state."""
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"pickup_date": self.group_order.pickup_date,
"home_delivery": self.group_order.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify order is in draft state
self.assertEqual(sale_order.state, "draft")
def test_save_eskaera_draft_multiple_fields_together(self):
"""
Test that all fields are saved together correctly.
This test ensures that the fix didn't break any field and that
all group_order-related fields are propagated together.
"""
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"pickup_date": self.group_order.pickup_date,
"home_delivery": self.group_order.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify all fields together
self.assertEqual(sale_order.group_order_id.id, self.group_order.id)
self.assertEqual(sale_order.pickup_day, self.group_order.pickup_day)
self.assertEqual(sale_order.pickup_date, self.group_order.pickup_date)
self.assertEqual(sale_order.home_delivery, self.group_order.home_delivery)
self.assertEqual(sale_order.state, "draft")
def test_save_cart_draft_also_saves_group_order_id(self):
"""
Test that save_cart_draft() (the working endpoint) also saves group_order_id.
This is a regression test to ensure that save_cart_draft() continues
to work correctly after the fix to save_eskaera_draft().
"""
# save_cart_draft should also include group_order_id
order_vals = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"pickup_date": self.group_order.pickup_date,
"home_delivery": self.group_order.home_delivery,
"order_line": [],
"state": "draft",
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify all fields
self.assertEqual(sale_order.group_order_id.id, self.group_order.id)
self.assertEqual(sale_order.pickup_day, self.group_order.pickup_day)
self.assertEqual(sale_order.pickup_date, self.group_order.pickup_date)
def test_save_draft_order_without_group_order_id_still_works(self):
"""
Test that creating a normal sale.order (without group_order_id) still works.
This ensures backward compatibility - you should still be able to create
sale orders without associating them to a group order.
"""
order_vals = {
"partner_id": self.member_partner.id,
"order_line": [],
"state": "draft",
# No group_order_id
}
sale_order = self.env["sale.order"].create(order_vals)
# Verify order was created without group_order_id
self.assertIsNotNone(sale_order.id)
self.assertFalse(sale_order.group_order_id)
def test_group_order_id_field_exists_and_is_stored(self):
"""
Test that group_order_id field exists on sale.order and is stored correctly.
This is a sanity check to ensure the field is properly defined in the model.
"""
# Verify the field exists in the model
sale_order_model = self.env["sale.order"]
self.assertIn("group_order_id", sale_order_model._fields)
# Verify it's a Many2one field
field = sale_order_model._fields["group_order_id"]
self.assertEqual(field.type, "many2one")
self.assertEqual(field.comodel_name, "group.order")
def test_different_group_orders_map_to_different_sale_orders(self):
"""
Test that different group orders create separate sale orders.
This ensures that two users buying from different group orders
don't accidentally share the same sale.order.
"""
# Create a second group order
group_order_2 = self.env["group.order"].create(
{
"name": "Test Group Order 2",
"group_ids": [(6, 0, [self.group.id])],
"type": "regular",
"start_date": datetime.now().date() + timedelta(days=10),
"end_date": datetime.now().date() + timedelta(days=17),
"period": "weekly",
"pickup_day": "5",
"pickup_date": datetime.now().date() + timedelta(days=12),
"home_delivery": True,
"cutoff_day": "0",
}
)
group_order_2.action_open()
# Create order for first group order
order_vals_1 = {
"partner_id": self.member_partner.id,
"group_order_id": self.group_order.id,
"pickup_day": self.group_order.pickup_day,
"order_line": [],
"state": "draft",
}
sale_order_1 = self.env["sale.order"].create(order_vals_1)
# Create order for second group order
order_vals_2 = {
"partner_id": self.member_partner.id,
"group_order_id": group_order_2.id,
"pickup_day": group_order_2.pickup_day,
"order_line": [],
"state": "draft",
}
sale_order_2 = self.env["sale.order"].create(order_vals_2)
# Verify they're different orders with different group_order_ids
self.assertNotEqual(sale_order_1.id, sale_order_2.id)
self.assertEqual(sale_order_1.group_order_id.id, self.group_order.id)
self.assertEqual(sale_order_2.group_order_id.id, group_order_2.id)
self.assertNotEqual(
sale_order_1.group_order_id.id,
sale_order_2.group_order_id.id,
)