// (C) 2007-2019 GoodData Corporation import * as request from "supertest"; import { validElements } from "../validElements"; import { createEndpoint } from "../../../utils/tests"; import { ISchema } from "../../../schema/model/Schema"; const schema: ISchema = { project: { title: "My title", }, groups: [ { attributes: [ { title: "Account", elements: ["1", "2", "3"], }, ], dateDataSets: [ { title: "Date", }, ], }, ], }; const app = createEndpoint(validElements, schema); it("should return list of valid elements", () => { return request(app) .post("/gdc/md/mockproject/obj/attr.account.df/validElements") .set("Content-Type", "application/json") .send( JSON.stringify({ validElementsRequest: {}, }), ) .expect(200) .then(res => { expect(res.body).toEqual({ validElements: { items: [ { element: { title: "1", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=1", }, }, { element: { title: "2", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=2", }, }, { element: { title: "3", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=3", }, }, ], paging: { total: 3, count: 3, offset: 0, }, elementsMeta: { attribute: "/gdc/md/mockproject/obj/attr.account", attributeDisplayForm: "/gdc/md/mockproject/obj/attr.account.df", order: "asc", filter: "", }, }, }); }); }); it("should return list of valid elements from date attributes", () => { return request(app) .post("/gdc/md/mockproject/obj/attr.date.quarter.df/validElements") .set("Content-Type", "application/json") .send( JSON.stringify({ validElementsRequest: {}, }), ) .expect(200) .then(res => { expect(res.body).toEqual({ validElements: { items: expect.arrayContaining([ { element: { title: expect.stringMatching(/Q\d\/\d{4,4}/), uri: expect.stringMatching( /\/gdc\/md\/mockproject\/obj\/attr\.date\.quarter\/elements\?id=\d/, ), }, }, ]), paging: { total: expect.any(Number), count: expect.any(Number), offset: 0, }, elementsMeta: { attribute: "/gdc/md/mockproject/obj/attr.date.quarter", attributeDisplayForm: "/gdc/md/mockproject/obj/attr.date.quarter.df", order: "asc", filter: "", }, }, }); }); }); it("should apply offset and limit parameters", () => { return request(app) .post("/gdc/md/mockproject/obj/attr.account.df/validElements?offset=1&limit=1") .set("Content-Type", "application/json") .send( JSON.stringify({ validElementsRequest: {}, }), ) .then(res => { expect(res.body).toEqual({ validElements: { items: [ { element: { title: "2", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=2", }, }, ], paging: { total: 3, count: 1, offset: 1, }, elementsMeta: { attribute: "/gdc/md/mockproject/obj/attr.account", attributeDisplayForm: "/gdc/md/mockproject/obj/attr.account.df", order: "asc", filter: "", }, }, }); }); }); it("should apply filter parameters", () => { return request(app) .post("/gdc/md/mockproject/obj/attr.account.df/validElements?filter=2") .set("Content-Type", "application/json") .send( JSON.stringify({ validElementsRequest: {}, }), ) .expect(200) .then(res => { expect(res.body).toEqual({ validElements: { items: [ { element: { title: "2", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=2", }, }, ], paging: { total: 1, count: 1, offset: 0, }, elementsMeta: { attribute: "/gdc/md/mockproject/obj/attr.account", attributeDisplayForm: "/gdc/md/mockproject/obj/attr.account.df", order: "asc", filter: "2", }, }, }); }); }); it("should apply filter parameters", () => { return request(app) .post("/gdc/md/mockproject/obj/attr.account.df/validElements?order=desc") .set("Content-Type", "application/json") .send( JSON.stringify({ validElementsRequest: {}, }), ) .expect(200) .then(res => { expect(res.body).toEqual({ validElements: { items: [ { element: { title: "3", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=3", }, }, { element: { title: "2", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=2", }, }, { element: { title: "1", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=1", }, }, ], paging: { total: 3, count: 3, offset: 0, }, elementsMeta: { attribute: "/gdc/md/mockproject/obj/attr.account", attributeDisplayForm: "/gdc/md/mockproject/obj/attr.account.df", order: "desc", filter: "", }, }, }); }); }); it("should apply body request parameters", () => { return request(app) .post("/gdc/md/mockproject/obj/attr.account.df/validElements") .set("Content-Type", "application/json") .send({ validElementsRequest: { uris: [ "/gdc/md/mockproject/obj/attr.account/elements?id=2", "/gdc/md/mockproject/obj/attr.account/elements?id=3", ], }, }) .expect(200) .then(res => { expect(res.body).toEqual({ validElements: { items: [ { element: { title: "2", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=2", }, }, { element: { title: "3", uri: "/gdc/md/mockproject/obj/attr.account/elements?id=3", }, }, ], paging: { total: 2, count: 2, offset: 0, }, elementsMeta: { attribute: "/gdc/md/mockproject/obj/attr.account", attributeDisplayForm: "/gdc/md/mockproject/obj/attr.account.df", order: "asc", filter: "", }, }, }); }); }); it("should return error in case attribute not found", () => { return request(app) .post("/gdc/md/mockproject/obj/xyz/validElements") .set("Content-Type", "application/json") .send( JSON.stringify({ validElementsRequest: {}, }), ) .expect(400) .then(res => { expect(res.body).toEqual({ error: { parameters: ["xyz"], requestId: "PIeM4i3QEwcBhjvI:j7db5gbwtmwa3nac", component: "Resource::Elements::Service", errorClass: "GDC::Exception::User", message: "Object %s is not a display form", }, }); }); });