Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
6
sale_partner_primeship/tests/__init__.py
Executable file
6
sale_partner_primeship/tests/__init__.py
Executable file
@@ -0,0 +1,6 @@
|
||||
# Copyright 2024 Akretion - Olivier Nibart
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import test_res_partner_primeship
|
||||
from . import test_sale_order_primeship
|
||||
from . import test_sale_primeship
|
||||
48
sale_partner_primeship/tests/common.py
Executable file
48
sale_partner_primeship/tests/common.py
Executable file
@@ -0,0 +1,48 @@
|
||||
# Copyright 2024 Akretion - Olivier Nibart
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo.addons.base.tests.common import BaseCommon
|
||||
|
||||
|
||||
class TestCommon(BaseCommon):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.SalePrimeship = cls.env["sale.primeship"]
|
||||
cls.SaleOrderLine = cls.env["sale.order.line"]
|
||||
cls.Partner = cls.env["res.partner"]
|
||||
cls.product = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "Primeship Product",
|
||||
"primeship_activation": True,
|
||||
"primeship_duration": 6,
|
||||
}
|
||||
)
|
||||
cls.order = (
|
||||
cls.env["sale.order"]
|
||||
.with_context(disable_cancel_warning=True)
|
||||
.create(
|
||||
{
|
||||
"partner_id": cls.partner.id,
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
def make_primeship(self, start_date, end_date, order_line_id=None):
|
||||
return self.SalePrimeship.create(
|
||||
{
|
||||
"partner_id": self.partner.id,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"order_line_id": order_line_id.id if order_line_id else False,
|
||||
}
|
||||
)
|
||||
|
||||
def make_order_line(self):
|
||||
return self.SaleOrderLine.create(
|
||||
{
|
||||
"order_id": self.order.id,
|
||||
"product_id": self.product.product_variant_id.id,
|
||||
"product_uom_qty": 1,
|
||||
}
|
||||
)
|
||||
61
sale_partner_primeship/tests/test_res_partner_primeship.py
Executable file
61
sale_partner_primeship/tests/test_res_partner_primeship.py
Executable file
@@ -0,0 +1,61 @@
|
||||
# Copyright 2024 Akretion - Olivier Nibart
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from datetime import date, timedelta
|
||||
|
||||
from .common import TestCommon
|
||||
|
||||
|
||||
class TestResPartnerPrimeship(TestCommon):
|
||||
def test_compute_active_primeship(self):
|
||||
active_primeship = self.make_primeship(
|
||||
date.today() - timedelta(days=1), date.today() + timedelta(days=30)
|
||||
)
|
||||
self.assertTrue(active_primeship.current)
|
||||
self.partner._compute_active_primeship()
|
||||
self.assertTrue(self.partner.active_primeship)
|
||||
|
||||
expired_primeship = self.make_primeship(
|
||||
date.today() - timedelta(days=60), date.today() - timedelta(days=30)
|
||||
)
|
||||
self.assertFalse(expired_primeship.current)
|
||||
self.partner._compute_active_primeship()
|
||||
# Still true due to active primeship
|
||||
self.assertTrue(self.partner.active_primeship)
|
||||
|
||||
active_primeship.active = False
|
||||
self.partner._compute_active_primeship()
|
||||
self.assertFalse(self.partner.active_primeship)
|
||||
|
||||
def test_compute_primeship_count(self):
|
||||
self.assertEqual(self.partner.primeship_count, 0)
|
||||
|
||||
self.make_primeship(date.today(), date.today() + timedelta(days=30))
|
||||
self.partner._compute_primeship_count()
|
||||
self.assertEqual(self.partner.primeship_count, 1)
|
||||
|
||||
self.make_primeship(
|
||||
date.today() + timedelta(days=31), date.today() + timedelta(days=60)
|
||||
)
|
||||
self.partner._compute_primeship_count()
|
||||
self.assertEqual(self.partner.primeship_count, 2)
|
||||
|
||||
def test_check_expired_primeships(self):
|
||||
primeship = self.make_primeship(
|
||||
date.today() - timedelta(days=1), date.today() + timedelta(days=30)
|
||||
)
|
||||
self.assertTrue(self.partner.active_primeship)
|
||||
self.Partner._check_expired_primeships()
|
||||
self.assertTrue(self.partner.active_primeship)
|
||||
|
||||
primeship.start_date = date.today() + timedelta(days=1)
|
||||
self.assertFalse(self.partner.active_primeship)
|
||||
self.partner.active_primeship = True
|
||||
self.Partner._check_expired_primeships()
|
||||
self.assertFalse(self.partner.active_primeship)
|
||||
|
||||
# work also on inactive partners
|
||||
self.partner.active = False
|
||||
self.partner.active_primeship = True
|
||||
self.Partner._check_expired_primeships()
|
||||
self.assertFalse(self.partner.active_primeship)
|
||||
94
sale_partner_primeship/tests/test_sale_order_primeship.py
Executable file
94
sale_partner_primeship/tests/test_sale_order_primeship.py
Executable file
@@ -0,0 +1,94 @@
|
||||
# Copyright 2024 Akretion - Olivier Nibart
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from datetime import date
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from .common import TestCommon
|
||||
|
||||
|
||||
class TestSaleOrderPrimeship(TestCommon):
|
||||
def test_action_confirm_creates_primeship(self):
|
||||
order_line = self.make_order_line()
|
||||
self.order.action_confirm()
|
||||
|
||||
self.assertTrue(order_line.primeship_id)
|
||||
self.assertEqual(order_line.primeship_id.partner_id, self.partner)
|
||||
self.assertEqual(order_line.primeship_id.order_line_id, order_line)
|
||||
self.assertEqual(order_line.primeship_id.start_date, date.today())
|
||||
self.assertEqual(
|
||||
order_line.primeship_id.end_date,
|
||||
order_line.primeship_id.start_date + relativedelta(months=6),
|
||||
)
|
||||
|
||||
def test_action_confirm_extends_existing_primeship(self):
|
||||
existing_primeship = self.make_primeship(
|
||||
date.today() - relativedelta(months=3),
|
||||
date.today() + relativedelta(months=3),
|
||||
)
|
||||
order_line = self.make_order_line()
|
||||
self.order.action_confirm()
|
||||
|
||||
self.assertEqual(
|
||||
order_line.primeship_id.start_date, existing_primeship.end_date
|
||||
)
|
||||
self.assertEqual(
|
||||
order_line.primeship_id.end_date,
|
||||
order_line.primeship_id.start_date + relativedelta(months=6),
|
||||
)
|
||||
|
||||
def test_action_cancel_deactivates_primeship(self):
|
||||
order_line = self.make_order_line()
|
||||
self.order.action_confirm()
|
||||
original_primeship = order_line.primeship_id
|
||||
self.assertTrue(original_primeship.active)
|
||||
|
||||
self.order.action_cancel()
|
||||
self.assertFalse(original_primeship.active)
|
||||
|
||||
def test_action_confirm_with_existing_primeship(self):
|
||||
order_line = self.make_order_line()
|
||||
self.order.action_confirm()
|
||||
original_primeship = order_line.primeship_id
|
||||
self.order.action_cancel()
|
||||
|
||||
# recomputing the primeship_id will detach
|
||||
# the deactivated primeship from the order line
|
||||
order_line._compute_primeship_id()
|
||||
self.assertFalse(order_line.primeship_id)
|
||||
|
||||
self.order.action_draft()
|
||||
self.assertFalse(original_primeship.active)
|
||||
|
||||
# we should now retrieve the deactivated primeship
|
||||
# and reactivate it
|
||||
self.order.action_confirm()
|
||||
self.assertTrue(order_line.primeship_id.active)
|
||||
self.assertEqual(order_line.primeship_id.id, original_primeship.id)
|
||||
|
||||
self.order.action_cancel()
|
||||
|
||||
# we do not recompute the primeship_id so even though it is
|
||||
# deactivated, order_line.primeship_id is still pointing at it
|
||||
self.assertEqual(order_line.primeship_id.id, original_primeship.id)
|
||||
|
||||
self.order.action_draft()
|
||||
|
||||
# we should now use the still attached deactivated primeship
|
||||
# and reactivate it
|
||||
self.order.action_confirm()
|
||||
self.assertTrue(original_primeship.active)
|
||||
self.assertEqual(order_line.primeship_id.id, original_primeship.id)
|
||||
|
||||
def test_prepare_invoice_line_with_primeship(self):
|
||||
order_line = self.make_order_line()
|
||||
self.order.action_confirm()
|
||||
|
||||
invoice_line_vals = order_line._prepare_invoice_line()
|
||||
self.assertEqual(
|
||||
invoice_line_vals["start_date"], order_line.primeship_id.start_date
|
||||
)
|
||||
self.assertEqual(
|
||||
invoice_line_vals["end_date"], order_line.primeship_id.end_date
|
||||
)
|
||||
85
sale_partner_primeship/tests/test_sale_primeship.py
Executable file
85
sale_partner_primeship/tests/test_sale_primeship.py
Executable file
@@ -0,0 +1,85 @@
|
||||
# Copyright 2024 Akretion - Olivier Nibart
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from datetime import date, timedelta
|
||||
|
||||
import psycopg2
|
||||
|
||||
from odoo import fields
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tools.misc import mute_logger
|
||||
|
||||
from .common import TestCommon
|
||||
|
||||
|
||||
class TestSalePrimeship(TestCommon):
|
||||
def test_compute_name(self):
|
||||
primeship = self.make_primeship("2024-01-01", "2024-12-31")
|
||||
self.assertEqual(primeship.name, "2024-01-01 - 2024-12-31 Primeship")
|
||||
|
||||
def test_compute_current(self):
|
||||
today = date.today()
|
||||
primeship_current = self.make_primeship(
|
||||
today - timedelta(days=1), today + timedelta(days=1)
|
||||
)
|
||||
primeship_past = self.make_primeship(
|
||||
today - timedelta(days=10), today - timedelta(days=1)
|
||||
)
|
||||
primeship_future = self.make_primeship(
|
||||
today + timedelta(days=1), today + timedelta(days=10)
|
||||
)
|
||||
self.assertTrue(primeship_current.current)
|
||||
self.assertFalse(primeship_past.current)
|
||||
self.assertFalse(primeship_future.current)
|
||||
|
||||
def test_check_end_date(self):
|
||||
with self.assertRaises(ValidationError):
|
||||
self.make_primeship("2023-12-31", "2023-01-01")
|
||||
|
||||
def test_overlapping_primeships(self):
|
||||
self.make_primeship("2023-01-01", "2023-06-30")
|
||||
with self.assertRaises(ValidationError):
|
||||
self.make_primeship("2023-06-01", "2023-12-31")
|
||||
|
||||
def test_non_overlapping_primeships(self):
|
||||
primeship1 = self.make_primeship("2023-01-01", "2023-06-30")
|
||||
primeship2 = self.make_primeship("2023-07-01", "2023-12-31")
|
||||
self.assertTrue(primeship1.id)
|
||||
self.assertTrue(primeship2.id)
|
||||
|
||||
def test_overlaps_method(self):
|
||||
primeship = self.make_primeship("2023-01-01", "2023-12-31")
|
||||
self.assertTrue(
|
||||
primeship.overlaps(
|
||||
fields.Date.to_date("2023-06-01"), fields.Date.to_date("2023-07-01")
|
||||
)
|
||||
)
|
||||
self.assertTrue(
|
||||
primeship.overlaps(
|
||||
fields.Date.to_date("2022-06-01"), fields.Date.to_date("2023-02-01")
|
||||
)
|
||||
)
|
||||
self.assertTrue(
|
||||
primeship.overlaps(
|
||||
fields.Date.to_date("2023-12-01"), fields.Date.to_date("2024-01-01")
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
primeship.overlaps(
|
||||
fields.Date.to_date("2022-01-01"), fields.Date.to_date("2022-12-31")
|
||||
)
|
||||
)
|
||||
self.assertFalse(
|
||||
primeship.overlaps(
|
||||
fields.Date.to_date("2024-01-01"), fields.Date.to_date("2024-12-31")
|
||||
)
|
||||
)
|
||||
|
||||
def test_sale_order_line_sale_primeship_o2o_relation_sql_constraint(self):
|
||||
order_line = self.make_order_line()
|
||||
self.make_primeship("2023-01-01", "2023-12-31", order_line_id=order_line)
|
||||
with self.assertRaises(psycopg2.IntegrityError):
|
||||
with mute_logger("odoo.sql_db"), self.cr.savepoint():
|
||||
self.make_primeship(
|
||||
"2024-01-01", "2024-12-31", order_line_id=order_line
|
||||
)
|
||||
Reference in New Issue
Block a user