/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const lazy = {};

ChromeUtils.defineESModuleGetters(lazy, {
  ExtensionTestUtils:
    "resource://testing-common/ExtensionXPCShellUtils.sys.mjs",
});

add_setup(async function () {
  let server = useHttpServer();
  server.registerContentType("sjs", "sjs");

  SearchTestUtils.setRemoteSettingsConfig([
    {
      identifier: "default",
      base: {
        urls: {
          search: {
            base: "https://example.com/unchanged",
            searchTermParamName: "q",
          },
        },
      },
    },
  ]);
  await SearchTestUtils.initXPCShellAddonManager();
});

add_task(async function test_install_duplicate_engine_startup() {
  let name = "default";
  consoleAllowList.push("#loadStartupEngines failed for");
  // Do not use SearchTestUtils.installSearchExtension, as we need to manually
  // start the search service after installing the extension.
  let extensionInfo = {
    useAddonManager: "permanent",
    files: {},
    manifest: SearchTestUtils.createEngineManifest({
      name,
      search_url: "https://example.com/plain",
    }),
  };

  let extension = lazy.ExtensionTestUtils.loadExtension(extensionInfo);
  await extension.startup();

  await SearchService.init();

  await AddonTestUtils.waitForSearchProviderStartup(extension);
  let engine = await SearchService.getEngineByName(name);
  let submission = engine.getSubmission("foo");
  Assert.equal(
    submission.uri.spec,
    "https://example.com/unchanged?q=foo",
    "Should have not changed the app provided engine."
  );

  await extension.unload();
});
