Files
enterprise-addons/pos_enterprise_sms_whatsapp/tests/test_frontend.py
T

112 lines
6.3 KiB
Python

from odoo import Command
from odoo.addons.pos_enterprise.tests.test_frontend import TestPreparationDisplayHttpCommon
from odoo.addons.pos_restaurant.tests import test_frontend
from odoo.addons.sms.tests.common import SMSCase
from odoo.addons.whatsapp.tests.common import WhatsAppCase
import odoo.tests
@odoo.tests.tagged('post_install', '-at_install')
class TestPDisCommunication(test_frontend.TestFrontendCommon, TestPreparationDisplayHttpCommon, SMSCase, WhatsAppCase):
def setUp(self):
super().setUp()
self.preset_dine_in = self.env['pos.preset'].create({
'name': 'Dine in',
'available_in_self': True,
'service_at': 'table',
})
self.preset_takeaway = self.env['pos.preset'].create({
'name': 'Takeaway',
'available_in_self': True,
'service_at': 'counter',
'identification': 'name',
})
self.pos_config.write({
'self_ordering_mode': 'mobile',
'use_presets': True,
'default_preset_id': self.preset_takeaway.id,
'available_preset_ids': [(6, 0, [self.preset_takeaway.id, self.preset_dine_in.id])],
})
def test_sms_received_pdis(self):
self.pdis.write({
'pos_config_ids': [(4, self.pos_config.id)],
'sms_enabled': True,
'whatsapp_enabled': True,
'category_ids': [Command.set(self.env['pos.category'].search([]).ids)],
})
self.pos_config.printer_ids.unlink()
self.pos_config.with_user(self.pos_user).open_ui()
self.pos_config.current_session_id.set_opening_control(0, "")
self_route = self.pos_config._get_self_order_route()
self.start_tour(self_route, "takeaway_order_with_phone")
order = self.env['pos.order'].search([('partner_id.phone', '=', '+32455667788')], limit=1)
self.assertTrue(order, "The self-order should create an order linked to the provided phone number.")
expected_number = order.partner_id._phone_format(number=order.partner_id.phone) or order.partner_id.phone
sms_messages = self.env['sms.sms'].search([
('number', '=', expected_number)
])
self.assertTrue(sms_messages, "A SMS should be sent to the customer's phone number.")
pdis_order = self.env['pos.prep.order'].search([('pos_order_id', '=', order.id)], limit=1)
penultimate_stage = self.pdis.stage_ids[-2]
pdis_states = self.env['pos.prep.state'].search([('prep_line_id', 'in', pdis_order.prep_line_ids.ids)])
pdis_states.sudo().change_state_stage({str(state.id): penultimate_stage.id for state in pdis_states}, self.pdis.id)
sms_order_received_template = self.env.ref('pos_enterprise_sms_whatsapp.sms_template_order_received_confirmation_pos')
sms_order_ready_template = self.env.ref('pos_enterprise_sms_whatsapp.sms_template_order_ready_pos')
sms_order_received_body = sms_order_received_template._render_field('body', [order.id], compute_lang=True)[order.id]
sms_order_ready_body = sms_order_ready_template._render_field('body', [order.id], compute_lang=True)[order.id]
sms_received_message = self.env['sms.sms'].search([('number', '=', expected_number)]).filtered(lambda sms: sms.body == sms_order_received_body)
self._new_sms = sms_received_message
self.assertSMS(order.partner_id, expected_number, sms_received_message.state, fields_values={'body': sms_order_received_body})
sms_ready_message = self.env['sms.sms'].search([('number', '=', expected_number)]).filtered(lambda sms: sms.body == sms_order_ready_body)
self._new_sms = sms_ready_message
self.assertSMS(order.partner_id, expected_number, sms_ready_message.state, fields_values={'body': sms_order_ready_body})
def test_whatsapp_received_pdis(self):
self.pdis.write({
'pos_config_ids': [(4, self.pos_config.id)],
'sms_enabled': True,
'whatsapp_enabled': True,
'category_ids': [Command.set(self.env['pos.category'].search([]).ids)],
})
self.pos_config.printer_ids.unlink()
self.pos_config.with_user(self.pos_user).open_ui()
self.pos_config.current_session_id.set_opening_control(0, "")
self_route = self.pos_config._get_self_order_route()
self.start_tour(self_route, "takeaway_order_with_phone")
order = self.env['pos.order'].search([('partner_id.phone', '=', '+32455667788')], limit=1)
self.assertTrue(order, "The self-order should create an order linked to the provided phone number.")
whatsapp_messages = self.env['whatsapp.message'].sudo().search([
('mobile_number', '=', order.partner_id.phone)
])
self.assertTrue(whatsapp_messages, "A WhatsApp message should be sent to the customer's phone number.")
pdis_order = self.env['pos.prep.order'].search([('pos_order_id', '=', order.id)], limit=1)
penultimate_stage = self.pdis.stage_ids[-2]
pdis_states = self.env['pos.prep.state'].search([('prep_line_id', 'in', pdis_order.prep_line_ids.ids)])
pdis_states.sudo().change_state_stage({str(state.id): penultimate_stage.id for state in pdis_states}, self.pdis.id)
whatsapp_order_received_template = self.env.ref('pos_enterprise_sms_whatsapp.whatsapp_order_received_confirmation_pos')
whatsapp_order_ready_template = self.env.ref('pos_enterprise_sms_whatsapp.whatsapp_order_ready_confirmation_pos')
whatsapp_received_message = self.env['whatsapp.message'].sudo().search([('mobile_number', '=', order.partner_id.phone)]).filtered(lambda msg: msg.wa_template_id == whatsapp_order_received_template)
self._new_wa_msg = whatsapp_received_message
self.assertWAMessageFromNumber(order.partner_id.phone, status=whatsapp_received_message.state, fields_values={
'wa_template_id': whatsapp_order_received_template,
})
whatsapp_ready_message = self.env['whatsapp.message'].sudo().search([('mobile_number', '=', order.partner_id.phone)]).filtered(lambda msg: msg.wa_template_id == whatsapp_order_ready_template)
self._new_wa_msg = whatsapp_ready_message
self.assertWAMessageFromNumber(order.partner_id.phone, status=whatsapp_ready_message.state, fields_values={
'wa_template_id': whatsapp_order_ready_template,
})