UNPKG

graphql-query-builder-json

Version:

This is a query builder to build any query, mutation, subscription from a json object

180 lines (177 loc) 5.45 kB
import { expect } from "chai"; import { build, InputPayload } from "../index"; describe("Get GraphQL query from json", () => { it("should return Union Query", () => { const testInput: InputPayload = { type: "query", name: "fetchBooks", map: { entity: "user", project: [ "id", "email", "status", "firstName", "lastName", { type: "union", entity: "addresses", project: ["streetNumber", "streetName", "zip"] }, { entity: "coupons", project: [ "ID", "couponName", "couponValue", { entity: "couponDetails", project: ["createAt", "updatedAt"], args: [ { name: "limit", graphQlType: "number", value: 10 }, { name: "sort", graphQlType: "number", value: "createdAt" } ] } ], args: [ { name: "lang", graphQlType: "String!", value: "EN" } ] } ], args: [ { name: "input", graphQlType: "USER", value: { firstName: "Sambit", lastName: "Das" } }, { name: "userId", graphQlType: "String!", value: 3011 } ] } }; const { query, variables } = build(testInput); expect(query).to.equal( `query fetchBooks ($var1: USER,$var2: String!,$var3: String!,$var4: number,$var5: number) {user (input: $var1,userId: $var2) { id email status firstName lastName ... on addresses { streetNumber streetName zip } coupons (lang: $var3) { ID couponName couponValue couponDetails (limit: $var4,sort: $var5) { createAt updatedAt } } } }` ); expect(variables).to.not.null; expect(variables).to.have.property("var1"); expect(variables.var1).to.deep.equal({ firstName: "Sambit", lastName: "Das" }); expect(variables).to.have.property("var2"); expect(variables.var2).to.deep.equal(3011); expect(variables).to.have.property("var3"); expect(variables.var3).to.deep.equal("EN"); expect(variables).to.have.property("var4"); expect(variables.var4).to.deep.equal(10); expect(variables).to.have.property("var5"); expect(variables.var5).to.deep.equal("createdAt"); }); it("should return Mutation with proper variables", () => { const testInput: InputPayload = { type: "mutation", name: "testCreateUser", map: { entity: "createUser", project: [ "id", "email", "status", "firstName", "lastName", { entity: "address", project: [ "streetNumber", "streetName", "city", "state", "country", { entity: "couponDetails", project: ["createAt", "updatedAt"], args: [ { name: "limit", graphQlType: "number", value: 10 }, { name: "sort", graphQlType: "number", value: "createdAt" }, { name: "page", graphQlType: "number", value: 1 } ] } ], args: [ { name: "lang", graphQlType: "String!", value: "EN" } ] } ], args: [ { name: "input", graphQlType: "CreateUserInput", value: { firstName: "Sambit", lastName: "Das", phone: "11223344", zip: 10178, email: "isambitd@gmail.com" } } ] } }; const { query, variables } = build(testInput); expect(query).to.equal( `mutation testCreateUser ($var1: CreateUserInput,$var2: String!,$var3: number,$var4: number,$var5: number) {createUser (input: $var1) { id email status firstName lastName address (lang: $var2) { streetNumber streetName city state country couponDetails (limit: $var3,sort: $var4,page: $var5) { createAt updatedAt } } } }` ); expect(variables).to.not.null; expect(variables).to.have.property("var1"); expect(variables.var1).to.deep.equal({ firstName: "Sambit", lastName: "Das", phone: "11223344", zip: 10178, email: "isambitd@gmail.com" }); expect(variables).to.have.property("var2"); expect(variables.var2).to.deep.equal("EN"); expect(variables).to.have.property("var3"); expect(variables.var3).to.deep.equal(10); expect(variables).to.have.property("var4"); expect(variables.var4).to.deep.equal("createdAt"); expect(variables).to.have.property("var5"); expect(variables.var5).to.deep.equal(1); }); });