diff --git a/portal_event_tickets/__manifest__.py b/portal_event_tickets/__manifest__.py index d3ebccd..65320a1 100644 --- a/portal_event_tickets/__manifest__.py +++ b/portal_event_tickets/__manifest__.py @@ -27,7 +27,7 @@ "/portal_event_tickets/static/src/js/portal.esm.js", ], "web.assets_tests": [ - "/portal_event_tickets/static/src/js/ticket_transfer.tour.esm.js", + "/portal_event_tickets/static/src/js/*.tour.esm.js", ], }, "qweb": [], diff --git a/portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js b/portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js new file mode 100644 index 0000000..79dcefc --- /dev/null +++ b/portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js @@ -0,0 +1,58 @@ +/** @odoo-module **/ + +import {registry} from "@web/core/registry"; +import wsTourUtils from "@website_sale/js/tours/tour_utils"; + +registry.category("web_tour.tours").add("portal_event_tickets.ticket_upgrade_tour", { + test: true, + url: "/my/tickets", + steps: () => [ + { + content: "Choose first ticket", + trigger: "a.ticket-id", + }, + { + content: "Click on upgrade ticket", + trigger: "a:contains('Upgrade / Change ticket')", + }, + { + content: "Confirm upgrade", + trigger: ".modal-dialog button[type=submit]", + }, + { + content: "Open the register modal", + trigger: 'button:contains("Register")', + }, + { + content: "Select 1 unit of `VIP` ticket type", + extra_trigger: + '#wrap:not(:has(a[href*="/event"]:contains("Conference for Architects")))', + trigger: "select:eq(1)", + run: "text 1", + }, + { + content: "Click on `Order Now` button", + extra_trigger: "select:eq(1):has(option:contains(1):propSelected)", + trigger: '.btn-primary:contains("Register")', + }, + { + content: "Fill attendees details", + trigger: 'form[id="attendee_registration"] .btn[type=submit]', + run: function () { + if ($("input[name*='1-email']").val()) { + // Website_event_attendee_fields automatically filled in data + return; + } + $("input[name*='1-name']").val("Att1"); + $("input[name*='1-phone']").val("111 111"); + $("input[name*='1-email']").val("att1@example.com"); + }, + }, + { + content: "Validate attendees details", + extra_trigger: "input[name*='1-name']", + trigger: "button[type=submit]", + }, + wsTourUtils.goToCart({quantity: 2}), + ], +}); diff --git a/portal_event_tickets/tests/test_ticket_upgrade.py b/portal_event_tickets/tests/test_ticket_upgrade.py new file mode 100644 index 0000000..192cba5 --- /dev/null +++ b/portal_event_tickets/tests/test_ticket_upgrade.py @@ -0,0 +1,65 @@ +from datetime import timedelta + +from odoo.fields import Datetime +from odoo.tests.common import tagged + +from odoo.addons.base.tests.common import HttpCaseWithUserPortal +from odoo.addons.website_event_sale.tests.common import TestWebsiteEventSaleCommon + + +@tagged("-at_install", "post_install") +class TestTicketUpgrade(TestWebsiteEventSaleCommon, HttpCaseWithUserPortal): + def setUp(self): + super().setUp() + + self.ticket_vip = self.env["event.event.ticket"].create( + { + "name": "VIP", + "event_id": self.event_2.id, + "product_id": self.env.ref("event_sale.product_product_event").id, + "end_sale_datetime": (Datetime.today() + timedelta(90)).strftime( + "%Y-%m-%d" + ), + "price": 1500.0, + } + ) + + def test_ticket_upgrade(self): + q = self.env["sale.order"].create( + { + "company_id": self.env.company.id, + "partner_id": self.partner_portal.id, + "pricelist_id": self.pricelist.id, + "order_line": [ + ( + 0, + 0, + { + "product_id": self.product_event.id, + "event_id": self.event_2.id, + "event_ticket_id": self.ticket_2.id, + }, + ) + ], + } + ) + + q.action_confirm() + + reg = q.order_line.registration_ids + self.assertEqual(len(reg), 1, "Unexpected behavior") + + self.start_tour( + "/my/tickets", + "portal_event_tickets.ticket_upgrade_tour", + login="portal", + step_delay=500, + ) + + q = self.env["sale.order"].search([], order="id DESC", limit=1) + q.action_confirm() + + new_reg = q.order_line.registration_ids + self.assertEqual(len(new_reg), 1, "Unexpected behavior") + self.assertEqual(reg.state, "cancel") + self.assertEqual(new_reg.state, "open")