From 5dd15f18d6a106e99ef59cb6b2a7e4d32592fc0b Mon Sep 17 00:00:00 2001 From: "Alexandre de Pape (alpa)" Date: Wed, 14 Sep 2022 09:18:31 +0000 Subject: [PATCH] [FIX] website_sale: add test for cart popover This commit adds a tour that checks if the cart popover works correctly. task_id=2964010 closes odoo/odoo#99583 Signed-off-by: William Braeckman (wbr) --- .../static/src/js/website_sale.js | 8 ++-- .../tests/tours/website_sale_cart_popover.js | 39 +++++++++++++++++++ addons/website_sale/tests/__init__.py | 1 + .../tests/test_website_sale_cart_popover.py | 12 ++++++ 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 addons/website_sale/static/tests/tours/website_sale_cart_popover.js create mode 100644 addons/website_sale/tests/test_website_sale_cart_popover.py diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index a4b9293a306..a79076fb0ef 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -65,11 +65,12 @@ publicWidget.registry.websiteSaleCartLink = publicWidget.Widget.extend({ * @param {Event} ev */ _onMouseEnter: function (ev) { - var self = this; + let self = this; + self.hovered = true; clearTimeout(timeout); $(this.selector).not(ev.currentTarget).popover('hide'); timeout = setTimeout(function () { - if (!self.$el.is(':hover') || $('.mycart-popover:visible').length) { + if (!self.hovered || $('.mycart-popover:visible').length) { return; } self._popoverRPC = $.get("/shop/cart", { @@ -93,7 +94,8 @@ publicWidget.registry.websiteSaleCartLink = publicWidget.Widget.extend({ * @param {Event} ev */ _onMouseLeave: function (ev) { - var self = this; + let self = this; + self.hovered = false; setTimeout(function () { if ($('.popover:hover').length) { return; diff --git a/addons/website_sale/static/tests/tours/website_sale_cart_popover.js b/addons/website_sale/static/tests/tours/website_sale_cart_popover.js new file mode 100644 index 00000000000..b17e66eb62d --- /dev/null +++ b/addons/website_sale/static/tests/tours/website_sale_cart_popover.js @@ -0,0 +1,39 @@ +/** @odoo-module **/ + +import tour from 'web_tour.tour'; +import wTourUtils from 'website.tour_utils'; + +tour.register('website_sale_cart_popover_tour', { + test: true, + url: '/shop/chair-floor-protection-29', + }, + [ + wTourUtils.clickOnElement('Add to Cart', '#product_detail form[action^="/shop/cart/update"] #add_to_cart'), + { + content: "hover on cart popover", + trigger: '#top_menu a[href$="/shop/cart"]', + run: () => { + $('#top_menu a[href$="/shop/cart"]').mouseenter(); + }, + }, + { + content: "check that popover is visible", + trigger: '.mycart-popover:visible', + run: () => {}, + }, + // Trigger mouseleave to close the popover + { + content: "hover on cart popover", + trigger: '#top_menu a[href$="/shop/cart"]', + run: () => { + $('#top_menu a[href$="/shop/cart"]').mouseleave(); + }, + }, + // Check that popover is not visible + { + content: "check that popover is not visible", + trigger: ':not(.mycart-popover:visible)', + run: () => {}, + }, + ] +); diff --git a/addons/website_sale/tests/__init__.py b/addons/website_sale/tests/__init__.py index 699be578b07..8f35f53e0c6 100644 --- a/addons/website_sale/tests/__init__.py +++ b/addons/website_sale/tests/__init__.py @@ -7,6 +7,7 @@ from . import test_sale_process from . import test_sitemap from . import test_website_sale_add_to_cart_snippet from . import test_website_sale_cart_abandoned +from . import test_website_sale_cart_popover from . import test_website_sale_cart_recovery from . import test_website_sale_cart from . import test_website_sale_mail diff --git a/addons/website_sale/tests/test_website_sale_cart_popover.py b/addons/website_sale/tests/test_website_sale_cart_popover.py new file mode 100644 index 00000000000..e5d96bed745 --- /dev/null +++ b/addons/website_sale/tests/test_website_sale_cart_popover.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import tagged +from odoo.tests.common import HttpCase + + +@tagged('post_install', '-at_install') +class TestWebsiteSaleCartPopover(HttpCase): + + def test_website_sale_cart_popover(self): + self.start_tour("/", 'website_sale_cart_popover_tour', login="admin")