import ConceptIndexModel from "../ConceptIndexModel";

import { conceptIndex } from "../__mock__/conceptindex";

describe("conceptIndexModel", () => {
  it("should be able to create an empty ConceptIndexModel object", () => {
    const emptyConceptIndex = new ConceptIndexModel();

    expect(emptyConceptIndex).toBeInstanceOf(ConceptIndexModel);
    expect(emptyConceptIndex.type).toBe("ConceptIndex");
  });

  it("should be able to create a ConceptIndexModel from concept search resposne", () => {
    expect(conceptIndex).toBeInstanceOf(ConceptIndexModel);

    expect(conceptIndex.label).toBe("Concept search");
    expect(conceptIndex.selfhref.toString()).toBe(
      "/concepts?entryDate=2024-10-21",
    );

    expect(conceptIndex.indexfilter.label).toBe("Index");
    expect(conceptIndex.searchtermfilter.label).toBe("Label");
    expect(conceptIndex.modelCategoryFilter.label).toBe("Model category");

    expect(conceptIndex.items.size).toBe(7);

    const firstItem = conceptIndex.items.first;
    expect(firstItem.label).toBe(
      "Capture compliance artifacts in customer case",
    );
    expect(firstItem.selfhref.toString()).toBe(
      "/concepts/bundle-com.beinformed.models.FSDemoBusinessDesign/High%20level%20requirements/Architectural%20significant%20requirements.beimodel.json/CaptureComplianceArtifactsInCustomerCase?entryDate=2024-10-21",
    );
    expect(firstItem.conceptTypeLink.href.toString()).toBe(
      "/concepttypes/bundle-com.beinformed.fs.demo.metamodels/High%20level%20requirements.bixml/ArchitecturalSignificantRequirement",
    );

    const conceptIndexAttribute = conceptIndex.indexfilter?.attribute;
    expect(conceptIndexAttribute.label).toBe("Index");
    expect(conceptIndexAttribute.options.size).toBe(27);
  });
});
