DigitalConsumer.FixMyGlass/src/helpers/object-helper.spec.js
2023-06-09 14:45:04 -04:00

275 lines
8.2 KiB
JavaScript

import { deepClone, deepEqual } from "./object-helper";
describe("object-cloning-helper.js", () => {
describe("deepClone", () => {
it("Should return null if no object is passed in", async () => {
// Arrange
const expected = null;
// Act
const result = deepClone(null);
// Assert
expect(result).toEqual(expected);
});
it("Should return a deep copy of the object", async () => {
// Arrange
const object = {
addressQuestions: {
streetAddress: "555 Some St",
apartmentNumberOrBusinessName: "Apt 1",
city: "Funkytown",
state: "OH",
zipCode: "55555",
},
isVehicleProtected: true,
serviceZipCode: "55555",
};
const expected = {
addressQuestions: {
streetAddress: "555 Some St",
apartmentNumberOrBusinessName: "Apt 1",
city: "Funkytown",
state: "OH",
zipCode: "55555",
},
isVehicleProtected: true,
serviceZipCode: "55555",
};
// Act
const result = deepClone(object);
// Assert
expect(result).toStrictEqual(expected);
});
it("Should return a copy of the array", async () => {
// Arrange
const array = [9, 8, 7, 6, 5, 4, 3, 2, 1];
const expected = [9, 8, 7, 6, 5, 4, 3, 2, 1];
// Act
const result = deepClone(array);
// Assert
expect(result).toStrictEqual(expected);
});
});
describe("deepEqual", () => {
it("Should return false if the items being compared are not the same type", async () => {
// Arrange
const obj1 = ""; // String
const obj2 = 3; // Number
const expected = false;
// Act
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return false if one the items being compared is null", async () => {
// Arrange
const obj1 = {}; // Object
const obj2 = null; // Array
const expected = false;
// Act
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
describe("Both items being compared are arrays", () => {
it("Should return true if the two arrays have the same elements in the same order", async () => {
// Arrange
const obj1 = [1, 2, 3]; // Array
const obj2 = [1, 2, 3]; // Array
const expected = true;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return true if the two arrays have the same elements in a different order", async () => {
// Arrange
const obj1 = [1, 2, 3]; // Array
const obj2 = [3, 1, 2]; // Array
const expected = true;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return false if the two arrays are not the same length", async () => {
// Arrange
const obj1 = [1, 2, 3]; // Array
const obj2 = [1, 2]; // Array
const expected = false;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return false if they have the same elements but their the array elements are different", async () => {
// Arrange
const obj1 = [1, 2, 3]; // Array
const obj2 = [4, 5, 6]; // Array
const expected = false;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
});
describe("Both items being compared are objects", () => {
it("Should return false if the two objects *do not* have the same number of keys", async () => {
// Arrange
const obj1 = {
prop1: {},
}; // Object
const obj2 = {
prop1: {},
prop2: {},
}; // Object
const expected = false;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return true if the two objects have the same keys in the same order", async () => {
// Arrange
const obj1 = {
prop1: {},
prop2: {},
}; // Object
const obj2 = {
prop1: {},
prop2: {},
}; // Object
const expected = true;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return true if the two objects have the same keys in a different order", async () => {
// Arrange
const obj1 = {
prop1: {},
prop2: {},
}; // Object
const obj2 = {
prop2: {},
prop1: {},
}; // Object
const expected = true;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return false if the two objects have the same keys but in a nested object comparison one of the two values is null", async () => {
// Arrange
const obj1 = {
prop1: {
subProp1: {
foo: "",
bar: null,
},
},
prop2: {
subProp1: [1, 2, 3],
},
}; // Object
const obj2 = {
prop1: {},
prop2: {},
}; // Object
const expected = false;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
it("Should return false if the two objects have the same elements but a nested object comparison is of two different types", async () => {
// Arrange
const obj1 = {
prop1: {
subProp1: {
foo: "",
bar: "",
},
},
prop2: {
subProp1: [1, 2, 3],
},
}; // Object
const obj2 = {
prop1: {
subProp1: {
foo: "",
bar: "",
},
},
prop2: {
subProp1: {
foo1: "",
bar1: "",
},
},
}; // Object
const expected = false;
// Acts
const result = deepEqual(obj1, obj2);
// Assert
expect(result).toEqual(expected);
});
});
});
});