Skip to content

Commit 41f740e

Browse files
committed
Update service to receive system token rather than using default user directly
1 parent 4fa2859 commit 41f740e

2 files changed

Lines changed: 85 additions & 145 deletions

File tree

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
1-
import { authenticateDefaultUserInOpenOpsTables } from '@openops/common';
21
import { DatabaseToken } from './create-database-token';
32
import { openopsTables } from './index';
43

54
const TOKEN_NAME_PREFIX = 'Project_';
65

7-
export const databaseTokenService = {
8-
async generateDatabaseToken(
9-
projectId: string,
10-
workspaceId: number,
11-
): Promise<DatabaseToken> {
12-
const { token: systemToken } =
13-
await authenticateDefaultUserInOpenOpsTables();
14-
15-
const tokenName = `${TOKEN_NAME_PREFIX}${projectId}`;
16-
17-
return openopsTables.createDatabaseToken({
18-
name: tokenName,
19-
workspaceId,
20-
systemToken,
21-
});
22-
},
23-
};
6+
export async function generateDatabaseToken(
7+
systemToken: string,
8+
projectId: string,
9+
workspaceId: number,
10+
): Promise<DatabaseToken> {
11+
return openopsTables.createDatabaseToken({
12+
name: `${TOKEN_NAME_PREFIX}${projectId}`,
13+
workspaceId,
14+
systemToken,
15+
});
16+
}
Lines changed: 74 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
const openopsCommonMock = {
2-
...jest.requireActual('@openops/common'),
3-
authenticateDefaultUserInOpenOpsTables: jest.fn(),
4-
};
5-
jest.mock('@openops/common', () => openopsCommonMock);
6-
71
const createDatabaseTokenMock = jest.fn();
82
jest.mock('../../../src/app/openops-tables/index', () => {
93
return {
@@ -14,144 +8,97 @@ jest.mock('../../../src/app/openops-tables/index', () => {
148
});
159

1610
import { DatabaseToken } from '../../../src/app/openops-tables/create-database-token';
17-
import { databaseTokenService } from '../../../src/app/openops-tables/database-token-service';
11+
import { generateDatabaseToken } from '../../../src/app/openops-tables/database-token-service';
1812

19-
describe('databaseTokenService', () => {
13+
describe('generateDatabaseToken', () => {
2014
beforeEach(() => {
2115
jest.clearAllMocks();
2216
});
2317

24-
describe('generateDatabaseToken', () => {
25-
it('should generate a database token with correct name prefix and parameters', async () => {
26-
const projectId = 'test-project-123';
27-
const workspaceId = 42;
28-
const systemToken = 'test-system-token';
29-
const mockToken: DatabaseToken = {
30-
id: 1,
31-
name: 'Project_test-project-123',
32-
workspace: workspaceId,
33-
key: 'test-database-token-key',
34-
permissions: {
35-
create: true,
36-
read: true,
37-
update: true,
38-
delete: true,
39-
},
40-
};
18+
it('should generate a database token with correct name prefix and parameters', async () => {
19+
const systemToken = 'test-system-token';
20+
const projectId = 'test-project-123';
21+
const workspaceId = 42;
22+
const mockToken: DatabaseToken = {
23+
id: 1,
24+
name: 'Project_test-project-123',
25+
workspace: workspaceId,
26+
key: 'test-database-token-key',
27+
permissions: {
28+
create: true,
29+
read: true,
30+
update: true,
31+
delete: true,
32+
},
33+
};
4134

42-
openopsCommonMock.authenticateDefaultUserInOpenOpsTables.mockResolvedValue(
43-
{
44-
token: systemToken,
45-
},
46-
);
47-
createDatabaseTokenMock.mockResolvedValue(mockToken);
35+
createDatabaseTokenMock.mockResolvedValue(mockToken);
4836

49-
const result = await databaseTokenService.generateDatabaseToken(
50-
projectId,
51-
workspaceId,
52-
);
37+
const result = await generateDatabaseToken(
38+
systemToken,
39+
projectId,
40+
workspaceId,
41+
);
5342

54-
expect(result).toEqual(mockToken);
55-
expect(
56-
openopsCommonMock.authenticateDefaultUserInOpenOpsTables,
57-
).toHaveBeenCalledTimes(1);
58-
expect(createDatabaseTokenMock).toHaveBeenCalledTimes(1);
59-
expect(createDatabaseTokenMock).toHaveBeenCalledWith({
60-
name: 'Project_test-project-123',
61-
workspaceId,
62-
systemToken,
63-
});
43+
expect(result).toEqual(mockToken);
44+
expect(createDatabaseTokenMock).toHaveBeenCalledTimes(1);
45+
expect(createDatabaseTokenMock).toHaveBeenCalledWith({
46+
name: 'Project_test-project-123',
47+
workspaceId,
48+
systemToken,
6449
});
50+
});
6551

66-
it('should handle different project IDs correctly', async () => {
67-
const projectId = 'another-project';
68-
const workspaceId = 100;
69-
const systemToken = 'another-token';
70-
const mockToken: DatabaseToken = {
71-
id: 2,
72-
name: 'Project_another-project',
73-
workspace: workspaceId,
74-
key: 'another-key',
75-
permissions: {
76-
create: true,
77-
read: true,
78-
update: false,
79-
delete: false,
80-
},
81-
};
52+
it('should handle different project IDs correctly', async () => {
53+
const systemToken = 'another-token';
54+
const projectId = 'another-project';
55+
const workspaceId = 100;
56+
const mockToken: DatabaseToken = {
57+
id: 2,
58+
name: 'Project_another-project',
59+
workspace: workspaceId,
60+
key: 'another-key',
61+
permissions: {
62+
create: true,
63+
read: true,
64+
update: false,
65+
delete: false,
66+
},
67+
};
8268

83-
openopsCommonMock.authenticateDefaultUserInOpenOpsTables.mockResolvedValue(
84-
{
85-
token: systemToken,
86-
},
87-
);
88-
createDatabaseTokenMock.mockResolvedValue(mockToken);
69+
createDatabaseTokenMock.mockResolvedValue(mockToken);
8970

90-
const result = await databaseTokenService.generateDatabaseToken(
91-
projectId,
92-
workspaceId,
93-
);
71+
const result = await generateDatabaseToken(
72+
systemToken,
73+
projectId,
74+
workspaceId,
75+
);
9476

95-
expect(result).toEqual(mockToken);
96-
expect(createDatabaseTokenMock).toHaveBeenCalledWith({
97-
name: 'Project_another-project',
98-
workspaceId,
99-
systemToken,
100-
});
77+
expect(result).toEqual(mockToken);
78+
expect(createDatabaseTokenMock).toHaveBeenCalledWith({
79+
name: 'Project_another-project',
80+
workspaceId,
81+
systemToken,
10182
});
83+
});
10284

103-
it.each([
104-
{
105-
description: 'from authenticateDefaultUserInOpenOpsTables',
106-
setupMocks: (): void => {
107-
openopsCommonMock.authenticateDefaultUserInOpenOpsTables.mockRejectedValue(
108-
new Error('Authentication failed'),
109-
);
110-
},
111-
errorMessage: 'Authentication failed',
112-
expectedAuthCalls: 1,
113-
expectedCreateTokenCalls: 0,
114-
},
115-
{
116-
description: 'from createDatabaseToken',
117-
setupMocks: (): void => {
118-
openopsCommonMock.authenticateDefaultUserInOpenOpsTables.mockResolvedValue(
119-
{
120-
token: 'test-token',
121-
},
122-
);
123-
createDatabaseTokenMock.mockRejectedValue(
124-
new Error('Token creation failed'),
125-
);
126-
},
127-
errorMessage: 'Token creation failed',
128-
expectedAuthCalls: 1,
129-
expectedCreateTokenCalls: 1,
130-
},
131-
])(
132-
'should propagate errors $description',
133-
async ({
134-
setupMocks,
135-
errorMessage,
136-
expectedAuthCalls,
137-
expectedCreateTokenCalls,
138-
}) => {
139-
const projectId = 'test-project';
140-
const workspaceId = 1;
85+
it('should propagate errors from createDatabaseToken', async () => {
86+
const systemToken = 'test-token';
87+
const projectId = 'test-project';
88+
const workspaceId = 1;
89+
const createError = new Error('Token creation failed');
14190

142-
setupMocks();
91+
createDatabaseTokenMock.mockRejectedValue(createError);
14392

144-
await expect(
145-
databaseTokenService.generateDatabaseToken(projectId, workspaceId),
146-
).rejects.toThrow(errorMessage);
93+
await expect(
94+
generateDatabaseToken(systemToken, projectId, workspaceId),
95+
).rejects.toThrow('Token creation failed');
14796

148-
expect(
149-
openopsCommonMock.authenticateDefaultUserInOpenOpsTables,
150-
).toHaveBeenCalledTimes(expectedAuthCalls);
151-
expect(createDatabaseTokenMock).toHaveBeenCalledTimes(
152-
expectedCreateTokenCalls,
153-
);
154-
},
155-
);
97+
expect(createDatabaseTokenMock).toHaveBeenCalledTimes(1);
98+
expect(createDatabaseTokenMock).toHaveBeenCalledWith({
99+
name: 'Project_test-project',
100+
workspaceId,
101+
systemToken,
102+
});
156103
});
157104
});

0 commit comments

Comments
 (0)