1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/website_sale_subscription/tests/test_website_sale_subscription.py
2024-12-10 09:04:09 +07:00

90 lines
4.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import tagged
from odoo.addons.website.tools import MockRequest
from odoo.exceptions import UserError
from .common import TestWebsiteSaleSubscriptionCommon
@tagged('post_install', '-at_install')
class TestWebsiteSaleSubscription(TestWebsiteSaleSubscriptionCommon):
def test_cart_update_so_reccurence(self):
self.env['product.pricelist'].sudo().search([('active', '=', True)]).action_archive()
# Product not recurring
product = self.env['product.template'].with_context(website_id=self.current_website.id).create({
'name': 'Streaming SUB Weekly',
'list_price': 15,
'type': 'service',
})
so = self.env['sale.order'].create({
'partner_id': self.partner.id,
})
# Mocking to check if error raised on Website when adding
# 2 subscription product with different recurrence
with MockRequest(self.env, website=self.current_website, sale_order_id=so.id):
so = self.current_website.sale_get_order()
self.assertFalse(so.plan_id)
so._cart_update(product_id=product.product_variant_ids.id, add_qty=1)
self.assertFalse(so.plan_id)
so._cart_update(product_id=self.sub_product.product_variant_ids.id, add_qty=1)
self.assertEqual(so.plan_id, self.plan_week)
with self.assertRaises(UserError, msg="You can't add a subscription product to a sale order with another recurrence."):
so._cart_update(product_id=self.sub_product_2.product_variant_ids.id, add_qty=1)
so._cart_update(product_id=self.sub_product.product_variant_ids.id, add_qty=None, set_qty=0)
self.assertFalse(so.plan_id)
so._cart_update(product_id=self.sub_product_2.product_variant_ids.id, add_qty=1)
self.assertEqual(so.plan_id, self.plan_month)
so._cart_update(product_id=self.sub_product_2.product_variant_ids.id, add_qty=None, set_qty=0)
self.assertFalse(so.plan_id)
def test_combination_info_product(self):
self.sub_product = self.sub_product.with_context(website_id=self.current_website.id)
with MockRequest(self.env, website=self.current_website):
combination_info = self.sub_product._get_combination_info()
self.assertEqual(combination_info['price'], 5)
self.assertTrue(combination_info['is_subscription'])
self.assertEqual(combination_info['subscription_duration'], 1)
self.assertEqual(combination_info['subscription_unit'], 'week')
def test_combination_info_variant_products(self):
with MockRequest(self.env, website=self.current_website):
combination_info = self.sub_with_variants.product_variant_ids[0]._get_combination_info_variant()
self.assertEqual(combination_info['price'], 10)
self.assertTrue(combination_info['is_subscription'])
self.assertEqual(combination_info['subscription_duration'], 1)
self.assertEqual(combination_info['subscription_unit'], 'week')
combination_info_variant_2 = self.sub_with_variants.product_variant_ids[-1]._get_combination_info_variant()
self.assertEqual(combination_info_variant_2['price'], 25)
self.assertTrue(combination_info_variant_2['is_subscription'])
self.assertEqual(combination_info_variant_2['subscription_duration'], 1)
self.assertEqual(combination_info_variant_2['subscription_unit'], 'month')
def test_product_variants_different_recurrences(self):
"""
Check that a product can be added to the cart if any of its variants have
a plan matching the SO plan.
"""
so = self.env['sale.order'].create({
'partner_id': self.partner.id,
})
with MockRequest(self.env, website=self.current_website):
so._cart_update(product_id=self.sub_with_variants.product_variant_ids[-1].id, add_qty=1)
self.assertTrue(self.sub_with_variants._website_can_be_added())
def test_combination_info_multi_pricelist(self):
product = self.sub_product_3.with_context(website_id=self.current_website.id)
with MockRequest(self.env, website=self.current_website, website_sale_current_pl=self.pricelist_111.id):
combination_info = product._get_combination_info(only_template=True)
self.assertEqual(combination_info['price'], 111)
self.current_website.invalidate_recordset(['pricelist_id'])
with MockRequest(self.env, website=self.current_website, website_sale_current_pl=self.pricelist_222.id):
combination_info = product._get_combination_info(only_template=True)
self.assertEqual(combination_info['price'], 222)