import { normalizeProgressValue } from "../utils";

describe("normalizeProgressValue", () => {
  const DEFAULT_VALUE = 0;

  describe("valid numbers", () => {
    it("convert it to numbers", () => {
      const inputs = [0, 0.5, 1];

      inputs.forEach((input) => {
        const output = normalizeProgressValue(DEFAULT_VALUE, input);

        expect(output).toBe(input);
      });

      expect.assertions(inputs.length);
    });

    it("convert string 0.5 to 0.5", () => {
      const input = "0.5";

      const output = normalizeProgressValue(DEFAULT_VALUE, input);

      expect(output).toBe(0.5);
    });

    it("convert 0.99 to 0.99", () => {
      const input = 0.99;

      const output = normalizeProgressValue(DEFAULT_VALUE, input);

      expect(output).toBe(0.99);
    });

    it("convert 0.999999999 to 1", () => {
      const input = 0.999999999;

      const output = normalizeProgressValue(DEFAULT_VALUE, input);

      expect(output).toBe(1);
    });

    it("convert 0.06175109281767956 to 0.06", () => {
      const input = 0.06175109281767956;

      const output = normalizeProgressValue(DEFAULT_VALUE, input);

      expect(output).toBe(0.06);
    });

    it("convert -1 to 0", () => {
      const input = -1;

      const output = normalizeProgressValue(DEFAULT_VALUE, input);

      expect(output).toBe(0);
    });

    it("convert 2 to 1", () => {
      const input = 2;

      const output = normalizeProgressValue(DEFAULT_VALUE, input);

      expect(output).toBe(1);
    });
  });

  describe("invalid numbers", () => {
    it("convert it to zero", () => {
      const inputs = [NaN, "vfdnkvnfjk", null, undefined, {}, [], [0]];

      inputs.forEach((input) => {
        const output = normalizeProgressValue(DEFAULT_VALUE, input);

        expect(output).toBe(DEFAULT_VALUE);
      });

      expect.assertions(inputs.length);
    });
  });
});
