Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyasProgrammer committed Sep 26, 2023
1 parent 4357c17 commit ee35f1c
Show file tree
Hide file tree
Showing 2 changed files with 141 additions and 10 deletions.
5 changes: 5 additions & 0 deletions subscription_oca/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
* Carlos Martínez <carlos@domatix.com>


* `Ooops404 <https://www.ooops404.com>`__:

* Ilyas <irazor147@gmail.com>
146 changes: 136 additions & 10 deletions subscription_oca/tests/test_subscription_oca.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Copyright 2023 ooops404
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from dateutil.relativedelta import relativedelta

from odoo import fields
from odoo.tests import TransactionCase


Expand All @@ -12,16 +16,44 @@ def setUpClass(cls):
)
cls.partner = cls.env["res.partner"].create(
{
"name": "partner test contract",
"name": "partner test subscription_oca",
"property_product_pricelist": cls.pricelist.id,
"email": "demo@demo.com",
"email": "demo1@demo.com",
}
)
cls.partner_2 = cls.env["res.partner"].create(
{
"name": "partner test subscription_oca 2",
"property_product_pricelist": cls.pricelist.id,
"email": "demo2@demo.com",
}
)
cls.tax_10pc_incl = cls.env["account.tax"].create(
{
"name": "10% Tax incl",
"amount_type": "percent",
"amount": 10,
"price_include": True,
}
)
cls.product_1 = cls.env.ref("product.product_product_1")
cls.product_1.taxes_id = [(6, 0, cls.tax_10pc_incl.ids)]
cls.product_2 = cls.env.ref("product.product_product_2")
cls.country_id = cls.env["res.country"].search([], limit=1)
cls.fiscal_id = cls.env["account.fiscal.position"].create(
{
"name": "Regime National",
"auto_apply": True,
"country_id": cls.country_id.id,
"vat_required": True,
"sequence": 10,
}
)
cls.tmpl_id = cls.env["sale.subscription.template"].create(
{
"name": "Test Template",
"code": "OMG",
"description": "Some sort of subscription terms",
"product_ids": [(6, 0, [cls.product_1.id, cls.product_2.id])],
}
)
Expand All @@ -43,21 +75,24 @@ def setUpClass(cls):
"tag_ids": [(6, 0, [cls.tag_id.id])],
"stage_id": cls.stage_id.id,
"pricelist_id": cls.pricelist.id,
"fiscal_position_id": cls.fiscal_id.id,
}
)
cls.sub_line_id = cls.env["sale.subscription.line"].create(
{
"company_id": 1,
"sale_subscription_id": cls.sub_id.id,
"product_id": cls.product_1.id,
}
)
cls.close_reason_id = cls.env["sale.subscription.close.reason"].create(
{
"name": "Test Close Reason",
}
)

def test_all(self):
pass
# 123
self.partner._compute_subscription_count()
self.partner.action_view_subscription_ids()
# so
def test_all_subscription_oca(self):
# SO standard flow
so = self.env["sale.order"].create(
{
"partner_id": self.partner.id,
Expand All @@ -79,7 +114,98 @@ def test_all(self):
}
)
so._compute_subscriptions_count()
so.action_view_subscriptions()
so.action_confirm()
self.assertEqual(so.subscriptions_count, 0)
action = so.action_view_subscriptions()
self.assertIsInstance(action, dict)
so.action_confirm() # without subs.

# sale.subscription.line
self.sub_line_id._compute_name()
self.assertEqual(self.sub_line_id.name, self.sub_line_id.product_id.name)
self.sub_line_id._compute_tax_ids()
self.assertIsNotNone(self.sub_line_id.tax_ids)
self.sub_line_id._compute_price_unit()
self.assertEqual(self.sub_line_id.price_unit, 30.75)
self.sub_line_id._compute_discount()
self.assertEqual(self.sub_line_id.discount, 0)
res = self.sub_line_id._get_display_price(self.product_2)
self.assertEqual(res, 38.25)
sol_res = self.sub_line_id._prepare_sale_order_line()
self.assertIsInstance(sol_res, dict)
move_res = self.sub_line_id._prepare_account_move_line()
self.assertIsInstance(move_res, dict)

# sale.subscription
self.sub_id.cron_subscription_management()
# invoice should be created by cron
inv_id = self.env["account.move"].search(
[("subscription_id", "=", self.sub_id.id)]
)
self.assertEqual(len(inv_id), 1)
self.sub_id._compute_total()
self.assertEqual(self.sub_id.recurring_total, 27.95)
self.assertEqual(self.sub_id.amount_total, 30.75)
self.sub_id._compute_name()
self.sub_id._compute_rule_boundary()
self.sub_id._compute_terms()
self.sub_id._onchange_template_id()
self.assertEqual(
self.sub_id.recurring_next_date,
fields.Date.today() + relativedelta(months=2),
)
sale_order = self.sub_id.create_sale_order()
self.assertTrue(sale_order)
move_id = self.sub_id.create_invoice()
self.assertTrue(move_id)
res = self.sub_id.manual_invoice()
self.assertEqual(res["type"], "ir.actions.act_window")
inv_ids = self.env["account.move"].search(
[("subscription_id", "=", self.sub_id.id)]
)
self.assertEqual(len(inv_ids), 3)
self.assertEqual(sum(inv_ids.mapped("amount_total")), 3 * 30.75)
res = self.sub_id._compute_account_invoice_ids_count()
self.assertEqual(self.sub_id.account_invoice_ids_count, 3)
res = self.sub_id.action_view_account_invoice_ids()
self.assertEqual(res["type"], "ir.actions.act_window")
self.sub_id._compute_sale_order_ids_count()
self.assertEqual(self.sub_id.sale_order_ids_count, 1)
res = self.sub_id.action_view_sale_order_ids()
self.assertIn(str(self.sub_id.sale_order_ids.id), str(res["domain"]))
self.sub_id.calculate_recurring_next_date(fields.Datetime.now())
self.assertEqual(
self.sub_id.recurring_next_date,
fields.Date.today() + relativedelta(months=1),
)
self.sub_id.partner_id = self.partner_2
self.sub_id.onchange_partner_id()
self.assertEqual(
self.sub_id.pricelist_id.id, self.partner_2.property_product_pricelist.id
)
self.sub_id.onchange_partner_id_fpos()
self.assertFalse(self.sub_id.fiscal_position_id)
res = self.sub_id.action_close_subscription()
self.assertEqual(res["type"], "ir.actions.act_window")

# sale.subscription.stage
self.stage_id._check_lot_product() # should not raise

# sale.subscription.template
self.tmpl_id._compute_subscription_count()
self.assertEqual(self.tmpl_id.subscription_count, 1)
subs_res = self.tmpl_id.action_view_subscription_ids()
self.assertIn(str(self.sub_id.id), str(subs_res["domain"]))
prod_res = self.tmpl_id.action_view_product_ids()
self.assertIn(str(self.tmpl_id.product_ids.ids), str(prod_res["domain"]))
res = self.tmpl_id._get_date(fields.Datetime.now())
self.assertEqual(res.date(), fields.Date.today() + relativedelta(months=1))
self.tmpl_id._compute_product_ids_count()
self.assertEqual(self.tmpl_id.product_ids_count, 2)

# partner
self.partner._compute_subscription_count()
self.assertEqual(self.partner.subscription_count, 0)
self.partner_2._compute_subscription_count()
self.assertEqual(self.partner_2.subscription_count, 1)
partner_act = self.partner_2.action_view_subscription_ids()
self.assertIn(str(self.sub_id.id), str(partner_act["domain"]))

0 comments on commit ee35f1c

Please sign in to comment.