summaryrefslogtreecommitdiffstats
path: root/toolkit/components/shopping/test/browser/browser_shopping_integration.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /toolkit/components/shopping/test/browser/browser_shopping_integration.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/shopping/test/browser/browser_shopping_integration.js')
-rw-r--r--toolkit/components/shopping/test/browser/browser_shopping_integration.js277
1 files changed, 277 insertions, 0 deletions
diff --git a/toolkit/components/shopping/test/browser/browser_shopping_integration.js b/toolkit/components/shopping/test/browser/browser_shopping_integration.js
new file mode 100644
index 0000000000..d16b021eb3
--- /dev/null
+++ b/toolkit/components/shopping/test/browser/browser_shopping_integration.js
@@ -0,0 +1,277 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_sidebar_navigation() {
+ // Disable OHTTP for now to get this landed; we'll re-enable with proper
+ // mocking in the near future.
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["toolkit.shopping.ohttpRelayURL", ""],
+ ["toolkit.shopping.ohttpConfigURL", ""],
+ ],
+ });
+ await BrowserTestUtils.withNewTab(PRODUCT_TEST_URL, async browser => {
+ let sidebar = gBrowser.getPanel(browser).querySelector("shopping-sidebar");
+ Assert.ok(sidebar, "Sidebar should exist");
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+ info("Waiting for sidebar to update.");
+ await promiseSidebarUpdated(sidebar, PRODUCT_TEST_URL);
+ info("Verifying product info for initial product.");
+ await verifyProductInfo(sidebar, {
+ productURL: PRODUCT_TEST_URL,
+ adjustedRating: "4.1",
+ letterGrade: "B",
+ });
+
+ // Navigate the browser from the parent:
+ let loadedPromise = Promise.all([
+ BrowserTestUtils.browserLoaded(browser, false, OTHER_PRODUCT_TEST_URL),
+ promiseSidebarUpdated(sidebar, OTHER_PRODUCT_TEST_URL),
+ ]);
+ BrowserTestUtils.startLoadingURIString(browser, OTHER_PRODUCT_TEST_URL);
+ info("Loading another product.");
+ await loadedPromise;
+ Assert.ok(sidebar, "Sidebar should exist.");
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+ info("Verifying another product.");
+ await verifyProductInfo(sidebar, {
+ productURL: OTHER_PRODUCT_TEST_URL,
+ adjustedRating: "1",
+ letterGrade: "F",
+ });
+
+ // Navigate to a non-product URL:
+ loadedPromise = BrowserTestUtils.browserLoaded(
+ browser,
+ false,
+ "https://example.com/1"
+ );
+ BrowserTestUtils.startLoadingURIString(browser, "https://example.com/1");
+ info("Go to a non-product.");
+ await loadedPromise;
+ Assert.ok(BrowserTestUtils.isHidden(sidebar));
+
+ // Navigate using pushState:
+ loadedPromise = BrowserTestUtils.waitForLocationChange(
+ gBrowser,
+ PRODUCT_TEST_URL
+ );
+ info("Navigate to the first product using pushState.");
+ await SpecialPowers.spawn(browser, [PRODUCT_TEST_URL], urlToUse => {
+ content.history.pushState({}, null, urlToUse);
+ });
+ info("Waiting to load first product again.");
+ await loadedPromise;
+ info("Waiting for the sidebar to have updated.");
+ await promiseSidebarUpdated(sidebar, PRODUCT_TEST_URL);
+ Assert.ok(sidebar, "Sidebar should exist");
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+
+ info("Waiting to verify the first product a second time.");
+ await verifyProductInfo(sidebar, {
+ productURL: PRODUCT_TEST_URL,
+ adjustedRating: "4.1",
+ letterGrade: "B",
+ });
+
+ // Navigate to a product URL with query params:
+ loadedPromise = BrowserTestUtils.browserLoaded(
+ browser,
+ false,
+ PRODUCT_TEST_URL + "?th=1"
+ );
+ // Navigate to the same product, but with a th=1 added.
+ BrowserTestUtils.startLoadingURIString(browser, PRODUCT_TEST_URL + "?th=1");
+ // When just comparing URLs product info would be cleared out,
+ // but when comparing the parsed product ids, we do nothing as the product
+ // has not changed.
+ info("Verifying product has not changed before load.");
+ await verifyProductInfo(sidebar, {
+ productURL: PRODUCT_TEST_URL,
+ adjustedRating: "4.1",
+ letterGrade: "B",
+ });
+ // Wait for the page to load, but don't wait for the sidebar to update so
+ // we can be sure we still have the previous product info.
+ await loadedPromise;
+ info("Verifying product has not changed after load.");
+ await verifyProductInfo(sidebar, {
+ productURL: PRODUCT_TEST_URL,
+ adjustedRating: "4.1",
+ letterGrade: "B",
+ });
+ });
+});
+
+add_task(async function test_button_visible_when_opted_out() {
+ await BrowserTestUtils.withNewTab(
+ {
+ url: PRODUCT_TEST_URL,
+ gBrowser,
+ },
+ async browser => {
+ let shoppingBrowser = gBrowser.ownerDocument.querySelector(
+ "browser.shopping-sidebar"
+ );
+
+ let shoppingButton = document.getElementById("shopping-sidebar-button");
+
+ ok(
+ BrowserTestUtils.isVisible(shoppingButton),
+ "Shopping Button should be visible on a product page"
+ );
+
+ let sidebar = gBrowser
+ .getPanel(browser)
+ .querySelector("shopping-sidebar");
+ Assert.ok(sidebar, "Sidebar should exist");
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+ info("Waiting for sidebar to update.");
+ await promiseSidebarUpdated(sidebar, PRODUCT_TEST_URL);
+
+ await SpecialPowers.spawn(shoppingBrowser, [], async () => {
+ let shoppingContainer =
+ content.document.querySelector("shopping-container").wrappedJSObject;
+ await shoppingContainer.updateComplete;
+ let shoppingSettings = shoppingContainer.settingsEl;
+ await shoppingSettings.updateComplete;
+
+ shoppingSettings.shoppingCardEl.detailsEl.open = true;
+ let optOutButton = shoppingSettings.optOutButtonEl;
+ optOutButton.click();
+ });
+
+ await BrowserTestUtils.waitForMutationCondition(
+ shoppingButton,
+ { attributes: false, attributeFilter: ["shoppingsidebaropen"] },
+ () => shoppingButton.getAttribute("shoppingsidebaropen")
+ );
+
+ ok(
+ !Services.prefs.getBoolPref("browser.shopping.experience2023.active"),
+ "Shopping sidebar is no longer active"
+ );
+ is(
+ Services.prefs.getIntPref("browser.shopping.experience2023.optedIn"),
+ 2,
+ "Opted out of shopping experience"
+ );
+
+ ok(
+ BrowserTestUtils.isVisible(shoppingButton),
+ "Shopping Button should be visible after opting out"
+ );
+
+ Services.prefs.setBoolPref(
+ "browser.shopping.experience2023.active",
+ true
+ );
+ Services.prefs.setIntPref("browser.shopping.experience2023.optedIn", 1);
+ }
+ );
+});
+
+add_task(async function test_sidebar_button_open_close() {
+ // Disable OHTTP for now to get this landed; we'll re-enable with proper
+ // mocking in the near future.
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["toolkit.shopping.ohttpRelayURL", ""],
+ ["toolkit.shopping.ohttpConfigURL", ""],
+ ],
+ });
+ await BrowserTestUtils.withNewTab(PRODUCT_TEST_URL, async browser => {
+ let sidebar = gBrowser.getPanel(browser).querySelector("shopping-sidebar");
+ Assert.ok(sidebar, "Sidebar should exist");
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+ let shoppingButton = document.getElementById("shopping-sidebar-button");
+ ok(
+ BrowserTestUtils.isVisible(shoppingButton),
+ "Shopping Button should be visible on a product page"
+ );
+
+ info("Waiting for sidebar to update.");
+ await promiseSidebarUpdated(sidebar, PRODUCT_TEST_URL);
+
+ info("Verifying product info for initial product.");
+ await verifyProductInfo(sidebar, {
+ productURL: PRODUCT_TEST_URL,
+ adjustedRating: "4.1",
+ letterGrade: "B",
+ });
+
+ // close the sidebar
+ shoppingButton.click();
+ ok(BrowserTestUtils.isHidden(sidebar), "Sidebar should be hidden");
+
+ // reopen the sidebar
+ shoppingButton.click();
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+
+ info("Waiting for sidebar to update.");
+ await promiseSidebarUpdated(sidebar, PRODUCT_TEST_URL);
+
+ info("Verifying product info for has not changed.");
+ await verifyProductInfo(sidebar, {
+ productURL: PRODUCT_TEST_URL,
+ adjustedRating: "4.1",
+ letterGrade: "B",
+ });
+ });
+});
+
+add_task(async function test_no_reliability_available() {
+ Services.fog.testResetFOG();
+ await Services.fog.testFlushAllChildren();
+ // Disable OHTTP for now to get this landed; we'll re-enable with proper
+ // mocking in the near future.
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["toolkit.shopping.ohttpRelayURL", ""],
+ ["toolkit.shopping.ohttpConfigURL", ""],
+ ],
+ });
+ await BrowserTestUtils.withNewTab(NEEDS_ANALYSIS_TEST_URL, async browser => {
+ let sidebar = gBrowser.getPanel(browser).querySelector("shopping-sidebar");
+
+ Assert.ok(sidebar, "Sidebar should exist");
+
+ Assert.ok(
+ BrowserTestUtils.isVisible(sidebar),
+ "Sidebar should be visible."
+ );
+ info("Waiting for sidebar to update.");
+ await promiseSidebarUpdated(sidebar, NEEDS_ANALYSIS_TEST_URL);
+ });
+
+ await Services.fog.testFlushAllChildren();
+ var sawPageEvents =
+ Glean.shopping.surfaceNoReviewReliabilityAvailable.testGetValue();
+
+ Assert.equal(sawPageEvents.length, 1);
+ Assert.equal(sawPageEvents[0].category, "shopping");
+ Assert.equal(
+ sawPageEvents[0].name,
+ "surface_no_review_reliability_available"
+ );
+});