Adding some new test cases based on finishing off testing.
This commit is contained in:
parent
5f76f143bf
commit
45d2e67905
|
@ -5,6 +5,7 @@ import { SqlClient } from "../utils"
|
|||
|
||||
describe("Captures of real examples", () => {
|
||||
const limit = 5000
|
||||
const relationshipLimit = 100
|
||||
|
||||
function getJson(name: string): QueryJson {
|
||||
return require(join(__dirname, "sqlQueryJson", name)) as QueryJson
|
||||
|
@ -26,7 +27,7 @@ describe("Captures of real examples", () => {
|
|||
const queryJson = getJson("basicFetchWithRelationships.json")
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(queryJson)
|
||||
expect(query).toEqual({
|
||||
bindings: [100, limit],
|
||||
bindings: [relationshipLimit, limit],
|
||||
sql: `select "a"."year" as "a.year", "a"."firstname" as "a.firstname", "a"."personid" as "a.personid", "a"."address" as "a.address", "a"."age" as "a.age", "a"."type" as "a.type", "a"."city" as "a.city", "a"."lastname" as "a.lastname", "b"."executorid" as "b.executorid", "b"."taskname" as "b.taskname", "b"."taskid" as "b.taskid", "b"."completed" as "b.completed", "b"."qaid" as "b.qaid", "b"."executorid" as "b.executorid", "b"."taskname" as "b.taskname", "b"."taskid" as "b.taskid", "b"."completed" as "b.completed", "b"."qaid" as "b.qaid" from (select * from "persons" as "a" order by "a"."firstname" asc limit $1) as "a" left join "tasks" as "b" on "a"."personid" = "b"."qaid" or "a"."personid" = "b"."executorid" order by "a"."firstname" asc limit $2`,
|
||||
})
|
||||
})
|
||||
|
@ -35,10 +36,50 @@ describe("Captures of real examples", () => {
|
|||
const queryJson = getJson("filterByRelationship.json")
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(queryJson)
|
||||
expect(query).toEqual({
|
||||
bindings: [100, "assembling", limit],
|
||||
bindings: [relationshipLimit, "assembling", limit],
|
||||
sql: `select "a"."productname" as "a.productname", "a"."productid" as "a.productid", "b"."executorid" as "b.executorid", "b"."taskname" as "b.taskname", "b"."taskid" as "b.taskid", "b"."completed" as "b.completed", "b"."qaid" as "b.qaid" from (select * from "products" as "a" order by "a"."productname" asc limit $1) as "a" left join "products_tasks" as "c" on "a"."productid" = "c"."productid" left join "tasks" as "b" on "b"."taskid" = "c"."taskid" where "b"."taskname" = $2 order by "a"."productname" asc limit $3`,
|
||||
})
|
||||
})
|
||||
|
||||
it("should handle fetching many to many relationships", () => {
|
||||
const queryJson = getJson("fetchManyToMany.json")
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(queryJson)
|
||||
expect(query).toEqual({
|
||||
bindings: [relationshipLimit, limit],
|
||||
sql: `select "a"."productname" as "a.productname", "a"."productid" as "a.productid", "b"."executorid" as "b.executorid", "b"."taskname" as "b.taskname", "b"."taskid" as "b.taskid", "b"."completed" as "b.completed", "b"."qaid" as "b.qaid" from (select * from "products" as "a" order by "a"."productname" asc limit $1) as "a" left join "products_tasks" as "c" on "a"."productid" = "c"."productid" left join "tasks" as "b" on "b"."taskid" = "c"."taskid" order by "a"."productname" asc limit $2`,
|
||||
})
|
||||
})
|
||||
|
||||
it("should handle enrichment of rows", () => {
|
||||
const queryJson = getJson("enrichRelationship.json")
|
||||
const filters = queryJson.filters?.oneOf?.taskid as number[]
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(queryJson)
|
||||
expect(query).toEqual({
|
||||
bindings: [...filters, limit, limit],
|
||||
sql: `select "a"."executorid" as "a.executorid", "a"."taskname" as "a.taskname", "a"."taskid" as "a.taskid", "a"."completed" as "a.completed", "a"."qaid" as "a.qaid", "b"."productname" as "b.productname", "b"."productid" as "b.productid" from (select * from "tasks" as "a" where "a"."taskid" in ($1, $2) limit $3) as "a" left join "products_tasks" as "c" on "a"."taskid" = "c"."taskid" left join "products" as "b" on "b"."productid" = "c"."productid" limit $4`,
|
||||
})
|
||||
})
|
||||
|
||||
it("should manage query with many relationship filters", () => {
|
||||
const queryJson = getJson("manyRelationshipFilters.json")
|
||||
let query = new Sql(SqlClient.POSTGRES, limit)._query(queryJson)
|
||||
const filters = queryJson.filters
|
||||
const notEqualsValue = Object.values(filters?.notEqual!)[0]
|
||||
const rangeValue = Object.values(filters?.range!)[0]
|
||||
const equalValue = Object.values(filters?.equal!)[0]
|
||||
|
||||
expect(query).toEqual({
|
||||
bindings: [
|
||||
notEqualsValue,
|
||||
relationshipLimit,
|
||||
rangeValue.low,
|
||||
rangeValue.high,
|
||||
equalValue,
|
||||
limit,
|
||||
],
|
||||
sql: `select "a"."executorid" as "a.executorid", "a"."taskname" as "a.taskname", "a"."taskid" as "a.taskid", "a"."completed" as "a.completed", "a"."qaid" as "a.qaid", "b"."productname" as "b.productname", "b"."productid" as "b.productid", "c"."year" as "c.year", "c"."firstname" as "c.firstname", "c"."personid" as "c.personid", "c"."address" as "c.address", "c"."age" as "c.age", "c"."type" as "c.type", "c"."city" as "c.city", "c"."lastname" as "c.lastname", "c"."year" as "c.year", "c"."firstname" as "c.firstname", "c"."personid" as "c.personid", "c"."address" as "c.address", "c"."age" as "c.age", "c"."type" as "c.type", "c"."city" as "c.city", "c"."lastname" as "c.lastname" from (select * from "tasks" as "a" where not "a"."completed" = $1 order by "a"."taskname" asc limit $2) as "a" left join "products_tasks" as "d" on "a"."taskid" = "d"."taskid" left join "products" as "b" on "b"."productid" = "d"."productid" left join "persons" as "c" on "a"."executorid" = "c"."personid" or "a"."qaid" = "c"."personid" where "c"."year" between $3 and $4 and "b"."productname" = $5 order by "a"."taskname" asc limit $6`,
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe("update", () => {
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
{
|
||||
"endpoint": {
|
||||
"datasourceId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81",
|
||||
"entityId": "tasks",
|
||||
"operation": "READ"
|
||||
},
|
||||
"resource": {
|
||||
"fields": [
|
||||
"a.executorid",
|
||||
"a.taskname",
|
||||
"a.taskid",
|
||||
"a.completed",
|
||||
"a.qaid",
|
||||
"b.productname",
|
||||
"b.productid"
|
||||
]
|
||||
},
|
||||
"filters": {
|
||||
"oneOf": {
|
||||
"taskid": [
|
||||
1,
|
||||
2
|
||||
]
|
||||
}
|
||||
},
|
||||
"relationships": [
|
||||
{
|
||||
"tableName": "products",
|
||||
"column": "products",
|
||||
"through": "products_tasks",
|
||||
"from": "taskid",
|
||||
"to": "productid",
|
||||
"fromPrimary": "taskid",
|
||||
"toPrimary": "productid",
|
||||
"aliases": {
|
||||
"products_tasks": "c",
|
||||
"products": "b",
|
||||
"tasks": "a"
|
||||
}
|
||||
}
|
||||
],
|
||||
"extra": {
|
||||
"idFilter": {}
|
||||
},
|
||||
"meta": {
|
||||
"table": {
|
||||
"type": "table",
|
||||
"_id": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__tasks",
|
||||
"primary": [
|
||||
"taskid"
|
||||
],
|
||||
"name": "a",
|
||||
"schema": {
|
||||
"executorid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"autocolumn": false,
|
||||
"name": "executorid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"taskname": {
|
||||
"type": "string",
|
||||
"externalType": "character varying",
|
||||
"autocolumn": false,
|
||||
"name": "taskname",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"taskid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"autocolumn": true,
|
||||
"name": "taskid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"externalType": "boolean",
|
||||
"autocolumn": false,
|
||||
"name": "completed",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"qaid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"autocolumn": false,
|
||||
"name": "qaid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"products": {
|
||||
"tableId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__products",
|
||||
"name": "products",
|
||||
"relationshipType": "many-to-many",
|
||||
"through": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__products_tasks",
|
||||
"type": "link",
|
||||
"_id": "c3b91d00cd36c4cc1a347794725b9adbd",
|
||||
"fieldName": "productid",
|
||||
"throughFrom": "productid",
|
||||
"throughTo": "taskid"
|
||||
}
|
||||
},
|
||||
"sourceId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81",
|
||||
"sourceType": "external",
|
||||
"primaryDisplay": "taskname",
|
||||
"sql": true,
|
||||
"views": {}
|
||||
}
|
||||
},
|
||||
"tableAliases": {
|
||||
"tasks": "a",
|
||||
"products": "b",
|
||||
"products_tasks": "c"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
{
|
||||
"endpoint": {
|
||||
"datasourceId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81",
|
||||
"entityId": "products",
|
||||
"operation": "READ"
|
||||
},
|
||||
"resource": {
|
||||
"fields": [
|
||||
"a.productname",
|
||||
"a.productid",
|
||||
"b.executorid",
|
||||
"b.taskname",
|
||||
"b.taskid",
|
||||
"b.completed",
|
||||
"b.qaid"
|
||||
]
|
||||
},
|
||||
"filters": {
|
||||
"string": {},
|
||||
"fuzzy": {},
|
||||
"range": {},
|
||||
"equal": {},
|
||||
"notEqual": {},
|
||||
"empty": {},
|
||||
"notEmpty": {},
|
||||
"contains": {},
|
||||
"notContains": {},
|
||||
"oneOf": {},
|
||||
"containsAny": {}
|
||||
},
|
||||
"sort": {
|
||||
"productname": {
|
||||
"direction": "ASCENDING"
|
||||
}
|
||||
},
|
||||
"paginate": {
|
||||
"limit": 100,
|
||||
"page": 1
|
||||
},
|
||||
"relationships": [
|
||||
{
|
||||
"tableName": "tasks",
|
||||
"column": "tasks",
|
||||
"through": "products_tasks",
|
||||
"from": "productid",
|
||||
"to": "taskid",
|
||||
"fromPrimary": "productid",
|
||||
"toPrimary": "taskid",
|
||||
"aliases": {
|
||||
"products_tasks": "c",
|
||||
"tasks": "b",
|
||||
"products": "a"
|
||||
}
|
||||
}
|
||||
],
|
||||
"extra": {
|
||||
"idFilter": {}
|
||||
},
|
||||
"meta": {
|
||||
"table": {
|
||||
"type": "table",
|
||||
"_id": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__products",
|
||||
"primary": [
|
||||
"productid"
|
||||
],
|
||||
"name": "a",
|
||||
"schema": {
|
||||
"productname": {
|
||||
"type": "string",
|
||||
"externalType": "character varying",
|
||||
"autocolumn": false,
|
||||
"name": "productname",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"productid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"autocolumn": true,
|
||||
"name": "productid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"tasks": {
|
||||
"tableId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__tasks",
|
||||
"name": "tasks",
|
||||
"relationshipType": "many-to-many",
|
||||
"fieldName": "taskid",
|
||||
"through": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__products_tasks",
|
||||
"throughFrom": "taskid",
|
||||
"throughTo": "productid",
|
||||
"type": "link",
|
||||
"main": true,
|
||||
"_id": "c3b91d00cd36c4cc1a347794725b9adbd"
|
||||
}
|
||||
},
|
||||
"sourceId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81",
|
||||
"sourceType": "external",
|
||||
"primaryDisplay": "productname"
|
||||
}
|
||||
},
|
||||
"tableAliases": {
|
||||
"products": "a",
|
||||
"tasks": "b",
|
||||
"products_tasks": "c"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,202 @@
|
|||
{
|
||||
"endpoint": {
|
||||
"datasourceId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81",
|
||||
"entityId": "tasks",
|
||||
"operation": "READ"
|
||||
},
|
||||
"resource": {
|
||||
"fields": [
|
||||
"a.executorid",
|
||||
"a.taskname",
|
||||
"a.taskid",
|
||||
"a.completed",
|
||||
"a.qaid",
|
||||
"b.productname",
|
||||
"b.productid",
|
||||
"c.year",
|
||||
"c.firstname",
|
||||
"c.personid",
|
||||
"c.address",
|
||||
"c.age",
|
||||
"c.type",
|
||||
"c.city",
|
||||
"c.lastname",
|
||||
"c.year",
|
||||
"c.firstname",
|
||||
"c.personid",
|
||||
"c.address",
|
||||
"c.age",
|
||||
"c.type",
|
||||
"c.city",
|
||||
"c.lastname"
|
||||
]
|
||||
},
|
||||
"filters": {
|
||||
"string": {},
|
||||
"fuzzy": {},
|
||||
"range": {
|
||||
"1:persons.year": {
|
||||
"low": 1990,
|
||||
"high": 2147483647
|
||||
}
|
||||
},
|
||||
"equal": {
|
||||
"2:products.productname": "Computers"
|
||||
},
|
||||
"notEqual": {
|
||||
"3:completed": true
|
||||
},
|
||||
"empty": {},
|
||||
"notEmpty": {},
|
||||
"contains": {},
|
||||
"notContains": {},
|
||||
"oneOf": {},
|
||||
"containsAny": {},
|
||||
"onEmptyFilter": "all"
|
||||
},
|
||||
"sort": {
|
||||
"taskname": {
|
||||
"direction": "ASCENDING"
|
||||
}
|
||||
},
|
||||
"paginate": {
|
||||
"limit": 100,
|
||||
"page": 1
|
||||
},
|
||||
"relationships": [
|
||||
{
|
||||
"tableName": "products",
|
||||
"column": "products",
|
||||
"through": "products_tasks",
|
||||
"from": "taskid",
|
||||
"to": "productid",
|
||||
"fromPrimary": "taskid",
|
||||
"toPrimary": "productid",
|
||||
"aliases": {
|
||||
"products_tasks": "d",
|
||||
"products": "b",
|
||||
"tasks": "a"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "persons",
|
||||
"column": "tasksToExecute",
|
||||
"from": "executorid",
|
||||
"to": "personid",
|
||||
"aliases": {
|
||||
"persons": "c",
|
||||
"tasks": "a"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "persons",
|
||||
"column": "tasksToQA",
|
||||
"from": "qaid",
|
||||
"to": "personid",
|
||||
"aliases": {
|
||||
"persons": "c",
|
||||
"tasks": "a"
|
||||
}
|
||||
}
|
||||
],
|
||||
"extra": {
|
||||
"idFilter": {}
|
||||
},
|
||||
"meta": {
|
||||
"table": {
|
||||
"type": "table",
|
||||
"_id": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__tasks",
|
||||
"primary": [
|
||||
"taskid"
|
||||
],
|
||||
"name": "a",
|
||||
"schema": {
|
||||
"executorid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"name": "executorid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
},
|
||||
"autocolumn": true,
|
||||
"autoReason": "foreign_key"
|
||||
},
|
||||
"taskname": {
|
||||
"type": "string",
|
||||
"externalType": "character varying",
|
||||
"autocolumn": false,
|
||||
"name": "taskname",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"taskid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"autocolumn": true,
|
||||
"name": "taskid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"externalType": "boolean",
|
||||
"autocolumn": false,
|
||||
"name": "completed",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"qaid": {
|
||||
"type": "number",
|
||||
"externalType": "integer",
|
||||
"name": "qaid",
|
||||
"constraints": {
|
||||
"presence": false
|
||||
}
|
||||
},
|
||||
"products": {
|
||||
"tableId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__products",
|
||||
"name": "products",
|
||||
"relationshipType": "many-to-many",
|
||||
"through": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__products_tasks",
|
||||
"type": "link",
|
||||
"_id": "c3b91d00cd36c4cc1a347794725b9adbd",
|
||||
"fieldName": "productid",
|
||||
"throughFrom": "productid",
|
||||
"throughTo": "taskid"
|
||||
},
|
||||
"tasksToExecute": {
|
||||
"tableId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__persons",
|
||||
"name": "tasksToExecute",
|
||||
"relationshipType": "one-to-many",
|
||||
"type": "link",
|
||||
"_id": "c0f440590bda04f28846242156c1dd60b",
|
||||
"foreignKey": "executorid",
|
||||
"fieldName": "personid"
|
||||
},
|
||||
"tasksToQA": {
|
||||
"tableId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81__persons",
|
||||
"name": "tasksToQA",
|
||||
"relationshipType": "one-to-many",
|
||||
"type": "link",
|
||||
"_id": "c5fdf453a0ba743d58e29491d174c974b",
|
||||
"foreignKey": "qaid",
|
||||
"fieldName": "personid"
|
||||
}
|
||||
},
|
||||
"sourceId": "datasource_plus_44a967caf37a435f84fe01cd6dfe8f81",
|
||||
"sourceType": "external",
|
||||
"primaryDisplay": "taskname",
|
||||
"sql": true,
|
||||
"views": {}
|
||||
}
|
||||
},
|
||||
"tableAliases": {
|
||||
"tasks": "a",
|
||||
"products": "b",
|
||||
"persons": "c",
|
||||
"products_tasks": "d"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue