import { Query } from "../Query"; import { Sitefinity } from "../Sitefinity"; describe("SDK basic tests", () => { const baseUrl = "http://www.mysite.com/api/default/"; let sitefinity: Sitefinity; let query: Query; beforeEach(function () { jasmine.Ajax.install(); }); afterEach(function () { jasmine.Ajax.uninstall(); }); beforeAll(() => { sitefinity = new Sitefinity({ baseUrl }); query = new Sitefinity.Query(); }); it("query assert", () => { const testQuery = (query.where().and().endsWith("Title", "Record").done() as any).or().startsWith("Title", "asd").done().done(); const resultingQuery = testQuery.build(); expect(resultingQuery.$filter).toEqual("(endswith(Title, 'Record')) and (startswith(Title, 'asd'))"); }); it("complex query assert", () => { const testQuery = query.where().not().endsWith("Record", "Title").done().and().not().eq("Content", "test").done().done().done(); const resultingQuery = testQuery.build(); expect(resultingQuery.$filter).toEqual("(not endswith(Record, 'Title')) and ((not (Content eq 'test')))"); }); it("query count assert", () => { const data = sitefinity.data({ entitySet: "newsitems" }); data.get({ query: query.count(false) }); let request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toBe("http://www.mysite.com/api/default/newsitems/$count"); data.get({ query: query.count(true) }); request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toBe("http://www.mysite.com/api/default/newsitems?$count=true"); }); it("request assert", () => { sitefinity.data({ entitySet: "newsitems", provider: "newsProvider", culture: "en-US" }).get({ query: null }); const request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toBe("http://www.mysite.com/api/default/newsitems?sf_provider=newsProvider&sf_culture=en-US"); expect(request.method).toBe("GET"); expect(request.data()).toEqual({}); }); it("batch assert", async () => { const batch = sitefinity.batch(); const getQuery = query.where().eq("Title", "newTitleN11").done(); batch.get({ entitySet: "newsitems", query: getQuery }); const transaction = batch.beginTransaction(); transaction.create({ entitySet: "newsitems", data: { title: "Test" } }); batch.endTransaction(transaction); (batch as any).execute(); const request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toBe("http://www.mysite.com/api/default/$batch"); expect(request.method).toBe("POST"); await readBlobAsText(request.params).then((result) => { expect(result).toContain("{\"title\":\"Test\"}"); }); }); it("query assert string values", () => { const testQuery = (query.where().and() .endsWith("Title", "9f024c1c-9e6f-483e-a8a6-d962b93956ea").done() as any) .or().startsWith("Title", "9f024c1c-9e6f-483e-a8a6-d962b93956ea") .or().contains("Title", "9f024c1c-9e6f-483e-a8a6-d962b93956ea") .done().done().done(); const resultingQuery = testQuery.build(); expect(resultingQuery.$filter).toEqual("(endswith(Title, '9f024c1c-9e6f-483e-a8a6-d962b93956ea')) and (startswith(Title, '9f024c1c-9e6f-483e-a8a6-d962b93956ea') or (contains(Title, '9f024c1c-9e6f-483e-a8a6-d962b93956ea')))"); }); it("query assert filter with in correctly builds the query", () => { const testQuery = query.where().in("Id", ["1", "2", "3"]).done(); const resultingQuery = testQuery.build(); expect(resultingQuery.$filter).toEqual("Id in (1, 2, 3)"); }); it("query assert filter with in throws error when constant is not array", () => { const testQuery = query.where().in("Id", "1, 2, 3").done(); expect(() => testQuery.build()).toThrow(new Error("Parameter is not an array!")); }); function readBlobAsText(blob: Blob): Promise { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { resolve(reader.result); }; reader.onerror = () => { reject(); }; reader.readAsText(blob); }); } });