import ConceptRelationModel from "../ConceptRelationModel";

import { conceptDetail } from "../__mock__/relation_with_props_and_tf_data";
import ConceptDetailModel from "../ConceptDetailModel";

describe("conceptRelationModel", () => {
  it("should be able to create an empty ConceptRelationModel object", () => {
    const conceptRelation = new ConceptRelationModel();

    expect(conceptRelation).toBeInstanceOf(ConceptRelationModel);
  });

  it("can have a complete relation", () => {
    expect(conceptDetail).toBeInstanceOf(ConceptDetailModel);

    expect(conceptDetail.relationsCollection.size).toBe(1);

    const relation = conceptDetail.relationsCollection.first;
    expect(relation).toBeInstanceOf(ConceptRelationModel);

    expect(relation.type).toBe("requires");
    expect(relation.key).toBe("requires");
    expect(relation.label).toBe("requires");
    expect(relation.direction).toBe("outgoing");
    expect(relation.condition).toBe("A > B");

    expect(relation.textfragments).toEqual([
      {
        type: "RelationTF",
        textFragments: [
          {
            "application-message": {
              key: "Concept1_requires_Concept2.TimeVersion1",
              "resolved-message": "sdfasfd",
            },
          },
        ],
      },
    ]);
    expect(relation.properties).toEqual([
      {
        type: "RelationProp",
        value: "Relation Prop val",
      },
    ]);

    expect(relation.concept.key).toBe("Concept2");
    expect(relation.concept.label).toBe("Concept 2");
    expect(relation.concept.selflink.href.path).toBe(
      "/concepts/Test project 2/Model 2.bixml/Concept2",
    );
  });
});
