import NumberBoundaryConstraint from "../NumberBoundaryConstraint";

describe("numberBoundaryConstraint", () => {
  it("retrieves correct id", () => {
    expect(new NumberBoundaryConstraint().id).toBe(
      "Constraint.Number.NoBoundaryConstraint",
    );
    expect(new NumberBoundaryConstraint(1, 1).id).toBe(
      "Constraint.Number.InexactNumber",
    );
    expect(new NumberBoundaryConstraint(1, 100).id).toBe(
      "Constraint.Number.OutOfRange",
    );
    expect(new NumberBoundaryConstraint(1).id).toBe(
      "Constraint.Number.BelowMinimum",
    );
    expect(new NumberBoundaryConstraint(null, 100).id).toBe(
      "Constraint.Number.AboveMaximum",
    );
  });

  it("numberBoundaryConstraint checks", () => {
    const betweenConstraint = new NumberBoundaryConstraint(
      1,
      1000,
      ".",
      ",",
      "##.00",
    );

    expect(betweenConstraint.hasValidation()).toBe(true);

    expect(betweenConstraint.isExactNumber(1)).toBeTruthy();
    expect(betweenConstraint.isExactNumber(2)).toBeFalsy();

    expect(betweenConstraint.isSameOrAboveMinNumber(-1)).toBeFalsy();
    expect(betweenConstraint.isSameOrAboveMinNumber(1)).toBeTruthy();
    expect(betweenConstraint.isSameOrAboveMinNumber(2)).toBeTruthy();

    expect(betweenConstraint.isSameOrBelowMaxNumber(1001)).toBeFalsy();
    expect(betweenConstraint.isSameOrBelowMaxNumber(1000)).toBeTruthy();
    expect(betweenConstraint.isSameOrBelowMaxNumber(999)).toBeTruthy();

    expect(betweenConstraint.isBetweenNumbers(500)).toBeTruthy();
  });
});
