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, })