Skip to content

Commit 6bd5165

Browse files
committed
Adapted to user/settings changes (fractal-server 2.17)
1 parent 9d3fc1f commit 6bd5165

37 files changed

+243
-805
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
* Updated admin user pages to associate users with profiles;
1212
* Updated admin settings page;
1313
* Merged "My Profile" and "My settings" pages;
14+
* Merged user settings into user (\#862);
15+
* Adapted to OAuth2 changes (\#862);
1416

1517
# 1.20.0
1618

__tests__/mock/mock-types.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ export function mockUser(fields = {}) {
1212
group_ids_names: [],
1313
oauth_accounts: [],
1414
profile_id: 1,
15+
project_dir: '/tmp',
16+
slurm_accounts: [],
1517
...fields
1618
};
1719
}

__tests__/v2/CreateDatasetModal.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function mockFetch(project_dir) {
4444
status: 200,
4545
json: () =>
4646
new Promise((resolve) => {
47-
if (url === '/api/auth/current-user/settings') {
47+
if (url === '/api/auth/current-user') {
4848
resolve({
4949
project_dir
5050
});

__tests__/v2/TaskGroupActivities.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ describe('TaskGroupActivities', () => {
102102
group_ids_names: [],
103103
oauth_accounts: [],
104104
profile_id: 1,
105+
project_dir: '/tmp',
106+
slurm_accounts: []
105107
}
106108
]
107109
}

__tests__/v2/UserEditor.test.js

Lines changed: 62 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -39,35 +39,27 @@ import UserEditor from '../../src/lib/components/v2/admin/UserEditor.svelte';
3939
describe('UserEditor', () => {
4040
beforeEach(() => {
4141
/** @type {import('vitest').Mock} */ (fetch).mockClear();
42+
mockResourcesAndProfiles();
4243
});
4344

4445
const selectedUser = mockUser();
4546

46-
/**
47-
* @type {() => Promise<Response>}
48-
*/
49-
const mockSaveUser = vi.fn();
50-
5147
it('Update settings - success', async () => {
52-
const mockRequest = mockSettingsUpdate({
53-
ok: true,
54-
status: 200,
55-
json: () =>
56-
new Promise((resolve) =>
57-
resolve({
58-
slurm_accounts: [],
59-
project_dir: '/path/to/project/dir'
60-
})
61-
)
62-
});
63-
6448
const user = userEvent.setup();
6549

50+
const mockSaveUser = vi.fn(async (u) => {
51+
return /** @type {Response} */ ({
52+
ok: true,
53+
status: 200,
54+
json: () => new Promise((resolve) => resolve(u))
55+
});
56+
});
57+
6658
render(UserEditor, {
6759
props: {
6860
runnerBackend: 'slurm_sudo',
69-
user: selectedUser,
70-
settings: {
61+
user: {
62+
...selectedUser,
7163
slurm_accounts: [],
7264
project_dir: null
7365
},
@@ -79,42 +71,41 @@ describe('UserEditor', () => {
7971
await user.click(screen.getByRole('button', { name: 'Save' }));
8072
await screen.findByText('User successfully updated');
8173

82-
expect(mockRequest).toHaveBeenCalledWith(
83-
expect.anything(),
74+
expect(mockSaveUser).toHaveBeenCalledWith(
8475
expect.objectContaining({
85-
body: JSON.stringify({
86-
slurm_accounts: [],
87-
project_dir: '/path/to/project/dir'
88-
})
76+
slurm_accounts: [],
77+
project_dir: '/path/to/project/dir'
8978
})
9079
);
9180
});
9281

9382
it('Update settings - validation error', async () => {
94-
const mockRequest = mockSettingsUpdate({
95-
ok: false,
96-
status: 422,
97-
json: () =>
98-
new Promise((resolve) =>
99-
resolve({
100-
detail: [
101-
{
102-
loc: ['body', 'project_dir'],
103-
msg: 'mocked_error',
104-
type: 'value_error'
105-
}
106-
]
107-
})
108-
)
109-
});
110-
11183
const user = userEvent.setup();
11284

85+
const mockSaveUser = vi.fn(async () => {
86+
return /** @type {Response} */ ({
87+
ok: false,
88+
status: 422,
89+
json: () =>
90+
new Promise((resolve) =>
91+
resolve({
92+
detail: [
93+
{
94+
loc: ['body', 'project_dir'],
95+
msg: 'mocked_error',
96+
type: 'value_error'
97+
}
98+
]
99+
})
100+
)
101+
});
102+
});
103+
113104
render(UserEditor, {
114105
props: {
115106
runnerBackend: 'slurm_sudo',
116-
user: selectedUser,
117-
settings: {
107+
user: {
108+
...selectedUser,
118109
slurm_accounts: [],
119110
project_dir: null
120111
},
@@ -126,37 +117,30 @@ describe('UserEditor', () => {
126117
await user.click(screen.getByRole('button', { name: 'Save' }));
127118
await screen.findByText('mocked_error');
128119

129-
expect(mockRequest).toHaveBeenCalledWith(
130-
expect.anything(),
120+
expect(mockSaveUser).toHaveBeenCalledWith(
131121
expect.objectContaining({
132-
body: JSON.stringify({
133-
slurm_accounts: [],
134-
project_dir: 'xxx'
135-
})
122+
slurm_accounts: [],
123+
project_dir: 'xxx'
136124
})
137125
);
138126
});
139127

140128
it('Update settings - add slurm accounts', async () => {
141-
const mockRequest = mockSettingsUpdate({
142-
ok: true,
143-
status: 200,
144-
json: () =>
145-
new Promise((resolve) =>
146-
resolve({
147-
slurm_accounts: ['foo', 'bar'],
148-
project_dir: '/path/to/project/dir'
149-
})
150-
)
129+
const mockSaveUser = vi.fn(async (u) => {
130+
return /** @type {Response} */ ({
131+
ok: true,
132+
status: 200,
133+
json: () => new Promise((resolve) => resolve(u))
134+
});
151135
});
152136

153137
const user = userEvent.setup();
154138

155139
render(UserEditor, {
156140
props: {
157141
runnerBackend: 'slurm_sudo',
158-
user: selectedUser,
159-
settings: {
142+
user: {
143+
...selectedUser,
160144
slurm_accounts: [],
161145
project_dir: '/path/to/project/dir'
162146
},
@@ -174,37 +158,30 @@ describe('UserEditor', () => {
174158
await user.click(screen.getByRole('button', { name: 'Save' }));
175159
await screen.findByText('User successfully updated');
176160

177-
expect(mockRequest).toHaveBeenCalledWith(
178-
expect.anything(),
161+
expect(mockSaveUser).toHaveBeenCalledWith(
179162
expect.objectContaining({
180-
body: JSON.stringify({
181-
slurm_accounts: ['foo', 'bar'],
182-
project_dir: '/path/to/project/dir'
183-
})
163+
slurm_accounts: ['foo', 'bar'],
164+
project_dir: '/path/to/project/dir'
184165
})
185166
);
186167
});
187168

188169
it('Update settings - remove slurm account', async () => {
189-
const mockRequest = mockSettingsUpdate({
190-
ok: true,
191-
status: 200,
192-
json: () =>
193-
new Promise((resolve) =>
194-
resolve({
195-
slurm_accounts: ['foo', 'bar'],
196-
project_dir: '/path/to/project/dir'
197-
})
198-
)
170+
const mockSaveUser = vi.fn(async (u) => {
171+
return /** @type {Response} */ ({
172+
ok: true,
173+
status: 200,
174+
json: () => new Promise((resolve) => resolve(u))
175+
});
199176
});
200177

201178
const user = userEvent.setup();
202179

203180
render(UserEditor, {
204181
props: {
205182
runnerBackend: 'slurm_sudo',
206-
user: selectedUser,
207-
settings: {
183+
user: {
184+
...selectedUser,
208185
slurm_accounts: ['foo', 'bar'],
209186
project_dir: '/path/to/project/dir'
210187
},
@@ -219,19 +196,16 @@ describe('UserEditor', () => {
219196
await user.click(screen.getByRole('button', { name: 'Save' }));
220197
await screen.findByText('User successfully updated');
221198

222-
expect(mockRequest).toHaveBeenCalledWith(
223-
expect.anything(),
199+
expect(mockSaveUser).toHaveBeenCalledWith(
224200
expect.objectContaining({
225-
body: JSON.stringify({
226-
slurm_accounts: ['foo'],
227-
project_dir: '/path/to/project/dir'
228-
})
201+
slurm_accounts: ['foo'],
202+
project_dir: '/path/to/project/dir'
229203
})
230204
);
231205
});
232206
});
233207

234-
function mockSettingsUpdate(updateSettings) {
208+
function mockResourcesAndProfiles() {
235209
return /** @type {import('vitest').Mock} */ (fetch)
236210
.mockResolvedValueOnce({
237211
ok: true,
@@ -250,6 +224,5 @@ function mockSettingsUpdate(updateSettings) {
250224
status: 200,
251225
// mock profiles
252226
json: () => new Promise((resolve) => resolve([{ id: 1 }]))
253-
})
254-
.mockResolvedValue(updateSettings);
227+
});
255228
}

components/src/lib/types/api.d.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,15 @@ export type User = {
1111
profile_id: number | null;
1212
password?: string;
1313
group_ids_names: Array<[number, string]> | null;
14+
project_dir: string | null;
15+
slurm_accounts: string[];
1416
oauth_accounts: Array<{
1517
id: number;
1618
account_email: string;
1719
oauth_name: string;
1820
}>;
1921
};
2022

21-
export type UserSettings = {
22-
slurm_accounts: string[];
23-
project_dir: string | null;
24-
};
25-
2623
export type ProfileInfo = {
2724
has_profile: boolean;
2825
resource_name: string | null;

0 commit comments

Comments
 (0)