2023-07-20 06:22:20 +00:00
|
|
|
import { DatasourceConnectionMode } from "entities/Datasource";
|
2023-07-06 08:20:58 +00:00
|
|
|
import Snowflake from ".";
|
|
|
|
|
|
|
|
|
|
describe("Snowflake WidgetQueryGenerator", () => {
|
|
|
|
|
const initialValues = {
|
|
|
|
|
actionConfiguration: {
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: true }],
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
test("should build select form data correctly", () => {
|
|
|
|
|
const expr = Snowflake.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",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
|
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const res = `SELECT
|
|
|
|
|
*
|
|
|
|
|
FROM
|
|
|
|
|
someTable
|
|
|
|
|
WHERE
|
|
|
|
|
title LIKE '%{{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,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should build select form data correctly with read permissions", () => {
|
|
|
|
|
const expr = Snowflake.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,
|
2023-07-06 08:20:58 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const res = `SELECT
|
|
|
|
|
*
|
|
|
|
|
FROM
|
|
|
|
|
someTable
|
|
|
|
|
WHERE
|
|
|
|
|
title LIKE '%{{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,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should build select form data correctly without primary column", () => {
|
|
|
|
|
const expr = Snowflake.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-07-06 08:20:58 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const res = `SELECT
|
|
|
|
|
*
|
|
|
|
|
FROM
|
|
|
|
|
someTable
|
|
|
|
|
WHERE
|
|
|
|
|
title LIKE '%{{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([
|
|
|
|
|
{
|
|
|
|
|
name: "Select_someTable",
|
|
|
|
|
type: "select",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
body: res,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should not build update form data without primary key ", () => {
|
|
|
|
|
const expr = Snowflake.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",
|
|
|
|
|
columns: ["id", "name"],
|
|
|
|
|
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 read write ", () => {
|
|
|
|
|
const expr = Snowflake.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",
|
|
|
|
|
columns: ["id", "name"],
|
|
|
|
|
primaryColumn: "id",
|
|
|
|
|
connectionMode: DatasourceConnectionMode.READ_ONLY,
|
2023-07-06 08:20:58 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(expr).toEqual([]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should build update form data correctly ", () => {
|
|
|
|
|
const expr = Snowflake.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",
|
|
|
|
|
columns: ["id", "name"],
|
|
|
|
|
primaryColumn: "id",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
2023-07-06 08:20:58 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
|
|
|
|
name: "Update_someTable",
|
|
|
|
|
type: "update",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
|
|
|
|
body: "UPDATE someTable SET name= '{{update_form.fieldState'.name}}' WHERE id= '{{data_table.selectedRow.id}}';",
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should not build insert form data without primary key ", () => {
|
|
|
|
|
const expr = Snowflake.build(
|
|
|
|
|
{
|
|
|
|
|
create: {
|
|
|
|
|
value: `update_form.fieldState`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
// ignore columns
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
|
|
|
|
columns: ["id", "name"],
|
|
|
|
|
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 read write permissions", () => {
|
|
|
|
|
const expr = Snowflake.build(
|
|
|
|
|
{
|
|
|
|
|
create: {
|
|
|
|
|
value: `update_form.fieldState`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
// ignore columns
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
|
|
|
|
columns: ["id", "name"],
|
|
|
|
|
primaryColumn: "id",
|
|
|
|
|
connectionMode: DatasourceConnectionMode.READ_ONLY,
|
2023-07-06 08:20:58 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
expect(expr).toEqual([]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test("should build insert form data correctly ", () => {
|
|
|
|
|
const expr = Snowflake.build(
|
|
|
|
|
{
|
|
|
|
|
create: {
|
|
|
|
|
value: `update_form.fieldState`,
|
|
|
|
|
},
|
|
|
|
|
totalRecord: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
tableName: "someTable",
|
|
|
|
|
datasourceId: "someId",
|
|
|
|
|
// ignore columns
|
|
|
|
|
aliases: [{ name: "someColumn1", alias: "someColumn1" }],
|
|
|
|
|
widgetId: "someWidgetId",
|
|
|
|
|
searchableColumn: "title",
|
|
|
|
|
columns: ["id", "name"],
|
|
|
|
|
primaryColumn: "id",
|
2023-07-20 06:22:20 +00:00
|
|
|
connectionMode: DatasourceConnectionMode.READ_WRITE,
|
2023-07-06 08:20:58 +00:00
|
|
|
},
|
|
|
|
|
initialValues,
|
|
|
|
|
);
|
|
|
|
|
expect(expr).toEqual([
|
|
|
|
|
{
|
|
|
|
|
name: "Insert_someTable",
|
|
|
|
|
type: "create",
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{
|
|
|
|
|
key: "body",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
payload: {
|
|
|
|
|
body: "INSERT INTO someTable (name) VALUES ('{{update_form.fieldState.name}}')",
|
|
|
|
|
pluginSpecifiedTemplates: [{ value: false }],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
});
|