import ModelCatalogModel from "../ModelCatalogModel";
import { IllegalStateException } from "../../../exceptions";

import modelCatalogModel from "../__mock__/modelcatalog";
import LinkModel from "../../links/LinkModel";

describe("modelCatalogModel", () => {
  it("should be able to create an empty ModelCatalogModel object", () => {
    const modelcatalog = new ModelCatalogModel();

    expect(modelcatalog).toBeInstanceOf(ModelCatalogModel);
    expect(modelcatalog.type).toBe("ModelCatalog");
    expect(modelcatalog.label).toBe("Model catalog");

    expect(modelcatalog.modelcategories.isEmpty).toBe(true);

    expect(() => {
      modelcatalog.conceptIndexLink;
    }).toThrow(IllegalStateException);
    expect(() => {
      modelcatalog.contentIndexLink;
    }).toThrow(IllegalStateException);
  });

  it("has a links to concept and content index", () => {
    expect(modelCatalogModel.conceptIndexLink).toBeInstanceOf(LinkModel);
    expect(modelCatalogModel.contentIndexLink).toBeInstanceOf(LinkModel);
  });

  it("has model categories", () => {
    expect(modelCatalogModel.modelcategories.size).toBe(2);
    expect(modelCatalogModel.modelcategories.first.key).toBe("BusinessDesign");
    expect(modelCatalogModel.modelcategories.first.label).toBe(
      "Business design",
    );
    expect(modelCatalogModel.modelcategories.first.description).toBe(
      "The business design includes the 'what' of the solution",
    );
    expect(modelCatalogModel.modelcategories.first.iconSmall).toBe(
      "/resource/Library/General/Icons/business_design_16x16.png",
    );
    expect(modelCatalogModel.modelcategories.first.iconMedium).toBe(
      "/resource/Library/General/Icons/business_design_24x24.png",
    );
    expect(modelCatalogModel.modelcategories.first.iconLarge).toBe(
      "/resource/Library/General/Icons/business_design_48x48.png",
    );
  });
});
