import werkzeug.urls

from odoo.tests.common import users
from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon


class TestMailingListSms(MassSMSCommon):

    @users('user_marketing')
    def test_controller_unsubscribe(self):
        """ Test unsubscribe controller from a phone number, including phone
        formatting and validation """
        partner = self.env['res.partner'].create({
            'name': 'Test Partner',
            'phone': '+91 1234657890',
        })

        mailing = self.env['mailing.mailing'].create({
            'name': 'TestMailing',
            'body_plaintext': 'Coucou hibou',
            'mailing_type': 'sms',
            'mailing_model_id': self.env['ir.model']._get_id('res.partner'),
            'mailing_domain': [('id', '=', partner.id)],
            'subject': 'Test',
            'sms_allow_unsubscribe': True,
        })
        mailing.action_send_sms()

        trace = mailing.mailing_trace_ids.filtered(lambda t: t.res_id == partner.id)
        self.assertTrue(trace, 'Trace not found for the partner')

        unsubscribe_url = werkzeug.urls.url_join(mailing.get_base_url(), f'/sms/{mailing.id}/unsubscribe/{trace.sms_code}')
        response = self.opener.get(url=unsubscribe_url, data={'sms_number': trace.sms_number})

        self.assertEqual(response.status_code, 200)
        self.assertTrue(partner.phone_blacklisted, 'Partner not unsubscribed')
