import { createFilters, createFindByIdUrl } from "../jsonApiUtils"; describe("jsonApiUtils", () => { it("should create filters", () => { const str = createFilters({ username: "jc", resource: "user", }); expect(str).toEqual("filter[user][username][equals]=jc"); }); it("should support like searches", () => { const str = createFilters({ username: { like: "jc" }, resource: "user", }); expect(str).toEqual("filter[user][username][like]=jc"); }); it("should support custom searches", () => { const str = createFilters({ username: { has_ancestor: 362228, }, resource: "user", }); expect(str).toEqual("filter[user][username][has_ancestor]=362228"); }); it("should support object queries", () => { const str = createFilters({ resource: "user", foo: { bar: "baz", }, }); expect(str).toEqual("filter[user][foo][bar]=baz"); }); it('should encode query strings', () => { const str = createFilters({ resource: "user", foo: "Tours & Sightseeing", }); expect(str).toEqual("filter[user][foo][equals]=Tours%20%26%20Sightseeing"); }); it('should leave previously encoded query strings encoded', () => { const str = createFilters({ resource: "user", foo: "Tours%20%26%20Sightseeing", }); expect(str).toEqual("filter[user][foo][equals]=Tours%20%26%20Sightseeing"); }); it('should encode object query strings', () => { const str = createFilters({ resource: "user", foo: { bar: "Tours & Sightseeing", }, }); expect(str).toEqual("filter[user][foo][bar]=Tours%20%26%20Sightseeing"); }); it('should ignore commas when encoding query strings', () => { const str = createFilters({ resource: "user", foo: "Tours & Sightseeing,Water Sports", }); expect(str).toEqual("filter[user][foo][equals]=Tours%20%26%20Sightseeing,Water%20Sports"); }); it("should build query URLs", () => { let query = createFindByIdUrl("/foo", "1234", { include: ["containing-place"], nocache: true, }); expect(query).toEqual("/foo?include=containing-place&nocache=true"); query = createFindByIdUrl("/foo", ["1234", "5678"], { resource: "foo", include: ["containing-place"], }); expect(query).toEqual("/foo?include=containing-place&filter[foo][id][equals]=1234,5678&page[limit]=2"); }); it("should support extra query params", () => { const str = createFilters({ extras: { provider: "myprovider", someId: 1234, }, }); expect(str).toEqual("provider=myprovider&someId=1234"); }); });