import { convertToBool, differenceProps, isIterable, parsePackageName, pieHash, removeEmptyProperties, singleLevelFlatten, } from "../lib/util"; describe("Util tests", () => { beforeAll(async () => {}); it("test isIterable", async () => { expect(isIterable([])).toBe(true); expect(isIterable({})).toBe(false); }); it("test convertToBool", async () => { expect(convertToBool("true")).toBe(true); expect(convertToBool("yes")).toBe(true); expect(convertToBool("y")).toBe(true); expect(convertToBool("1")).toBe(true); expect(convertToBool("foo")).toBe(false); expect(convertToBool("false")).toBe(false); }); it("test differenceProps", async () => { expect( differenceProps( { foo: "something", baz: "else", zip: "zeus", }, ["foo", "bar"] ) ).toMatchObject(["baz", "zip"]); }); it("test removeEmptyProperties", async () => { expect(removeEmptyProperties({ foo: null })).toMatchObject({}); expect(removeEmptyProperties({ foo: { bar: null, baz: "something" } })).toMatchObject({ foo: { baz: "something" }, }); expect(removeEmptyProperties({ foo: { bar: null } })).toMatchObject({}); expect(removeEmptyProperties({ foo: [{ bar: "something", baz: null }] })).toMatchObject({ foo: [{ bar: "something" }], }); expect(removeEmptyProperties([{ bar: "something", baz: null }])).toMatchObject([{ bar: "something" }]); expect( removeEmptyProperties({ collections_id_all: ["8a80808163605df901636562699b22cd"], pies_some: [null], }) ).toMatchObject({ collections_id_all: ["8a80808163605df901636562699b22cd"], }); }); it("test pie hash", async () => { // took some values from the pits admin app expect(pieHash(["@pie-element/match@2.3.2"])).toBe("1079843781"); expect(pieHash(["@pie-element/rubric@1.1.4", "@pie-element/extended-text-entry@4.0.8"])).toBe("2737035669"); expect(pieHash(["@pie-element/extended-text-entry@4.0.8", "@pie-element/rubric@1.1.4"])).toBe("2737035669"); expect( pieHash([ "@pie-element/calculator@2.6.11-next.285", "@pie-element/categorize@4.0.2-next.77", "@pie-element/ebsr@2.1.1-next.77", "@pie-element/extended-text-entry@4.0.3-next.77", "@pie-element/hotspot@2.0.2-next.77", "@pie-element/inline-choice@2.5.12-next.77", "@pie-element/match@2.2.1-next.77", "@pie-element/drag-in-the-blank@1.0.2-next.1363", "@pie-element/explicit-constructed-response@1.0.2-next.1363", "@pie-element/inline-dropdown@1.2.2-next.285", "@pie-element/match-list@1.2.6-next.77", "@pie-element/math-inline@2.1.3-next.77", "@pie-element/multiple-choice@3.1.2-next.77", "@pie-element/number-line@4.1.3-next.77", "@pie-element/placement-ordering@5.1.2-next.77", "@pie-element/protractor@2.3.5-next.701", "@pie-element/ruler@3.4.11-next.285", "@pie-element/select-text@4.1.2-next.77", "@pie-element/text-entry@3.6.2-next.214", ]) ).toBe("1959355877"); }); it("parse npm package names", async () => { let input = "@pie-element/multiple-choice@latest"; let parsed = parsePackageName(input); expect(parsed).toMatchObject({ name: "@pie-element/multiple-choice", path: "", version: "latest", }); input = "@pie-element/ebsr@latest"; parsed = parsePackageName(input); expect(parsed).toMatchObject({ name: "@pie-element/ebsr", path: "", version: "latest", }); }); it("test single level flatten property names", async () => { expect(singleLevelFlatten({ p1: "foo", p2: "bar" })).toMatchObject({ p1: "foo", p2: "bar", }); expect(singleLevelFlatten({ level1: { p1: "foo", p2: "bar" } })).toMatchObject({ level1_p1: "foo", level1_p2: "bar", }); expect(singleLevelFlatten({ level1: { level2: { p1: "foo", p2: "bar" } } })).toMatchObject({ level1_level2: { p1: "foo", p2: "bar" }, }); expect( singleLevelFlatten({ bundle: { hash: "123", status: "completed", }, }) ).toMatchObject({ bundle_hash: "123", bundle_status: "completed", }); }); });