import { isEqual, isObject } from "../src/utils";

describe("isEqual", () => {
  it("return true if data are the same", () => {
    expect(isEqual(null, null)).toBeTruthy();
    expect(isEqual(undefined, undefined)).toBeTruthy();
    expect(isEqual("hello", "hello")).toBeTruthy();
    expect(isEqual(57, 57)).toBeTruthy();
    expect(isEqual(["hello", "world"], ["hello", "world"])).toBeTruthy();
    expect(
      isEqual(
        [
          { name: "joe", age: 99 },
          { name: "nina", age: 23 },
        ],
        [
          { name: "joe", age: 99 },
          { name: "nina", age: 23 },
        ]
      )
    ).toBeTruthy();
  });
  it("return false if data are different", () => {
    expect(isEqual(null, "hello")).toBeFalsy();
    expect(isEqual("hello", undefined)).toBeFalsy();
    expect(isEqual("hello", "howdy")).toBeFalsy();
    expect(isEqual(57, 51)).toBeFalsy();
    expect(isEqual(["hello", "world"], ["howdy", "world"])).toBeFalsy();
    expect(
      isEqual(
        [
          { name: "joe", age: 99 },
          { name: "nina", age: 23 },
        ],
        [
          { name: "joe", age: 98 },
          { name: "nina", age: 23 },
        ]
      )
    ).toBeFalsy();
    expect(isEqual(["psg"], ["psg", "nantes"])).toBeFalsy();
  });
});

describe("isObject", () => {
  it("return true if the value has nested values", () => {
    expect(isObject({ name: "joe" })).toBeTruthy();
    expect(isObject({ user: { name: "joe" } })).toBeTruthy();
  });
  it("return false if the value doesn't have nested values", () => {
    expect(isObject("joe")).toBeFalsy();
    expect(isObject(56)).toBeFalsy();
    expect(isObject(true)).toBeFalsy();
    expect(isObject(null)).toBeFalsy();
    expect(isObject(undefined)).toBeFalsy();
    expect(isObject(["hello", "world"])).toBeFalsy();
  });
});