import { relatedConcepts } from "../__mock__/related_concepts";
import ConceptIndexModel from "../ConceptIndexModel";

describe("Related concepts", () => {
  it("Should be able to create a relatedConceptsModel from RelatedConcepts json", () => {
    expect(relatedConcepts).toBeInstanceOf(ConceptIndexModel);

    expect(relatedConcepts.label).toBe("Related concepts of content");

    expect(relatedConcepts.label).toBe("Related concepts of content");
    expect(relatedConcepts.selfhref.toString()).toBe(
      "/content/bundle-com.beinformed.source.Highlevelrequirements/ResearchGrant/High%20level%20requirements.formalsource/relatedConcepts?entryDate=2025-06-04",
    );

    expect(relatedConcepts.entryDate).toBe("2025-06-04");
    expect(relatedConcepts.modelCategoryFilter.label).toBe("Model category");

    expect(relatedConcepts.items.size).toBe(116);

    const firstItem = relatedConcepts.items.first;
    expect(firstItem.key).toBe(
      "SystemMustSendAutomatedNotificationsForStatusChanges",
    );
    expect(firstItem.label).toBe(
      "System must send automated notifications for status changes.",
    );
    expect(firstItem.modelCategory).toBe("Requirements");
    expect(firstItem.selfhref.toString()).toBe(
      "/concepts/bundle-com.beinformed.frames.ResearchGrantRequirements/frames.beimodel.json/SystemMustSendAutomatedNotificationsForStatusChanges?entryDate=2025-06-04",
    );
    expect(firstItem.conceptTypeLink.href.toString()).toBe(
      "/concepttypes/bundle-com.beinformed.research.grant.metamodels/High%20level%20requirements.bixml/ArchitecturalSignificantRequirement",
    );

    expect(firstItem.sectionId).toBe("AutomatedNotifications_Requirement");
    expect(firstItem.fragment).toBeUndefined();

    const secondItem = relatedConcepts.items.get(1);

    expect(secondItem.key).toBe(
      "n74UsersHaveMaximumFlexibilityWithinPolicyConstraints",
    );
    expect(secondItem.label).toBe(
      "Users have maximum flexibility within policy constraints",
    );

    expect(secondItem.modelCategory).toBe("Requirements");

    expect(secondItem.sectionId).toBe(
      "MaximumFlexibilityWithinPolicyConstraints",
    );
    expect(secondItem.fragment.text).toBe(
      "<p>Users have maximum flexibility within policy constraints</p>",
    );
    expect(secondItem.fragment.startOffset).toBe(0);
    expect(secondItem.fragment.endOffset).toBe(56);
  });
});
