summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_manualupdates.js')
-rw-r--r--toolkit/mozapps/extensions/test/browser/browser_manualupdates.js246
1 files changed, 246 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_manualupdates.js b/toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
new file mode 100644
index 000000000..0c5eb2da6
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_manualupdates.js
@@ -0,0 +1,246 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Tests manual updates, including the Available Updates pane
+
+var gProvider;
+var gManagerWindow;
+var gCategoryUtilities;
+var gAvailableCategory;
+
+function test() {
+ waitForExplicitFinish();
+
+ gProvider = new MockProvider();
+
+ gProvider.createAddons([{
+ id: "addon1@tests.mozilla.org",
+ name: "auto updating addon",
+ version: "1.0",
+ applyBackgroundUpdates: AddonManager.AUTOUPDATE_ENABLE
+ }]);
+
+ open_manager("addons://list/extension", function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+ run_next_test();
+ });
+}
+
+function end_test() {
+ close_manager(gManagerWindow, function() {
+ finish();
+ });
+}
+
+
+add_test(function() {
+ gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
+ is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should initially be hidden");
+
+ gProvider.createAddons([{
+ id: "addon2@tests.mozilla.org",
+ name: "manually updating addon",
+ version: "1.0",
+ isCompatible: false,
+ blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
+ applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE
+ }]);
+
+ is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should still be hidden");
+
+ run_next_test();
+});
+
+
+add_test(function() {
+ let finished = 0;
+ function maybeRunNext() {
+ if (++finished == 2)
+ run_next_test();
+ }
+
+ gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
+ gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
+ is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible");
+ is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1");
+ maybeRunNext();
+ }, false);
+
+ gCategoryUtilities.openType("extension", function() {
+ gProvider.createInstalls([{
+ name: "manually updating addon (new and improved!)",
+ existingAddon: gProvider.addons[1],
+ version: "1.1",
+ releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null)
+ }]);
+
+ var item = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
+ get_tooltip_info(item).then(({ version }) => {
+ is(version, "1.0", "Should still show the old version in the tooltip");
+ maybeRunNext();
+ });
+ });
+});
+
+
+add_test(function() {
+ wait_for_view_load(gManagerWindow, function() {
+ is(gManagerWindow.document.getElementById("categories").selectedItem.value, "addons://updates/available", "Available Updates category should now be selected");
+ is(gManagerWindow.gViewController.currentViewId, "addons://updates/available", "Available Updates view should be the current view");
+ run_next_test();
+ }, true);
+ EventUtils.synthesizeMouseAtCenter(gAvailableCategory, { }, gManagerWindow);
+});
+
+
+add_test(function() {
+ var list = gManagerWindow.document.getElementById("updates-list");
+ is(list.itemCount, 1, "Should be 1 available update listed");
+ var item = list.firstChild;
+ is(item.mAddon.id, "addon2@tests.mozilla.org", "Update item should be for the manually updating addon");
+
+ // The item in the list will be checking for update information asynchronously
+ // so we have to wait for it to complete. Doing the same async request should
+ // make our callback be called later.
+ AddonManager.getAllInstalls(run_next_test);
+});
+
+add_test(function() {
+ var list = gManagerWindow.document.getElementById("updates-list");
+ var item = list.firstChild;
+ get_tooltip_info(item).then(({ version }) => {
+ is(version, "1.1", "Update item should have version number of the update");
+ var postfix = gManagerWindow.document.getAnonymousElementByAttribute(item, "class", "update-postfix");
+ is_element_visible(postfix, "'Update' postfix should be visible");
+ is_element_visible(item._updateAvailable, "");
+ is_element_visible(item._relNotesToggle, "Release notes toggle should be visible");
+ is_element_hidden(item._warning, "Incompatible warning should be hidden");
+ is_element_hidden(item._error, "Blocklist error should be hidden");
+
+ info("Opening release notes");
+ item.addEventListener("RelNotesToggle", function() {
+ item.removeEventListener("RelNotesToggle", arguments.callee, false);
+ info("Release notes now open");
+
+ is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden");
+ is_element_visible(item._relNotesError, "Release notes error message should be visible");
+ is(item._relNotes.childElementCount, 0, "Release notes should be empty");
+
+ info("Closing release notes");
+ item.addEventListener("RelNotesToggle", function() {
+ item.removeEventListener("RelNotesToggle", arguments.callee, false);
+ info("Release notes now closed");
+ info("Setting Release notes URI to something that should load");
+ gProvider.installs[0].releaseNotesURI = Services.io.newURI(TESTROOT + "releaseNotes.xhtml", null, null)
+
+ info("Re-opening release notes");
+ item.addEventListener("RelNotesToggle", function() {
+ item.removeEventListener("RelNotesToggle", arguments.callee, false);
+ info("Release notes now open");
+
+ is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden");
+ is_element_hidden(item._relNotesError, "Release notes error message should be hidden");
+ isnot(item._relNotes.childElementCount, 0, "Release notes should have been inserted into container");
+ run_next_test();
+
+ }, false);
+ EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
+ is_element_visible(item._relNotesLoading, "Release notes loading message should be visible");
+
+ }, false);
+ EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
+
+ }, false);
+ EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow);
+ is_element_visible(item._relNotesLoading, "Release notes loading message should be visible");
+ });
+});
+
+
+add_test(function() {
+ var badgeUpdated = false;
+ var installCompleted = false;
+
+ gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
+ gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
+ if (installCompleted)
+ run_next_test();
+ else
+ badgeUpdated = true;
+ }, false);
+
+ var list = gManagerWindow.document.getElementById("updates-list");
+ var item = list.firstChild;
+ var updateBtn = item._updateBtn;
+ is_element_visible(updateBtn, "Update button should be visible");
+
+ var install = gProvider.installs[0];
+ var listener = {
+ onInstallStarted: function() {
+ info("Install started");
+ is_element_visible(item._installStatus, "Install progress widget should be visible");
+ },
+ onInstallEnded: function() {
+ install.removeTestListener(this);
+ info("Install ended");
+ is_element_hidden(item._installStatus, "Install progress widget should be hidden");
+
+ if (badgeUpdated)
+ run_next_test();
+ else
+ installCompleted = true;
+ }
+ };
+ install.addTestListener(listener);
+ EventUtils.synthesizeMouseAtCenter(updateBtn, { }, gManagerWindow);
+});
+
+
+add_test(function() {
+ is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should still be visible");
+ is(gAvailableCategory.badgeCount, 0, "Badge for Available Updates should now be 0");
+
+ gCategoryUtilities.openType("extension", function() {
+ is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden");
+
+ close_manager(gManagerWindow, function() {
+ open_manager(null, function(aWindow) {
+ gManagerWindow = aWindow;
+ gCategoryUtilities = new CategoryUtilities(gManagerWindow);
+ gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available");
+
+ is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden");
+
+ run_next_test();
+ });
+ });
+ });
+});
+
+add_test(function() {
+ gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
+ gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
+ is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible");
+ is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1");
+
+ gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() {
+ gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false);
+ is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should now be hidden");
+
+ run_next_test();
+ }, false);
+
+ AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) {
+ aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE;
+ });
+ }, false);
+
+ gProvider.createInstalls([{
+ name: "manually updating addon (new and even more improved!)",
+ existingAddon: gProvider.addons[1],
+ version: "1.2",
+ releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null)
+ }]);
+});