2023-07-20 06:22:20 +00:00
|
|
|
import { DatasourceConnectionMode } from "entities/Datasource";
|
2023-06-01 17:26:05 +00:00
|
|
|
import PostgreSQL from ".";
|
|
|
|
|
|
|
|
|
|
describe("PostgreSQL WidgetQueryGenerator", () => {
|
|
|
|
|
const initialValues = {
|
|
|
|
|
actionConfiguration: {
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: true }],
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
test("should build select form data correctly", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
select: {
|
|
|
|
|
limit: "data_table.pageSize",
|
|
|
|
|
where: 'data_table.searchText || ""',
|
|
|
|
|
offset: "(data_table.pageNo - 1) * data_table.pageSize",
|
2023-06-08 11:28:48 +00:00
|
|
|
orderBy: "data_table.sortOrder.column",
|
2023-06-01 17:26:05 +00:00
|
|
|
sortOrder: "data_table.sortOrder.order || 'ASC'",
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
|
|
|
|
columns: [],
|
2023-06-08 11:28:48 +00:00
|
|
|
primaryColumn: "genres",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
2023-06-01 17:26:05 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const res = `SELECT
|
|
|
|
|
*
|
|
|
|
|
FROM
|
|
|
|
|
someTable
|
|
|
|
|
WHERE
|
|
|
|
|
\"title\" ilike '%{{data_table.searchText || \"\"}}%'
|
|
|
|
|
ORDER BY
|
2023-06-08 11:28:48 +00:00
|
|
|
\"{{data_table.sortOrder.column || 'genres'}}\" {{data_table.sortOrder.order || 'ASC' ? \"\" : \"DESC\"}}
|
2023-06-01 17:26:05 +00:00
|
|
|
LIMIT
|
|
|
|
|
{{data_table.pageSize}}
|
|
|
|
|
OFFSET
|
|
|
|
|
{{(data_table.pageNo - 1) * data_table.pageSize}}`;
|
|
|
|
|
|
|
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
2023-06-29 13:53:25 +00:00
|
|
|
name: "Select_someTable",
|
2023-06-01 17:26:05 +00:00
|
|
|
type: "select",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
body: res,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
2023-06-08 11:28:48 +00:00
|
|
|
test("should build select form data correctly without primary column", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
select: {
|
|
|
|
|
limit: "data_table.pageSize",
|
|
|
|
|
where: 'data_table.searchText || ""',
|
|
|
|
|
offset: "(data_table.pageNo - 1) * data_table.pageSize",
|
|
|
|
|
orderBy: "data_table.sortOrder.column",
|
|
|
|
|
sortOrder: `data_table.sortOrder.order !== "desc"`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
|
|
|
|
columns: [],
|
|
|
|
|
primaryColumn: "",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
2023-06-08 11:28:48 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const res = `SELECT
|
|
|
|
|
*
|
|
|
|
|
FROM
|
|
|
|
|
someTable
|
|
|
|
|
WHERE
|
|
|
|
|
\"title\" ilike '%{{data_table.searchText || \"\"}}%' {{data_table.sortOrder.column ? "ORDER BY " + data_table.sortOrder.column + " " + (data_table.sortOrder.order !== "desc" ? "" : "DESC") : ""}}
|
|
|
|
|
LIMIT
|
|
|
|
|
{{data_table.pageSize}}
|
|
|
|
|
OFFSET
|
|
|
|
|
{{(data_table.pageNo - 1) * data_table.pageSize}}`;
|
|
|
|
|
|
|
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
2023-06-29 13:53:25 +00:00
|
|
|
name: "Select_someTable",
|
2023-06-08 11:28:48 +00:00
|
|
|
type: "select",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
body: res,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
2023-07-20 06:22:20 +00:00
|
|
|
test("should build select form data correctly without write permissions", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
select: {
|
|
|
|
|
limit: "data_table.pageSize",
|
|
|
|
|
where: 'data_table.searchText || ""',
|
|
|
|
|
offset: "(data_table.pageNo - 1) * data_table.pageSize",
|
|
|
|
|
orderBy: "data_table.sortOrder.column",
|
|
|
|
|
sortOrder: "data_table.sortOrder.order || 'ASC'",
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
|
|
|
|
columns: [],
|
|
|
|
|
primaryColumn: "genres",
|
|
|
|
|
connectionMode: DatasourceConnectionMode.READ_ONLY,
|
|
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const res = `SELECT
|
|
|
|
|
*
|
|
|
|
|
FROM
|
|
|
|
|
someTable
|
|
|
|
|
WHERE
|
|
|
|
|
\"title\" ilike '%{{data_table.searchText || \"\"}}%'
|
|
|
|
|
ORDER BY
|
|
|
|
|
\"{{data_table.sortOrder.column || 'genres'}}\" {{data_table.sortOrder.order || 'ASC' ? \"\" : \"DESC\"}}
|
|
|
|
|
LIMIT
|
|
|
|
|
{{data_table.pageSize}}
|
|
|
|
|
OFFSET
|
|
|
|
|
{{(data_table.pageNo - 1) * data_table.pageSize}}`;
|
|
|
|
|
|
|
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
|
|
|
|
name: "Select_someTable",
|
|
|
|
|
type: "select",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
body: res,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
2023-06-08 11:28:48 +00:00
|
|
|
test("should not build update form data without primary key ", () => {
|
2023-06-01 17:26:05 +00:00
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
update: {
|
|
|
|
|
value: `update_form.fieldState'`,
|
|
|
|
|
where: `"id" = {{data_table.selectedRow.id}}`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
2023-10-03 08:10:51 +00:00
|
|
|
columns: [
|
|
|
|
|
{ name: "id", type: "number", isSelected: true },
|
|
|
|
|
{ name: "name", type: "number", isSelected: true },
|
|
|
|
|
],
|
2023-06-01 17:26:05 +00:00
|
|
|
primaryColumn: "",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
|
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(expr).toEqual([]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should not build update form data without write permissions ", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
update: {
|
|
|
|
|
value: `update_form.fieldState'`,
|
|
|
|
|
where: `"id" = {{data_table.selectedRow.id}}`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
2023-10-03 08:10:51 +00:00
|
|
|
columns: [
|
|
|
|
|
{ name: "id", type: "number", isSelected: true },
|
|
|
|
|
{ name: "name", type: "number", isSelected: true },
|
|
|
|
|
],
|
2023-07-20 06:22:20 +00:00
|
|
|
primaryColumn: "id",
|
|
|
|
|
connectionMode: DatasourceConnectionMode.READ_ONLY,
|
2023-06-01 17:26:05 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
2023-06-08 11:28:48 +00:00
|
|
|
expect(expr).toEqual([]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should build update form data correctly ", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
update: {
|
|
|
|
|
value: `update_form.fieldState'`,
|
|
|
|
|
where: `data_table.selectedRow`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
2023-10-03 08:10:51 +00:00
|
|
|
columns: [
|
|
|
|
|
{ name: "id", type: "number", isSelected: true },
|
|
|
|
|
{ name: "name", type: "number", isSelected: true },
|
|
|
|
|
],
|
2023-06-08 11:28:48 +00:00
|
|
|
primaryColumn: "id",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
2023-10-03 08:10:51 +00:00
|
|
|
dataIdentifier: "id",
|
2023-06-08 11:28:48 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
2023-06-01 17:26:05 +00:00
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
2023-06-29 13:53:25 +00:00
|
|
|
name: "Update_someTable",
|
2023-06-01 17:26:05 +00:00
|
|
|
type: "update",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
2023-07-20 06:22:20 +00:00
|
|
|
body: 'UPDATE someTable SET "name"= \'{{update_form.fieldState\'.name}}\' WHERE "id"= {{data_table.selectedRow.id}};',
|
2023-06-01 17:26:05 +00:00
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
2023-06-08 11:28:48 +00:00
|
|
|
|
|
|
|
|
test("should not build insert form data without primary key ", () => {
|
2023-06-01 17:26:05 +00:00
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
create: {
|
|
|
|
|
value: `update_form.fieldState`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
// ignore columns
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
2023-10-03 08:10:51 +00:00
|
|
|
columns: [
|
|
|
|
|
{ name: "id", type: "number", isSelected: true },
|
|
|
|
|
{ name: "name", type: "number", isSelected: true },
|
|
|
|
|
],
|
2023-06-01 17:26:05 +00:00
|
|
|
primaryColumn: "",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
|
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
expect(expr).toEqual([]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should not build insert form data without write permissions ", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
create: {
|
|
|
|
|
value: `update_form.fieldState`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
// ignore columns
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
2023-10-03 08:10:51 +00:00
|
|
|
columns: [
|
|
|
|
|
{ name: "id", type: "number", isSelected: true },
|
|
|
|
|
{ name: "name", type: "number", isSelected: true },
|
|
|
|
|
],
|
2023-07-20 06:22:20 +00:00
|
|
|
primaryColumn: "id",
|
|
|
|
|
connectionMode: DatasourceConnectionMode.READ_ONLY,
|
2023-06-01 17:26:05 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
2023-07-20 06:22:20 +00:00
|
|
|
|
2023-06-08 11:28:48 +00:00
|
|
|
expect(expr).toEqual([]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should build insert form data correctly ", () => {
|
|
|
|
|
const expr = PostgreSQL.build(
|
|
|
|
|
{
|
|
|
|
|
create: {
|
|
|
|
|
value: `update_form.fieldState`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
// ignore columns
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
2023-10-03 08:10:51 +00:00
|
|
|
columns: [
|
|
|
|
|
{ name: "id", type: "number", isSelected: true },
|
|
|
|
|
{ name: "name", type: "number", isSelected: true },
|
|
|
|
|
],
|
2023-06-08 11:28:48 +00:00
|
|
|
primaryColumn: "id",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
2023-06-08 11:28:48 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
2023-06-01 17:26:05 +00:00
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
2023-06-29 13:53:25 +00:00
|
|
|
name: "Insert_someTable",
|
2023-06-01 17:26:05 +00:00
|
|
|
type: "create",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
2023-07-20 06:22:20 +00:00
|
|
|
body: "INSERT INTO someTable (\"name\") VALUES ('{{update_form.fieldState.name}}')",
|
2023-06-01 17:26:05 +00:00
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
});
|