AdminSettingsModal previously left onRefreshUsers as a dead prop, so newly created users never reached App allUsers/localStorage and Create Project member candidates stayed stale (UI-01). Wire syncAdminUserDirectories, surface refresh errors, and document the residual cross-device directory gap. Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { syncAdminUserDirectories } from './adminUserDirectorySync';
|
|
|
|
test('syncAdminUserDirectories calls local reload then parent onRefreshUsers', async () => {
|
|
const order: string[] = [];
|
|
await syncAdminUserDirectories({
|
|
reloadLocalUsers: async () => {
|
|
order.push('local');
|
|
},
|
|
onRefreshUsers: async () => {
|
|
order.push('parent');
|
|
},
|
|
});
|
|
assert.deepEqual(order, ['local', 'parent']);
|
|
});
|
|
|
|
test('syncAdminUserDirectories fails closed when onRefreshUsers is a dead/missing prop', async () => {
|
|
let localCalled = false;
|
|
await assert.rejects(
|
|
async () =>
|
|
syncAdminUserDirectories({
|
|
reloadLocalUsers: async () => {
|
|
localCalled = true;
|
|
},
|
|
}),
|
|
/onRefreshUsers 未绑定/,
|
|
);
|
|
assert.equal(localCalled, true);
|
|
});
|
|
|
|
test('syncAdminUserDirectories surfaces parent refresh errors (no silent swallow)', async () => {
|
|
await assert.rejects(
|
|
async () =>
|
|
syncAdminUserDirectories({
|
|
reloadLocalUsers: async () => undefined,
|
|
onRefreshUsers: async () => {
|
|
throw new Error('getAdminUsers failed');
|
|
},
|
|
}),
|
|
/getAdminUsers failed/,
|
|
);
|
|
});
|