|
| 1 | +from datetime import datetime, timedelta |
| 2 | + |
| 3 | +from odoo import Command |
| 4 | +from odoo.tests import tagged |
| 5 | + |
| 6 | +from odoo.addons.website_event_sale.tests.common import TestWebsiteEventSaleCommon |
| 7 | +from odoo.addons.website_sale.tests.test_website_sale_cart_abandoned import ( |
| 8 | + TestWebsiteSaleCartAbandonedCommon, |
| 9 | +) |
| 10 | + |
| 11 | + |
| 12 | +@tagged('post_install', '-at_install') |
| 13 | +class TestWebsiteEventSaleCart(TestWebsiteEventSaleCommon, TestWebsiteSaleCartAbandonedCommon): |
| 14 | + |
| 15 | + @classmethod |
| 16 | + def setUpClass(cls): |
| 17 | + super().setUpClass() |
| 18 | + |
| 19 | + cls.website.write({ |
| 20 | + 'send_abandoned_cart_email': True, |
| 21 | + 'cart_abandoned_delay': 1.0, # 1 hour |
| 22 | + }) |
| 23 | + cls.website.send_abandoned_cart_email_activation_time -= timedelta(weeks=1) |
| 24 | + |
| 25 | + cls.partner_admin = cls.env.ref('base.partner_admin') |
| 26 | + if not cls.partner_admin.email: |
| 27 | + cls.partner_admin.email = 'base@partner.admin' |
| 28 | + |
| 29 | + def test_sold_out_event_cart_reminder(self): |
| 30 | + """Check that abandoned cart emails aren't sent for sold out tickets.""" |
| 31 | + cart1, cart2 = self.env['sale.order'].create([{ |
| 32 | + 'partner_id': partner.id, |
| 33 | + 'website_id': self.website.id, |
| 34 | + 'date_order': datetime.now() - timedelta(hours=2), |
| 35 | + } for partner in (self.partner_admin, self.partner_portal)]) |
| 36 | + |
| 37 | + self.ticket.write({ |
| 38 | + 'seats_limited': True, |
| 39 | + 'seats_max': 1, |
| 40 | + }) |
| 41 | + |
| 42 | + create_order_line = [Command.create({ |
| 43 | + 'product_id': self.product_event.id, |
| 44 | + 'event_id': self.event.id, |
| 45 | + 'event_ticket_id': self.ticket.id, |
| 46 | + })] |
| 47 | + cart1.order_line = create_order_line |
| 48 | + cart2.order_line = create_order_line |
| 49 | + self.assertTrue( |
| 50 | + self.send_mail_patched(cart1.id), |
| 51 | + "Abandoned cart email should be sent for availlable tickets", |
| 52 | + ) |
| 53 | + |
| 54 | + # Create registrations & confirm first order |
| 55 | + editor = self.env['registration.editor'].new() |
| 56 | + editor.with_context(default_sale_order_id=cart1.id).action_make_registration() |
| 57 | + cart1.action_confirm() |
| 58 | + self.assertEqual(self.ticket.seats_available, 0) |
| 59 | + self.assertFalse( |
| 60 | + self.send_mail_patched(cart2.id), |
| 61 | + "Abandoned cart email should not be sent when ticket has no seats available", |
| 62 | + ) |
| 63 | + |
| 64 | + # Reset sent state, increase seat limit, and try again |
| 65 | + cart2.cart_recovery_email_sent = False |
| 66 | + self.ticket.seats_max = 2 |
| 67 | + se
443D
lf.assertTrue( |
| 68 | + self.send_mail_patched(cart2.id), |
| 69 | + "Abandoned cart email can be sent after increasing seat count", |
| 70 | + ) |
0 commit comments