odoo18/addons/sale_loyalty/tests/test_buy_gift_card.py

79 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command
from odoo.addons.sale_loyalty.tests.common import TestSaleCouponCommon
from odoo.tests.common import tagged
@tagged('-at_install', 'post_install')
class TestBuyGiftCard(TestSaleCouponCommon):
def test_buying_gift_card(self):
order = self.empty_order
self.immediate_promotion_program.active = False
order.write({'order_line': [
(0, False, {
'product_id': self.product_A.id,
'name': 'Ordinary Product A',
'product_uom': self.uom_unit.id,
'product_uom_qty': 1.0,
}),
(0, False, {
'product_id': self.product_gift_card.id,
'name': 'Gift Card Product',
'product_uom': self.uom_unit.id,
'product_uom_qty': 1.0,
})
]})
self.assertEqual(len(order.order_line.ids), 2)
self.assertEqual(len(order._get_reward_coupons()), 0)
order._update_programs_and_rewards()
self.assertEqual(len(order._get_reward_coupons()), 1)
order.order_line[1].product_uom_qty = 2
order._update_programs_and_rewards()
self.assertEqual(len(order._get_reward_coupons()), 2)
order.order_line[1].product_uom_qty = 1
order._update_programs_and_rewards()
self.assertEqual(len(order._get_reward_coupons()), 1)
def test_gift_card_email_sender(self):
"""Ensure that sending gift card emails have a sender.
Either the order's salesman if available, otherwise the order's company.
"""
mail_template = self.env['mail.template'].create({
'name': "Gift Card Mail",
'model_id': self.env.ref('loyalty.model_loyalty_card').id,
'auto_delete': False,
})
self.program_gift_card.communication_plan_ids = [Command.create({
'trigger': 'create',
'mail_template_id': mail_template.id,
})]
order = self.empty_order
salesman = order.user_id.partner_id.ensure_one()
salesman.email = "sales@company.co"
company = order.company_id.partner_id
company.email = "noreply@company.co"
order.write({
'order_line': [Command.create({'product_id': self.product_gift_card.id})],
})
order._update_programs_and_rewards()
# Create an order without salesman to test company-based fallback
orders = order + order.copy({'user_id': None})
# Clear out the mailbox before sending mail
self.env['mail.mail'].search([]).sudo().unlink()
# Confirm order as Public User to trigger loyalty mail
public_user = self.env.ref('base.public_user')
orders.with_user(public_user).with_company(order.company_id).sudo().action_confirm()
mails = self.env['mail.mail'].search([])
self.assertEqual(len(mails), 2)
salesman_mail = mails.filtered(lambda m: m.author_id == salesman).ensure_one()
company_mail = mails.filtered(lambda m: m.author_id == company).ensure_one()
self.assertEqual(salesman_mail.email_from, salesman.email_formatted)
self.assertEqual(company_mail.email_from, company.email_formatted)