Skip to content

Commit 9f521b7

Browse files
Make fields and rows Openops tables helpers use database token authentication helpers (#1663)
Part of OPS-3021. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Updated token/context handling and public parameter types across table-related APIs. * Reorganized request header utilities to centralize header creation. * **Tests** * Enhanced test mocks with numeric/boolean/throw-or-return helpers. * Adjusted mock initialization to improve module loading and alignment with header mocking. * **Deprecation** * Added deprecation notice for the default database ID helper; slated for future removal. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Marcelo Gonçalves <[email protected]>
1 parent a70a5dc commit 9f521b7

File tree

11 files changed

+49
-34
lines changed

11 files changed

+49
-34
lines changed

packages/openops/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export * from './lib/aws/pricing';
3838
export * from './lib/openops-analytics';
3939
export * from './lib/openops-tables/applications-service';
4040
export * from './lib/openops-tables/auth-user';
41+
export * from './lib/openops-tables/create-axios-headers';
4142
export * from './lib/openops-tables/fields';
4243
export * from './lib/openops-tables/filters';
4344
export * from './lib/openops-tables/openops-tables-common-properties';

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
import { createAxiosHeaders, makeOpenOpsTablesGet } from './requests-helpers';
1+
import { createAxiosHeaders } from './create-axios-headers';
2+
import { makeOpenOpsTablesGet } from './requests-helpers';
23
import { Application } from './types';
34

45
export const OPENOPS_DEFAULT_DATABASE_NAME = 'OpenOps Dataset';
56

7+
/*
8+
@deprecated The tablesDatabaseId is now stored in the project.
9+
This function will be removed once flag ENABLE_TABLES_DATABASE_TOKEN is removed.
10+
*/
611
export async function getDefaultDatabaseId(
712
token: string,
813
databaseName = OPENOPS_DEFAULT_DATABASE_NAME, // TODO: remove this when all environments are migrated

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
import { IAxiosRetryConfig } from 'axios-retry';
2-
import {
3-
createAxiosHeaders,
4-
makeOpenOpsTablesGet,
5-
} from '../openops-tables/requests-helpers';
2+
import { makeOpenOpsTablesGet } from '../openops-tables/requests-helpers';
3+
import { TokenOrResolver } from './context-helpers';
4+
import { createAxiosHeaders } from './create-axios-headers';
65

76
export async function getFields(
87
tableId: number,
9-
token: string,
8+
tokenOrResolver: TokenOrResolver,
109
userFieldNames = true,
1110
axiosRetryConfig?: IAxiosRetryConfig,
1211
): Promise<OpenOpsField[]> {
13-
const authenticationHeader = createAxiosHeaders(token);
12+
const authenticationHeader = createAxiosHeaders(tokenOrResolver);
1413
const fields = await makeOpenOpsTablesGet<any[]>(
1514
`api/database/fields/table/${tableId}/?user_field_names=${userFieldNames}`,
1615
authenticationHeader,
1716
axiosRetryConfig,
1817
);
19-
20-
return fields.flatMap((item) => item);
18+
return fields.flat();
2119
}
2220

2321
export interface OpenOpsField {

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,6 @@ import { IAxiosRetryConfig } from 'axios-retry';
55
import { StatusCodes } from 'http-status-codes';
66
import { makeHttpRequest } from '../axios-wrapper';
77

8-
export function createAxiosHeaders(token: string): AxiosHeaders {
9-
return new AxiosHeaders({
10-
'Content-Type': 'application/json',
11-
Authorization: `JWT ${token}`,
12-
});
13-
}
14-
158
const RETRY_DELAY_MS = 1000;
169

1710
const getStatusText = (statusCode: number): string => {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import {
66
ViewFilterTypesEnum,
77
} from '../openops-tables/filters';
88
import {
9-
createAxiosHeaders,
109
makeOpenOpsTablesDelete,
1110
makeOpenOpsTablesGet,
1211
makeOpenOpsTablesPatch,
1312
makeOpenOpsTablesPost,
1413
makeOpenOpsTablesPut,
1514
} from '../openops-tables/requests-helpers';
15+
import { TokenOrResolver } from './context-helpers';
16+
import { createAxiosHeaders } from './create-axios-headers';
1617

1718
export interface OpenOpsRow {
1819
id: number;
@@ -21,7 +22,7 @@ export interface OpenOpsRow {
2122

2223
export interface RowParams {
2324
tableId: number;
24-
token: string;
25+
token: TokenOrResolver;
2526
}
2627

2728
export interface GetRowsParams extends RowParams {
@@ -207,22 +208,22 @@ export async function deleteRow(deleteRowParams: DeleteRowParams) {
207208
}
208209

209210
export async function getRowByPrimaryKeyValue(
210-
token: string,
211+
tokenOrResolver: TokenOrResolver,
211212
tableId: number,
212213
primaryKeyFieldValue: string,
213214
primaryKeyFieldName: any,
214215
primaryKeyFieldType: string,
215216
) {
216217
const rows = await getRows({
217218
tableId: tableId,
218-
token: token,
219219
filters: [
220220
{
221221
fieldName: primaryKeyFieldName,
222222
value: primaryKeyFieldValue,
223223
type: getEqualityFilterType(primaryKeyFieldType),
224224
},
225225
],
226+
token: tokenOrResolver,
226227
});
227228

228229
if (rows.length > 1) {

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import {
2-
createAxiosHeaders,
3-
makeOpenOpsTablesGet,
4-
} from '../openops-tables/requests-helpers';
1+
import { makeOpenOpsTablesGet } from '../openops-tables/requests-helpers';
52
import { getDefaultDatabaseId } from './applications-service';
63
import { authenticateDefaultUserInOpenOpsTables } from './auth-user';
4+
import { createAxiosHeaders } from './create-axios-headers';
75

86
async function getTables(
97
token: string,

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ const makeOpenOpsTablesGetMock = jest.fn();
22
const createAxiosHeadersMock = jest.fn();
33
jest.mock('../../src/lib/openops-tables/requests-helpers', () => ({
44
makeOpenOpsTablesGet: makeOpenOpsTablesGetMock,
5+
}));
6+
7+
jest.mock('../../src/lib/openops-tables/create-axios-headers', () => ({
58
createAxiosHeaders: createAxiosHeadersMock,
69
}));
710

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ const makeOpenOpsTablesGetMock = jest.fn();
22
const createAxiosHeadersMock = jest.fn();
33
jest.mock('../../src/lib/openops-tables/requests-helpers', () => ({
44
makeOpenOpsTablesGet: makeOpenOpsTablesGetMock,
5+
}));
6+
7+
jest.mock('../../src/lib/openops-tables/create-axios-headers', () => ({
58
createAxiosHeaders: createAxiosHeadersMock,
69
}));
710

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ jest.mock('../../src/lib/axios-wrapper', () => ({
55

66
const systemMock = {
77
get: jest.fn(),
8+
getNumber: jest.fn(),
9+
getBoolean: jest.fn(),
10+
getOrThrow: jest.fn(),
811
};
912

1013
jest.mock('@openops/server-shared', () => ({
@@ -30,6 +33,9 @@ describe('axios request', () => {
3033
beforeEach(() => {
3134
jest.clearAllMocks();
3235
systemMock.get.mockReturnValue('https://mockapi.com');
36+
systemMock.getNumber.mockReturnValue(60);
37+
systemMock.getBoolean.mockReturnValue(false);
38+
systemMock.getOrThrow.mockReturnValue('mock-value');
3339
});
3440

3541
const header = new AxiosHeaders({ some: 'header' });

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@ const makeOpenOpsTablesPostMock = jest.fn();
44
const makeOpenOpsTablesDeleteMock = jest.fn();
55
const createAxiosHeadersMock = jest.fn();
66

7-
const actualRequestsHelpers = jest.requireActual(
8-
'../../src/lib/openops-tables/requests-helpers',
9-
);
10-
11-
jest.mock('../../src/lib/openops-tables/requests-helpers', () => ({
12-
...actualRequestsHelpers,
13-
makeOpenOpsTablesGet: makeOpenOpsTablesGetMock,
14-
makeOpenOpsTablesPatch: makeOpenOpsTablesPatchMock,
15-
makeOpenOpsTablesPost: makeOpenOpsTablesPostMock,
16-
makeOpenOpsTablesDelete: makeOpenOpsTablesDeleteMock,
7+
jest.mock('../../src/lib/openops-tables/requests-helpers', () => {
8+
const actualRequestsHelpers = jest.requireActual(
9+
'../../src/lib/openops-tables/requests-helpers',
10+
);
11+
return {
12+
...actualRequestsHelpers,
13+
makeOpenOpsTablesGet: makeOpenOpsTablesGetMock,
14+
makeOpenOpsTablesPatch: makeOpenOpsTablesPatchMock,
15+
makeOpenOpsTablesPost: makeOpenOpsTablesPostMock,
16+
makeOpenOpsTablesDelete: makeOpenOpsTablesDeleteMock,
17+
};
18+
});
19+
20+
jest.mock('../../src/lib/openops-tables/create-axios-headers', () => ({
1721
createAxiosHeaders: createAxiosHeadersMock,
1822
}));
1923

0 commit comments

Comments
 (0)