Browse Source

refactor/Added lookup unit test for table row api

pull/3358/head
Muhammed Mustafa 2 years ago
parent
commit
3492671021
  1. 81
      packages/nocodb/src/__tests__/unit/rest/tests/helpers/column.ts
  2. 53
      packages/nocodb/src/__tests__/unit/rest/tests/tableRow.test.ts

81
packages/nocodb/src/__tests__/unit/rest/tests/helpers/column.ts

@ -175,48 +175,101 @@ const createRollupColumn = async (
project,
title,
rollupFunction,
parentTable,
childTableName,
childTableColumnTitle,
table,
relatedTableName,
relatedTableColumnTitle,
}: {
project: any;
title: string;
rollupFunction: string;
parentTable: Model;
childTableName: string;
childTableColumnTitle: string;
table: Model;
relatedTableName: string;
relatedTableColumnTitle: string;
}
) => {
const childTable = await Model.getByIdOrName({
project_id: project.id,
base_id: project.bases[0].id,
table_name: childTableName,
table_name: relatedTableName,
});
const childTableColumns = await childTable.getColumns();
const childTableColumn = await childTableColumns.find(
(column) => column.title === childTableColumnTitle
(column) => column.title === relatedTableColumnTitle
);
const ltarColumn = (await parentTable.getColumns()).find(
const ltarColumn = (await table.getColumns()).find(
(column) =>
column.uidt === UITypes.LinkToAnotherRecord &&
column.colOptions?.fk_related_model_id === childTable.id
);
await createColumn(context, parentTable, {
await createColumn(context, table, {
title: title,
uidt: UITypes.Rollup,
fk_relation_column_id: ltarColumn?.id,
fk_rollup_column_id: childTableColumn?.id,
rollup_function: rollupFunction,
table_name: parentTable.table_name,
table_name: table.table_name,
column_name: title,
});
const rollupColumn = (await parentTable.getColumns()).find(
const rollupColumn = (await table.getColumns()).find(
(column) => column.title === title
);
)!;
return rollupColumn;
};
export { defaultColumns, createColumn, createRollupColumn };
const createLookupColumn = async (
context,
{
project,
title,
table,
relatedTableName,
relatedTableColumnTitle,
}: {
project: any;
title: string;
table: Model;
relatedTableName: string;
relatedTableColumnTitle: string;
}
) => {
const childTable = await Model.getByIdOrName({
project_id: project.id,
base_id: project.bases[0].id,
table_name: relatedTableName,
});
const childTableColumns = await childTable.getColumns();
const childTableColumn = await childTableColumns.find(
(column) => column.title === relatedTableColumnTitle
);
if (!childTableColumn) {
throw new Error(
`Could not find column ${relatedTableColumnTitle} in ${relatedTableName}`
);
}
const ltarColumn = (await table.getColumns()).find(
(column) =>
column.uidt === UITypes.LinkToAnotherRecord &&
column.colOptions?.fk_related_model_id === childTable.id
);
await createColumn(context, table, {
title: title,
uidt: UITypes.Lookup,
fk_relation_column_id: ltarColumn?.id,
fk_lookup_column_id: childTableColumn?.id,
table_name: table.table_name,
column_name: title,
});
const lookupColumn = (await table.getColumns()).find(
(column) => column.title === title
)!;
return lookupColumn;
};
export { defaultColumns, createColumn, createRollupColumn, createLookupColumn };

53
packages/nocodb/src/__tests__/unit/rest/tests/tableRow.test.ts

@ -4,7 +4,7 @@ import Model from '../../../../lib/models/Model';
import init from '../init';
import request from 'supertest';
import { ColumnType } from 'nocodb-sdk';
import { createRollupColumn } from './helpers/column';
import { createLookupColumn, createRollupColumn } from './helpers/column';
const isColumnsCorrectInResponse = (response, columns: ColumnType[]) => {
const responseColumnsListStr = Object.keys(response.body.list[0])
@ -182,15 +182,13 @@ function tableTest() {
});
it('Get sorted table data list with a rollup column', async function () {
const rollupColumnName = 'Number of rentals';
const rollupColumn = await createRollupColumn(context, {
project,
title: rollupColumnName,
title: 'Number of rentals',
rollupFunction: 'count',
parentTable: customerTable,
childTableName: 'rental',
childTableColumnTitle: 'RentalDate',
table: customerTable,
relatedTableName: 'rental',
relatedTableColumnTitle: 'RentalDate',
});
const ascResponse = await request(context.app)
@ -217,6 +215,47 @@ function tableTest() {
if (descResponse.body.list[0]['FirstName'] !== 'ELEANOR')
throw new Error('Wrong sort');
});
it('Get sorted table data list with a lookup column', async function () {
const rentalTable = await Model.getByIdOrName({
project_id: project.id,
base_id: project.bases[0].id,
table_name: 'rental',
});
const lookupColumn = await createLookupColumn(context, {
project,
title: 'Lookup',
table: rentalTable,
relatedTableName: customerTable.table_name,
relatedTableColumnTitle: 'FirstName',
});
const ascResponse = await request(context.app)
.get(`/api/v1/db/data/noco/${project.id}/${rentalTable.id}`)
.set('xc-auth', context.token)
.query({
sortArrJson: JSON.stringify([
{ fk_column_id: lookupColumn?.id, direction: 'asc' },
]),
})
.expect(200);
if (ascResponse.body.list[0][lookupColumn.title] !== 'AARON')
throw new Error('Wrong sort');
const descResponse = await request(context.app)
.get(`/api/v1/db/data/noco/${project.id}/${rentalTable.id}`)
.set('xc-auth', context.token)
.query({
sortArrJson: JSON.stringify([
{ fk_column_id: lookupColumn?.id, direction: 'desc' },
]),
})
.expect(200);
if (descResponse.body.list[0][lookupColumn.title] !== 'ZACHARY')
throw new Error('Wrong sort');
});
}
export default function () {

Loading…
Cancel
Save