import { isEqual } from "../..";

describe("isEqual - byReference", () => {
  describe("primitive value", () => {
    it("equals", () => {
      const prev = {
        prop_1: 1,
      };

      const next = {
        prop_1: 1,
      };

      const byReference = ["prop_1"];

      expect(isEqual({ byReference })(prev, next)).toBe(true);
    });

    it("not equals", () => {
      const prev = {
        prop_1: 1,
      };

      const next = {
        prop_1: 2,
      };

      const byReference = ["prop_1"];

      expect(isEqual({ byReference })(prev, next)).toBe(false);
    });

    it("not equals", () => {
      const prev = {
        prop_1: 1,
      };

      const next = {
        prop_1: undefined,
      };

      const byReference = ["prop_1"];

      expect(isEqual({ byReference })(prev, next)).toBe(false);
    });
  });

  describe("reference value", () => {
    it("equals", () => {
      const prop_1 = [1, 2, 3];

      const prev = {
        prop_1: prop_1,
      };

      const next = {
        prop_1: prop_1,
      };

      const byReference = ["prop_1"];

      expect(isEqual({ byReference })(prev, next)).toBe(true);
    });

    it("not equals", () => {
      const prev = {
        prop_1: [1, 2, 3],
      };

      const next = {
        prop_1: [1, 2, 3],
      };

      const byReference = ["prop_1"];

      expect(isEqual({ byReference })(prev, next)).toBe(false);
    });

    it("not equals", () => {
      const prev = {
        prop_1: [1, 2, 3],
      };

      const next = {
        prop_1: [1, 2, 4],
      };

      const byReference = ["prop_1"];

      expect(isEqual({ byReference })(prev, next)).toBe(false);
    });

    it("not equals", () => {
      const prop_1 = [1, 2, 3];

      const prev = {
        prop_1,
        prop_2: [3, 2, 1],
      };

      const next = {
        prop_1,
        prop_2: [3, 2, 1],
      };

      const byReference = ["prop_1", "prop_2"];

      expect(isEqual({ byReference })(prev, next)).toBe(false);
    });
  });
});
