import Search from "../../../src/shared/settings/Search";
import { expect } from "chai";

describe("Search", () => {
  it("returns search settings by valid settings", () => {
    const search = Search.fromJSON({
      default: "google",
      engines: {
        google: "https://google.com/search?q={}",
        yahoo: "https://search.yahoo.com/search?p={}",
      },
    });

    expect(search.defaultEngine).to.equal("google");
    expect(search.engines).to.deep.equals({
      google: "https://google.com/search?q={}",
      yahoo: "https://search.yahoo.com/search?p={}",
    });
    expect(search.toJSON()).to.deep.equal({
      default: "google",
      engines: {
        google: "https://google.com/search?q={}",
        yahoo: "https://search.yahoo.com/search?p={}",
      },
    });
  });

  it("throws a TypeError by invalid settings", () => {
    expect(() =>
      Search.fromJSON({
        default: "wikipedia",
        engines: {
          google: "https://google.com/search?q={}",
          yahoo: "https://search.yahoo.com/search?p={}",
        },
      })
    ).to.throw(TypeError);
    expect(() =>
      Search.fromJSON({
        default: "g o o g l e",
        engines: {
          "g o o g l e": "https://google.com/search?q={}",
        },
      })
    ).to.throw(TypeError);
    expect(() =>
      Search.fromJSON({
        default: "google",
        engines: {
          google: "https://google.com/search",
        },
      })
    ).to.throw(TypeError);
    expect(() =>
      Search.fromJSON({
        default: "google",
        engines: {
          google: "https://google.com/search?q={}&r={}",
        },
      })
    ).to.throw(TypeError);
  });
});