Skip to content

Commit 9f554c8

Browse files
Add get table by id function (#2182)
Part of OPS-4007
1 parent 7f594fb commit 9f554c8

2 files changed

Lines changed: 58 additions & 13 deletions

File tree

packages/openops/src/lib/openops-tables/tables.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,38 +27,42 @@ export async function getTableIdByTableName(
2727
return table.id;
2828
}
2929

30+
export async function getTableById(
31+
tableId: number,
32+
tablesServerContext: TablesServerContext,
33+
): Promise<OpenOpsTable | undefined> {
34+
const tables = await fetchAllTables(tablesServerContext);
35+
return tables.find((t) => t.id === tableId);
36+
}
37+
3038
export async function getTableByName(
3139
tableName: string,
3240
tablesServerContext: TablesServerContext,
3341
): Promise<OpenOpsTable | undefined> {
3442
const tables = await getAvailableTablesInOpenopsTables(tablesServerContext);
35-
36-
const table = tables.find((t) => t.name === tableName);
37-
38-
return table;
43+
return tables.find((t) => t.name === tableName);
3944
}
4045

4146
export async function getTableNames(
4247
tablesServerContext: TablesServerContext,
4348
): Promise<string[]> {
4449
const tables = await getAvailableTablesInOpenopsTables(tablesServerContext);
45-
4650
return tables.map((t) => t.name);
4751
}
4852

4953
async function getAvailableTablesInOpenopsTables(
5054
serverContext: TablesServerContext,
5155
): Promise<OpenOpsTable[]> {
52-
const tokenOrResolver = await resolveTokenProvider(serverContext);
56+
const tables = await fetchAllTables(serverContext);
57+
return getDistinctTableNames(tables);
58+
}
5359

60+
async function fetchAllTables(
61+
serverContext: TablesServerContext,
62+
): Promise<OpenOpsTable[]> {
63+
const tokenOrResolver = await resolveTokenProvider(serverContext);
5464
const authenticationHeader = createAxiosHeaders(tokenOrResolver);
55-
56-
const tables = await getTables(
57-
serverContext.tablesDatabaseId,
58-
authenticationHeader,
59-
);
60-
61-
return getDistinctTableNames(tables);
65+
return getTables(serverContext.tablesDatabaseId, authenticationHeader);
6266
}
6367

6468
// Tables allows you to have tables with the same name in the same database.

packages/openops/test/openops-tables/tables.test.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ jest.mock('../../src/lib/openops-tables/create-axios-headers', () => ({
1212
import { EncryptedObject } from '@openops/shared';
1313
import { TablesServerContext } from '../../src/lib/openops-tables/context-helpers';
1414
import {
15+
getTableById,
1516
getTableByName,
1617
getTableIdByTableName,
1718
getTableNames,
@@ -176,6 +177,46 @@ describe('get table id by table name', () => {
176177
});
177178
});
178179

180+
describe('get table by id', () => {
181+
beforeEach(() => {
182+
jest.clearAllMocks();
183+
});
184+
185+
test('should return the matching table', async () => {
186+
makeOpenOpsTablesGetMock.mockResolvedValue([
187+
{ id: 1, name: 'table name 1' },
188+
{ id: 2, name: 'table name 2' },
189+
]);
190+
createAxiosHeadersMock.mockReturnValue('some header');
191+
192+
const result = await getTableById(2, mockTablesServerContext);
193+
194+
expect(result).toStrictEqual({ id: 2, name: 'table name 2' });
195+
expect(makeOpenOpsTablesGetMock).toBeCalledTimes(1);
196+
expect(makeOpenOpsTablesGetMock).toHaveBeenCalledWith(
197+
'api/database/tables/database/1/',
198+
'some header',
199+
);
200+
expect(createAxiosHeadersMock).toBeCalledTimes(1);
201+
expect(createAxiosHeadersMock).toHaveBeenCalledWith({
202+
getToken: expect.any(Function),
203+
});
204+
});
205+
206+
test('should return undefined if table id is not found', async () => {
207+
makeOpenOpsTablesGetMock.mockResolvedValue([
208+
{ id: 1, name: 'table name 1' },
209+
]);
210+
createAxiosHeadersMock.mockReturnValue('some header');
211+
212+
const result = await getTableById(99, mockTablesServerContext);
213+
214+
expect(result).toBeUndefined();
215+
expect(makeOpenOpsTablesGetMock).toBeCalledTimes(1);
216+
expect(createAxiosHeadersMock).toBeCalledTimes(1);
217+
});
218+
});
219+
179220
describe('get table by table name', () => {
180221
beforeEach(() => {
181222
jest.clearAllMocks();

0 commit comments

Comments
 (0)