From 6c460595f9266f4fe1cfd35ac01b6f4b6668487a Mon Sep 17 00:00:00 2001 From: Eugene Molotov Date: Wed, 30 Jul 2025 10:51:21 +0500 Subject: [PATCH 1/2] =?UTF-8?q?[IMP]=20portal=5Fevent=5Ftickets:=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20tour=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BC=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B8=D0=BB?= =?UTF-8?q?=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- portal_event_tickets/__manifest__.py | 2 +- .../static/src/js/ticket_upgrade.tour.esm.js | 33 ++++++++++++ .../tests/test_ticket_upgrade.py | 54 +++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js create mode 100644 portal_event_tickets/tests/test_ticket_upgrade.py 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..1931d29 --- /dev/null +++ b/portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js @@ -0,0 +1,33 @@ +/** @odoo-module **/ + +import {registry} from "@web/core/registry"; + +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: "#changeTicketModal 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(0)", + run: "text 1", + }, + ], +}); 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..83688eb --- /dev/null +++ b/portal_event_tickets/tests/test_ticket_upgrade.py @@ -0,0 +1,54 @@ +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" + ) From bcf1978cfe08e3fc412c4d42ac61e884f1449220 Mon Sep 17 00:00:00 2001 From: Eugene Molotov Date: Wed, 30 Jul 2025 17:37:40 +0500 Subject: [PATCH 2/2] =?UTF-8?q?fixup!=20[IMP]=20portal=5Fevent=5Ftickets:?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20tour=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=81=D0=BC=D0=B5=D0=BD=D1=8B=20=D0=B1=D0=B8?= =?UTF-8?q?=D0=BB=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/src/js/ticket_upgrade.tour.esm.js | 29 +++++++++++++++++-- .../tests/test_ticket_upgrade.py | 13 ++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) 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 index 1931d29..79dcefc 100644 --- a/portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js +++ b/portal_event_tickets/static/src/js/ticket_upgrade.tour.esm.js @@ -1,6 +1,7 @@ /** @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, @@ -16,7 +17,7 @@ registry.category("web_tour.tours").add("portal_event_tickets.ticket_upgrade_tou }, { content: "Confirm upgrade", - trigger: "#changeTicketModal button[type=submit]", + trigger: ".modal-dialog button[type=submit]", }, { content: "Open the register modal", @@ -26,8 +27,32 @@ registry.category("web_tour.tours").add("portal_event_tickets.ticket_upgrade_tou content: "Select 1 unit of `VIP` ticket type", extra_trigger: '#wrap:not(:has(a[href*="/event"]:contains("Conference for Architects")))', - trigger: "select:eq(0)", + 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 index 83688eb..192cba5 100644 --- a/portal_event_tickets/tests/test_ticket_upgrade.py +++ b/portal_event_tickets/tests/test_ticket_upgrade.py @@ -50,5 +50,16 @@ def test_ticket_upgrade(self): self.assertEqual(len(reg), 1, "Unexpected behavior") self.start_tour( - "/my/tickets", "portal_event_tickets.ticket_upgrade_tour", login="portal" + "/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")