Backed out 3 changesets (bug 1579795) for causing devtools node failures. on a CLOSED TREE
authorOana Pop Rus <opoprus@mozilla.com>
Fri, 18 Oct 2019 18:38:49 +0300
changeset 559515 4ad0eb343fac8037f7226c04ad7f1f8a76147426
parent 559514 1ce1b20dcc2015fb6a4a244bb851cafec84bb184
child 559516 2afde003f4b1ff56511fe58226711cdb442df950
push id12177
push usercsabou@mozilla.com
push dateMon, 21 Oct 2019 14:52:16 +0000
treeherdermozilla-beta@1918a9cd33bc [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1579795
milestone71.0a1
backs out141f065f3788268999f07885ccbedb1eb4e74432
eb0eaf505108a97dbf5d464187f90539ca7e2c3c
193f93f381cd99aa98a8f59cd2c83ee1195f1b87
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 3 changesets (bug 1579795) for causing devtools node failures. on a CLOSED TREE Backed out changeset 141f065f3788 (bug 1579795) Backed out changeset eb0eaf505108 (bug 1579795) Backed out changeset 193f93f381cd (bug 1579795)
devtools/client/application/src/actions/manifest.js
devtools/client/application/src/modules/services.js
devtools/client/application/test/components/.eslintrc.js
devtools/client/application/test/components/__snapshots__/components_application_panel-App.test.js.snap
devtools/client/application/test/components/babel.config.js
devtools/client/application/test/components/components_application_panel-App.test.js
devtools/client/application/test/components/fixtures/Chrome.js
devtools/client/application/test/components/fixtures/Services.js
devtools/client/application/test/components/fixtures/data/constants.js
devtools/client/application/test/components/fixtures/fluent-l10n.js
devtools/client/application/test/components/fixtures/stub.js
devtools/client/application/test/components/fixtures/unicode-url.js
devtools/client/application/test/components/helpers/helpers.js
devtools/client/application/test/components/jest.config.js
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-Manifest.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestColorItem.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestEmpty.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestIconItem.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestIssue.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestIssueList.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestItem.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestJsonLink.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestLoader.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestPage.test.js.snap
devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestSection.test.js.snap
devtools/client/application/test/components/manifest/components_application_panel-Manifest.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestColorItem.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestEmpty.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestIconItem.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestIssue.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestIssueList.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestItem.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestJsonLink.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestLoader.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestPage.test.js
devtools/client/application/test/components/manifest/components_application_panel-ManifestSection.test.js
devtools/client/application/test/components/package.json
devtools/client/application/test/components/routing/__snapshots__/components_application_panel-PageSwitcher.test.js.snap
devtools/client/application/test/components/routing/__snapshots__/components_application_panel-Sidebar.test.js.snap
devtools/client/application/test/components/routing/__snapshots__/components_application_panel-SidebarItem.test.js.snap
devtools/client/application/test/components/routing/components_application_panel-PageSwitcher.test.js
devtools/client/application/test/components/routing/components_application_panel-Sidebar.test.js
devtools/client/application/test/components/routing/components_application_panel-SidebarItem.test.js
devtools/client/application/test/components/service-workers/__snapshots__/components_application_panel-WorkerList.test.js.snap
devtools/client/application/test/components/service-workers/__snapshots__/components_application_panel-WorkerListEmpty.test.js.snap
devtools/client/application/test/components/service-workers/__snapshots__/components_application_panel-WorkersPage.test.js.snap
devtools/client/application/test/components/service-workers/components_application_panel-WorkerList.test.js
devtools/client/application/test/components/service-workers/components_application_panel-WorkerListEmpty.test.js
devtools/client/application/test/components/service-workers/components_application_panel-WorkersPage.test.js
devtools/client/application/test/components/setup.js
devtools/client/application/test/components/yarn.lock
devtools/client/application/test/node/.eslintrc.js
devtools/client/application/test/node/actions/actions_application_panel-manifest.test.js
devtools/client/application/test/node/babel.config.js
devtools/client/application/test/node/components/__snapshots__/components_application_panel-App.test.js.snap
devtools/client/application/test/node/components/components_application_panel-App.test.js
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-Manifest.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestColorItem.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestEmpty.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestIconItem.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestIssue.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestIssueList.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestItem.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestJsonLink.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestLoader.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestPage.test.js.snap
devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestSection.test.js.snap
devtools/client/application/test/node/components/manifest/components_application_panel-Manifest.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestColorItem.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestEmpty.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestIconItem.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestIssue.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestIssueList.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestItem.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestJsonLink.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestLoader.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestPage.test.js
devtools/client/application/test/node/components/manifest/components_application_panel-ManifestSection.test.js
devtools/client/application/test/node/components/routing/__snapshots__/components_application_panel-PageSwitcher.test.js.snap
devtools/client/application/test/node/components/routing/__snapshots__/components_application_panel-Sidebar.test.js.snap
devtools/client/application/test/node/components/routing/__snapshots__/components_application_panel-SidebarItem.test.js.snap
devtools/client/application/test/node/components/routing/components_application_panel-PageSwitcher.test.js
devtools/client/application/test/node/components/routing/components_application_panel-Sidebar.test.js
devtools/client/application/test/node/components/routing/components_application_panel-SidebarItem.test.js
devtools/client/application/test/node/components/service-workers/__snapshots__/components_application_panel-WorkerList.test.js.snap
devtools/client/application/test/node/components/service-workers/__snapshots__/components_application_panel-WorkerListEmpty.test.js.snap
devtools/client/application/test/node/components/service-workers/__snapshots__/components_application_panel-WorkersPage.test.js.snap
devtools/client/application/test/node/components/service-workers/components_application_panel-WorkerList.test.js
devtools/client/application/test/node/components/service-workers/components_application_panel-WorkerListEmpty.test.js
devtools/client/application/test/node/components/service-workers/components_application_panel-WorkersPage.test.js
devtools/client/application/test/node/fixtures/Chrome.js
devtools/client/application/test/node/fixtures/Services.js
devtools/client/application/test/node/fixtures/data/constants.js
devtools/client/application/test/node/fixtures/fluent-l10n.js
devtools/client/application/test/node/fixtures/stub.js
devtools/client/application/test/node/fixtures/unicode-url.js
devtools/client/application/test/node/helpers.js
devtools/client/application/test/node/jest.config.js
devtools/client/application/test/node/package.json
devtools/client/application/test/node/setup.js
devtools/client/application/test/node/yarn.lock
devtools/client/bin/devtools-node-test-runner.js
devtools/client/locales/en-US/application.ftl
--- a/devtools/client/application/src/actions/manifest.js
+++ b/devtools/client/application/src/actions/manifest.js
@@ -1,40 +1,30 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
-const { l10n } = require("../modules/l10n");
-
-const { services, ManifestDevToolsError } = require("../modules/services");
+const { services } = require("../modules/services");
 const {
   FETCH_MANIFEST_FAILURE,
   FETCH_MANIFEST_START,
   FETCH_MANIFEST_SUCCESS,
   RESET_MANIFEST,
 } = require("../constants");
 
 function fetchManifest() {
   return async (dispatch, getState) => {
     dispatch({ type: FETCH_MANIFEST_START });
-    try {
-      const manifest = await services.fetchManifest();
-      dispatch({ type: FETCH_MANIFEST_SUCCESS, manifest });
-    } catch (error) {
-      let errorMessage = error.message;
+    const { manifest, errorMessage } = await services.fetchManifest();
 
-      // since Firefox DevTools errors may not make sense for the user, swap
-      // their message for a generic one.
-      if (error instanceof ManifestDevToolsError) {
-        console.error(error);
-        errorMessage = l10n.getString("manifest-loaded-devtools-error");
-      }
-
+    if (!errorMessage) {
+      dispatch({ type: FETCH_MANIFEST_SUCCESS, manifest });
+    } else {
       dispatch({ type: FETCH_MANIFEST_FAILURE, error: errorMessage });
     }
   };
 }
 
 function resetManifest() {
   return { type: RESET_MANIFEST };
 }
--- a/devtools/client/application/src/modules/services.js
+++ b/devtools/client/application/src/modules/services.js
@@ -1,58 +1,34 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
-class ManifestDevToolsError extends Error {
-  constructor(...params) {
-    super(...params);
-
-    this.name = "ManifestDevToolsError";
-  }
-}
-
 class Services {
   init(toolbox) {
     this._toolbox = toolbox;
   }
 
   selectTool(toolId) {
     this._assertInit();
     return this._toolbox.selectTool(toolId);
   }
 
   async fetchManifest() {
-    let response;
+    this._assertInit();
 
-    try {
-      this._assertInit();
-      const manifestFront = await this._toolbox.target.getFront("manifest");
-      response = await manifestFront.fetchCanonicalManifest();
-    } catch (error) {
-      throw new ManifestDevToolsError(
-        error.message,
-        error.fileName,
-        error.lineNumber
-      );
-    }
+    const manifestFront = await this._toolbox.target.getFront("manifest");
+    const response = await manifestFront.fetchCanonicalManifest();
 
-    if (response.errorMessage) {
-      throw new Error(response.errorMessage);
-    }
-
-    return response.manifest;
+    return response;
   }
 
   _assertInit() {
     if (!this._toolbox) {
       throw new Error("Services singleton has not been initialized");
     }
   }
 }
 
-module.exports = {
-  ManifestDevToolsError,
-  // exports a singleton, which will be used across all application panel modules
-  services: new Services(),
-};
+// exports a singleton, which will be used across all application panel modules
+exports.services = new Services();
rename from devtools/client/application/test/node/.eslintrc.js
rename to devtools/client/application/test/components/.eslintrc.js
rename from devtools/client/application/test/node/components/__snapshots__/components_application_panel-App.test.js.snap
rename to devtools/client/application/test/components/__snapshots__/components_application_panel-App.test.js.snap
rename from devtools/client/application/test/node/babel.config.js
rename to devtools/client/application/test/components/babel.config.js
rename from devtools/client/application/test/node/components/components_application_panel-App.test.js
rename to devtools/client/application/test/components/components_application_panel-App.test.js
rename from devtools/client/application/test/node/fixtures/Chrome.js
rename to devtools/client/application/test/components/fixtures/Chrome.js
rename from devtools/client/application/test/node/fixtures/Services.js
rename to devtools/client/application/test/components/fixtures/Services.js
rename from devtools/client/application/test/node/fixtures/data/constants.js
rename to devtools/client/application/test/components/fixtures/data/constants.js
rename from devtools/client/application/test/node/fixtures/fluent-l10n.js
rename to devtools/client/application/test/components/fixtures/fluent-l10n.js
rename from devtools/client/application/test/node/fixtures/stub.js
rename to devtools/client/application/test/components/fixtures/stub.js
rename from devtools/client/application/test/node/fixtures/unicode-url.js
rename to devtools/client/application/test/components/fixtures/unicode-url.js
rename from devtools/client/application/test/node/helpers.js
rename to devtools/client/application/test/components/helpers/helpers.js
rename from devtools/client/application/test/node/jest.config.js
rename to devtools/client/application/test/components/jest.config.js
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-Manifest.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-Manifest.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestColorItem.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestColorItem.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestEmpty.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestEmpty.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestIconItem.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestIconItem.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestIssue.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestIssue.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestIssueList.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestIssueList.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestItem.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestItem.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestJsonLink.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestJsonLink.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestLoader.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestLoader.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestPage.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestPage.test.js.snap
rename from devtools/client/application/test/node/components/manifest/__snapshots__/components_application_panel-ManifestSection.test.js.snap
rename to devtools/client/application/test/components/manifest/__snapshots__/components_application_panel-ManifestSection.test.js.snap
rename from devtools/client/application/test/node/components/manifest/components_application_panel-Manifest.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-Manifest.test.js
--- a/devtools/client/application/test/node/components/manifest/components_application_panel-Manifest.test.js
+++ b/devtools/client/application/test/components/manifest/components_application_panel-Manifest.test.js
@@ -13,17 +13,17 @@ const Manifest = createFactory(
 
 const {
   MANIFEST_COLOR_MEMBERS,
   MANIFEST_ICON_MEMBERS,
   MANIFEST_STRING_MEMBERS,
   MANIFEST_UNKNOWN_TYPE_MEMBERS,
   MANIFEST_NO_ISSUES,
   MANIFEST_WITH_ISSUES,
-} = require("devtools/client/application/test/jest/fixtures/data/constants");
+} = require("../fixtures/data/constants");
 
 /*
  * Test for Manifest component
  */
 
 describe("Manifest", () => {
   it("renders the expected snapshot for a manifest with string members", () => {
     const wrapper = shallow(Manifest(MANIFEST_STRING_MEMBERS));
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestColorItem.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestColorItem.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestEmpty.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestEmpty.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestIconItem.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestIconItem.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestIssue.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestIssue.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestIssueList.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestIssueList.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestItem.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestItem.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestJsonLink.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestJsonLink.test.js
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestLoader.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestLoader.test.js
--- a/devtools/client/application/test/node/components/manifest/components_application_panel-ManifestLoader.test.js
+++ b/devtools/client/application/test/components/manifest/components_application_panel-ManifestLoader.test.js
@@ -2,58 +2,92 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Import libs
 const { shallow } = require("enzyme");
 const { createFactory } = require("react");
 // Import test helpers
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
+const {
+  flushPromises,
+  setupStore,
+} = require("devtools/client/application/test/components/helpers/helpers");
 // Import fixtures
 const {
   MANIFEST_NO_ISSUES,
-} = require("devtools/client/application/test/jest/fixtures/data/constants");
+} = require("devtools/client/application/test/components/fixtures/data/constants");
 
-const manifestActions = require("devtools/client/application/src/actions/manifest");
-// NOTE: we need to spy on the action before we load the component, so it gets
-//       bound to the spy, not the original implementation
-const fetchManifestActionSpy = jest.spyOn(manifestActions, "fetchManifest");
+// Import app modules
+const {
+  services,
+} = require("devtools/client/application/src/modules/services");
+
+const {
+  FETCH_MANIFEST_FAILURE,
+  FETCH_MANIFEST_START,
+  FETCH_MANIFEST_SUCCESS,
+} = require("devtools/client/application/src/constants");
 
 const ManifestLoader = createFactory(
   require("devtools/client/application/src/components/manifest/ManifestLoader")
 );
 
+/**
+ * Test for ManifestPage.js component
+ */
+
 describe("ManifestLoader", () => {
   function buildStore({ manifest, errorMessage, isLoading }) {
     const manifestState = Object.assign(
       {
         manifest: null,
         errorMessage: "",
         isLoading: false,
       },
       { manifest, errorMessage, isLoading }
     );
 
     return setupStore({ manifest: manifestState });
   }
 
-  afterAll(() => {
-    fetchManifestActionSpy.mockRestore();
-  });
-
-  it("loads a manifest when mounted", async () => {
-    fetchManifestActionSpy.mockReturnValue({ type: "foo" });
+  it("loads a manifest when mounted and triggers actions when loading is OK", async () => {
+    const fetchManifestSpy = jest
+      .spyOn(services, "fetchManifest")
+      .mockResolvedValue({ manifest: MANIFEST_NO_ISSUES, errorMessage: "" });
 
     const store = buildStore({});
 
     shallow(ManifestLoader({ store })).dive();
+    await flushPromises();
 
-    expect(manifestActions.fetchManifest).toHaveBeenCalled();
-    fetchManifestActionSpy.mockReset();
+    expect(store.getActions()).toEqual([
+      { type: FETCH_MANIFEST_START },
+      { type: FETCH_MANIFEST_SUCCESS, manifest: MANIFEST_NO_ISSUES },
+    ]);
+
+    fetchManifestSpy.mockRestore();
+  });
+
+  it("loads a manifest when mounted and triggers actions when loading fails", async () => {
+    const fetchManifestSpy = jest
+      .spyOn(services, "fetchManifest")
+      .mockResolvedValue({ manifest: null, errorMessage: "lorem ipsum" });
+
+    const store = buildStore({});
+
+    shallow(ManifestLoader({ store })).dive();
+    await flushPromises();
+
+    expect(store.getActions()).toEqual([
+      { type: FETCH_MANIFEST_START },
+      { type: FETCH_MANIFEST_FAILURE, error: "lorem ipsum" },
+    ]);
+
+    fetchManifestSpy.mockRestore();
   });
 
   it("renders a message when it is loading", async () => {
     const store = buildStore({ isLoading: true });
     const wrapper = shallow(ManifestLoader({ store })).dive();
     expect(wrapper).toMatchSnapshot();
   });
 
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestPage.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestPage.test.js
--- a/devtools/client/application/test/node/components/manifest/components_application_panel-ManifestPage.test.js
+++ b/devtools/client/application/test/components/manifest/components_application_panel-ManifestPage.test.js
@@ -2,20 +2,22 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Import libs
 const { shallow } = require("enzyme");
 const { createFactory } = require("react");
 
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
+const {
+  setupStore,
+} = require("devtools/client/application/test/components/helpers/helpers");
 const {
   MANIFEST_SIMPLE,
-} = require("devtools/client/application/test/jest/fixtures/data/constants");
+} = require("devtools/client/application/test/components/fixtures/data/constants");
 
 const ManifestPage = createFactory(
   require("devtools/client/application/src/components/manifest/ManifestPage")
 );
 
 /**
  * Test for ManifestPage.js component
  */
rename from devtools/client/application/test/node/components/manifest/components_application_panel-ManifestSection.test.js
rename to devtools/client/application/test/components/manifest/components_application_panel-ManifestSection.test.js
rename from devtools/client/application/test/node/package.json
rename to devtools/client/application/test/components/package.json
rename from devtools/client/application/test/node/components/routing/__snapshots__/components_application_panel-PageSwitcher.test.js.snap
rename to devtools/client/application/test/components/routing/__snapshots__/components_application_panel-PageSwitcher.test.js.snap
rename from devtools/client/application/test/node/components/routing/__snapshots__/components_application_panel-Sidebar.test.js.snap
rename to devtools/client/application/test/components/routing/__snapshots__/components_application_panel-Sidebar.test.js.snap
rename from devtools/client/application/test/node/components/routing/__snapshots__/components_application_panel-SidebarItem.test.js.snap
rename to devtools/client/application/test/components/routing/__snapshots__/components_application_panel-SidebarItem.test.js.snap
rename from devtools/client/application/test/node/components/routing/components_application_panel-PageSwitcher.test.js
rename to devtools/client/application/test/components/routing/components_application_panel-PageSwitcher.test.js
--- a/devtools/client/application/test/node/components/routing/components_application_panel-PageSwitcher.test.js
+++ b/devtools/client/application/test/components/routing/components_application_panel-PageSwitcher.test.js
@@ -3,17 +3,19 @@
 
 "use strict";
 
 // Import libs
 const { shallow } = require("enzyme");
 const { createFactory } = require("react");
 
 // Import setupStore with imported & combined reducers
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
+const {
+  setupStore,
+} = require("devtools/client/application/test/components/helpers/helpers");
 
 const PageSwitcher = createFactory(
   require("devtools/client/application/src/components/routing/PageSwitcher")
 );
 
 const { PAGE_TYPES } = require("devtools/client/application/src/constants");
 
 /**
rename from devtools/client/application/test/node/components/routing/components_application_panel-Sidebar.test.js
rename to devtools/client/application/test/components/routing/components_application_panel-Sidebar.test.js
--- a/devtools/client/application/test/node/components/routing/components_application_panel-Sidebar.test.js
+++ b/devtools/client/application/test/components/routing/components_application_panel-Sidebar.test.js
@@ -2,17 +2,19 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Import libs
 const { shallow } = require("enzyme");
 const { createFactory } = require("react");
 
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
+const {
+  setupStore,
+} = require("devtools/client/application/test/components/helpers/helpers");
 
 const { PAGE_TYPES } = require("devtools/client/application/src/constants");
 
 const Sidebar = createFactory(
   require("devtools/client/application/src/components/routing/Sidebar")
 );
 
 /**
rename from devtools/client/application/test/node/components/routing/components_application_panel-SidebarItem.test.js
rename to devtools/client/application/test/components/routing/components_application_panel-SidebarItem.test.js
--- a/devtools/client/application/test/node/components/routing/components_application_panel-SidebarItem.test.js
+++ b/devtools/client/application/test/components/routing/components_application_panel-SidebarItem.test.js
@@ -2,17 +2,19 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Import libs
 const { shallow } = require("enzyme");
 const { createFactory } = require("react");
 
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
+const {
+  setupStore,
+} = require("devtools/client/application/test/components/helpers/helpers");
 
 const { PAGE_TYPES } = require("devtools/client/application/src/constants");
 
 const SidebarItem = createFactory(
   require("devtools/client/application/src/components/routing/SidebarItem")
 );
 
 /**
rename from devtools/client/application/test/node/components/service-workers/__snapshots__/components_application_panel-WorkerList.test.js.snap
rename to devtools/client/application/test/components/service-workers/__snapshots__/components_application_panel-WorkerList.test.js.snap
rename from devtools/client/application/test/node/components/service-workers/__snapshots__/components_application_panel-WorkerListEmpty.test.js.snap
rename to devtools/client/application/test/components/service-workers/__snapshots__/components_application_panel-WorkerListEmpty.test.js.snap
rename from devtools/client/application/test/node/components/service-workers/__snapshots__/components_application_panel-WorkersPage.test.js.snap
rename to devtools/client/application/test/components/service-workers/__snapshots__/components_application_panel-WorkersPage.test.js.snap
rename from devtools/client/application/test/node/components/service-workers/components_application_panel-WorkerList.test.js
rename to devtools/client/application/test/components/service-workers/components_application_panel-WorkerList.test.js
--- a/devtools/client/application/test/node/components/service-workers/components_application_panel-WorkerList.test.js
+++ b/devtools/client/application/test/components/service-workers/components_application_panel-WorkerList.test.js
@@ -6,17 +6,17 @@
 // Import libs
 const { shallow } = require("enzyme");
 const { createFactory } = require("react");
 
 // Import constants
 const {
   SINGLE_WORKER_DEFAULT_DOMAIN_LIST,
   MULTIPLE_WORKER_LIST,
-} = require("devtools/client/application/test/jest/fixtures/data/constants");
+} = require("devtools/client/application/test/components/fixtures/data/constants");
 
 const WorkerList = createFactory(
   require("devtools/client/application/src/components/service-workers/WorkerList")
 );
 
 /**
  * Test for workerList.js component
  */
rename from devtools/client/application/test/node/components/service-workers/components_application_panel-WorkerListEmpty.test.js
rename to devtools/client/application/test/components/service-workers/components_application_panel-WorkerListEmpty.test.js
rename from devtools/client/application/test/node/components/service-workers/components_application_panel-WorkersPage.test.js
rename to devtools/client/application/test/components/service-workers/components_application_panel-WorkersPage.test.js
--- a/devtools/client/application/test/node/components/service-workers/components_application_panel-WorkersPage.test.js
+++ b/devtools/client/application/test/components/service-workers/components_application_panel-WorkersPage.test.js
@@ -9,20 +9,22 @@ const { createFactory } = require("react
 
 // Import fixtures
 const {
   EMPTY_WORKER_LIST,
   SINGLE_WORKER_DEFAULT_DOMAIN_LIST,
   SINGLE_WORKER_DIFFERENT_DOMAIN_LIST,
   MULTIPLE_WORKER_LIST,
   MULTIPLE_WORKER_MIXED_DOMAINS_LIST,
-} = require("devtools/client/application/test/jest/fixtures/data/constants");
+} = require("devtools/client/application/test/components/fixtures/data/constants");
 
 // Import setupStore with imported & combined reducers
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
+const {
+  setupStore,
+} = require("devtools/client/application/test/components/helpers/helpers");
 
 // Import component
 const WorkersPage = createFactory(
   require("devtools/client/application/src/components/service-workers/WorkersPage")
 );
 
 /**
  * Test for App.js component
rename from devtools/client/application/test/node/setup.js
rename to devtools/client/application/test/components/setup.js
rename from devtools/client/application/test/node/yarn.lock
rename to devtools/client/application/test/components/yarn.lock
deleted file mode 100644
--- a/devtools/client/application/test/node/actions/actions_application_panel-manifest.test.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const {
-  MANIFEST_NO_ISSUES,
-} = require("devtools/client/application/test/jest/fixtures/data/constants");
-
-const { setupStore } = require("devtools/client/application/test/jest/helpers");
-
-const {
-  ManifestDevToolsError,
-  services,
-} = require("devtools/client/application/src/modules/services");
-
-const {
-  FETCH_MANIFEST_FAILURE,
-  FETCH_MANIFEST_START,
-  FETCH_MANIFEST_SUCCESS,
-} = require("devtools/client/application/src/constants");
-
-const {
-  fetchManifest,
-} = require("devtools/client/application/src/actions/manifest");
-
-describe("Manifest actions: fetchManifest", () => {
-  it("dispatches a START - SUCCESS sequence when fetching is OK", async () => {
-    const fetchManifestSpy = jest
-      .spyOn(services, "fetchManifest")
-      .mockResolvedValue(MANIFEST_NO_ISSUES);
-
-    const store = setupStore({});
-    await store.dispatch(fetchManifest());
-
-    expect(store.getActions()).toEqual([
-      { type: FETCH_MANIFEST_START },
-      { type: FETCH_MANIFEST_SUCCESS, manifest: MANIFEST_NO_ISSUES },
-    ]);
-
-    fetchManifestSpy.mockRestore();
-  });
-
-  it("dispatches a START - FAILURE sequence when fetching fails", async () => {
-    const fetchManifestSpy = jest
-      .spyOn(services, "fetchManifest")
-      .mockRejectedValue(new Error("lorem ipsum"));
-
-    const store = setupStore({});
-    await store.dispatch(fetchManifest());
-
-    expect(store.getActions()).toEqual([
-      { type: FETCH_MANIFEST_START },
-      { type: FETCH_MANIFEST_FAILURE, error: "lorem ipsum" },
-    ]);
-
-    fetchManifestSpy.mockRestore();
-  });
-
-  it("dispatches a START - FAILURE sequence when fetching fails due to a devtools error", async () => {
-    const error = new ManifestDevToolsError(":(");
-    const fetchManifestSpy = jest
-      .spyOn(services, "fetchManifest")
-      .mockRejectedValue(error);
-    const consoleErrorSpy = jest
-      .spyOn(console, "error")
-      .mockImplementation(() => {});
-
-    const store = setupStore({});
-    await store.dispatch(fetchManifest());
-
-    expect(store.getActions()).toEqual([
-      { type: FETCH_MANIFEST_START },
-      { type: FETCH_MANIFEST_FAILURE, error: "manifest-loaded-devtools-error" },
-    ]);
-    expect(consoleErrorSpy).toHaveBeenCalledWith(error);
-
-    fetchManifestSpy.mockRestore();
-    consoleErrorSpy.mockRestore();
-  });
-});
--- a/devtools/client/bin/devtools-node-test-runner.js
+++ b/devtools/client/bin/devtools-node-test-runner.js
@@ -29,17 +29,17 @@ const SUITES = {
     path: "../aboutdebugging/test/node",
     type: TEST_TYPES.JEST,
   },
   accessibility: {
     path: "../accessibility/test/node",
     type: TEST_TYPES.JEST,
   },
   application: {
-    path: "../application/test/node",
+    path: "../application/test/components",
     type: TEST_TYPES.JEST,
   },
   compatibility: {
     path: "../inspector/compatibility/test/node",
     type: TEST_TYPES.JEST,
   },
   framework: {
     path: "../framework/test/node",
--- a/devtools/client/locales/en-US/application.ftl
+++ b/devtools/client/locales/en-US/application.ftl
@@ -100,24 +100,19 @@ manifest-item-presentation = Presentatio
 manifest-item-icons = Icons
 
 # Text displayed while we are loading the manifest file
 manifest-loading = Loading manifest…
 
 # Text displayed when the manifest has been successfully loaded
 manifest-loaded-ok = Manifest loaded.
 
-# Text displayed as a caption when there has been an error while trying to
-# load the manifest
+# Text displayed when there has been an error while trying to load the manifest
 manifest-loaded-error = There was an error while loading the manifest:
 
-# Text displayed as an error when there has been a Firefox DevTools error while
-# trying to load the manifest
-manifest-loaded-devtools-error = Firefox DevTools error
-
 # Text displayed when the page has no manifest available
 manifest-non-existing = No manifest found to inspect.
 
 # Text displayed when the page has a manifest embedded in a Data URL and
 # thus we cannot link to it.
 manifest-json-link-data-url = The manifest is embedded in a Data URL.
 
 # Text displayed at manifest icons to label their purpose, as declared