79 lines
3.2 KiB
Python
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)
|