diff --git a/addons/website/static/src/js/tours/tour_utils.js b/addons/website/static/src/js/tours/tour_utils.js
index 3f817b1f2b0..e200eee37e7 100644
--- a/addons/website/static/src/js/tours/tour_utils.js
+++ b/addons/website/static/src/js/tours/tour_utils.js
@@ -170,6 +170,7 @@ function clickOnSnippet(snippet, position = "bottom") {
function clickOnSave(position = "bottom") {
return {
trigger: "button[data-action=save]",
+ in_modal: false,
content: _t("Good job! It's time to Save your work."),
position: position,
};
diff --git a/addons/website_mass_mailing/static/tests/tours/newsletter_popup.js b/addons/website_mass_mailing/static/tests/tours/newsletter_popup.js
new file mode 100644
index 00000000000..aeb732131be
--- /dev/null
+++ b/addons/website_mass_mailing/static/tests/tours/newsletter_popup.js
@@ -0,0 +1,81 @@
+odoo.define("website_mass_mailing.tour.newsletter_popup_edition", function (require) {
+"use strict";
+
+const tour = require('web_tour.tour');
+const wTourUtils = require('website.tour_utils');
+
+tour.register('newsletter_popup_edition', {
+ test: true,
+ url: '/?enable_editor=1',
+}, [
+ wTourUtils.dragNDrop({
+ id: 's_newsletter_subscribe_popup',
+ name: 'Newsletter Popup',
+ }),
+ {
+ content: "Confirm newsletter choice",
+ trigger: '.modal-footer .btn-primary',
+ },
+ {
+ content: "Check the modal is opened for edition",
+ trigger: '.o_newsletter_popup .modal:visible',
+ in_modal: false,
+ run: () => null,
+ },
+ wTourUtils.clickOnSave(),
+ {
+ content: "Check the modal has been saved, closed",
+ trigger: '.o_newsletter_popup',
+ extra_trigger: 'body:not(.editor_enable)',
+ run: function (actions) {
+ const $modal = this.$anchor.find('.modal');
+ if ($modal.is(':visible')) {
+ console.error('Modal is still opened...');
+ }
+ },
+ },
+]);
+});
+
+odoo.define("website_mass_mailing.tour.newsletter_popup_use", function (require) {
+"use strict";
+
+const tour = require('web_tour.tour');
+
+tour.register('newsletter_popup_use', {
+ test: true,
+ url: '/',
+}, [
+ {
+ content: "Check the modal is not yet opened and force it opened",
+ trigger: '.o_newsletter_popup',
+ run: function (actions) {
+ const $modal = this.$anchor.find('.modal');
+ if ($modal.is(':visible')) {
+ console.error('Modal is already opened...');
+ }
+ $(document).trigger('mouseleave');
+ },
+ },
+ {
+ content: "Check the modal is now opened and enter text in the subscribe input",
+ trigger: '.o_newsletter_popup .modal input',
+ in_modal: false,
+ run: 'text hello@world.com',
+ },
+ {
+ content: "Subscribe",
+ trigger: '.modal-dialog .btn-primary',
+ },
+ {
+ content: "Check the modal is now closed",
+ trigger: '.o_newsletter_popup',
+ run: function (actions) {
+ const $modal = this.$anchor.find('.modal');
+ if ($modal.is(':visible')) {
+ console.error('Modal is still opened...');
+ }
+ },
+ }
+]);
+});
diff --git a/addons/website_mass_mailing/tests/__init__.py b/addons/website_mass_mailing/tests/__init__.py
new file mode 100644
index 00000000000..ca21ae19714
--- /dev/null
+++ b/addons/website_mass_mailing/tests/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+from . import test_snippets
diff --git a/addons/website_mass_mailing/tests/test_snippets.py b/addons/website_mass_mailing/tests/test_snippets.py
new file mode 100644
index 00000000000..3461c64eddc
--- /dev/null
+++ b/addons/website_mass_mailing/tests/test_snippets.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import odoo
+import odoo.tests
+
+
+@odoo.tests.common.tagged('post_install', '-at_install')
+class TestSnippets(odoo.tests.HttpCase):
+
+ def test_01_newsletter_popup(self):
+ self.start_tour("/?enable_editor=1", "newsletter_popup_edition", login='admin')
+ self.start_tour("/", "newsletter_popup_use", login=None)
+ mailing_list = self.env['mailing.list'].search([], limit=1)
+ emails = mailing_list.contact_ids.mapped('email')
+ self.assertIn("hello@world.com", emails)
diff --git a/addons/website_mass_mailing/views/website_mass_mailing_templates.xml b/addons/website_mass_mailing/views/website_mass_mailing_templates.xml
index 903d458ba05..54ff6afd2c2 100644
--- a/addons/website_mass_mailing/views/website_mass_mailing_templates.xml
+++ b/addons/website_mass_mailing/views/website_mass_mailing_templates.xml
@@ -18,6 +18,7 @@
+