import AddonOperatorFactoryChain from "../../../../src/content/operators/impls/AddonOperatorFactoryChain";
import EnableAddonOperator from "../../../../src/content/operators/impls/EnableAddonOperator";
import DisableAddonOperator from "../../../../src/content/operators/impls/DisableAddonOperator";
import ToggleAddonOperator from "../../../../src/content/operators/impls/ToggleAddonOperator";
import * as operations from "../../../../src/shared/operations";
import { expect } from "chai";
import MockAddonIndicatorClient from "../../mock/MockAddonIndicatorClient";
import MockAddonEnabledRepository from "../../mock/MockAddonEnabledRepository";
import MockConsoleFramePresenter from "./MockConsoleFramePresenter";

describe("AddonOperatorFactoryChain", () => {
  describe("#create", () => {
    it("returns an operator", () => {
      const sut = new AddonOperatorFactoryChain(
        new MockAddonIndicatorClient(),
        new MockAddonEnabledRepository(),
        new MockConsoleFramePresenter(false)
      );
      expect(sut.create({ type: operations.ADDON_ENABLE }, 0)).to.be.instanceOf(
        EnableAddonOperator
      );
      expect(
        sut.create({ type: operations.ADDON_DISABLE }, 0)
      ).to.be.instanceOf(DisableAddonOperator);
      expect(
        sut.create({ type: operations.ADDON_TOGGLE_ENABLED }, 0)
      ).to.be.instanceOf(ToggleAddonOperator);
      expect(sut.create({ type: operations.SCROLL_TOP }, 0)).to.be.null;
    });
  });
});