refine Semi UI account governance
This commit is contained in:
@@ -145,6 +145,54 @@ test('pages and filters large vehicle grants without nesting a vehicle-list scro
|
||||
expect(screen.getByText('第 1–1 条,共 1 辆')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('makes draft state explicit, protects bulk removal and preserves edits across a same-revision refresh', async () => {
|
||||
const customer = {
|
||||
id: 7,
|
||||
username: 'customer-east',
|
||||
displayName: '华东客户',
|
||||
userType: 'customer',
|
||||
status: 'enabled',
|
||||
customerRef: '',
|
||||
tenantRef: '',
|
||||
authProvider: 'local',
|
||||
menuKeys: ['monitor', 'vehicles', 'tracks', 'statistics'],
|
||||
vehicleVins: ['VIN001'],
|
||||
vehicles: [{ vin: 'VIN001', plate: '粤A11111', validFrom: '2026-06-05T00:00:00+08:00', sourceSystem: 'manual', grantedBy: '平台管理员' }],
|
||||
grantHistory: [],
|
||||
createdAt: '2026-07-16T00:00:00Z',
|
||||
updatedAt: '2026-07-16T00:00:00Z'
|
||||
};
|
||||
mocks.adminUsers.mockResolvedValue([customer]);
|
||||
const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
|
||||
render(<QueryClientProvider client={client}><UsersPage /></QueryClientProvider>);
|
||||
|
||||
fireEvent.click(await screen.findByRole('button', { name: /选择客户 华东客户/ }));
|
||||
expect(screen.getByText('已同步')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: '保存权限' })).toBeDisabled();
|
||||
|
||||
fireEvent.click(screen.getByRole('tab', { name: '登录身份' }));
|
||||
const displayName = screen.getByDisplayValue('华东客户');
|
||||
fireEvent.change(displayName, { target: { value: '华东客户(更新)' } });
|
||||
expect(screen.getByText('待保存')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: '保存权限' })).toBeEnabled();
|
||||
|
||||
client.setQueryData(['admin-users'], [{ ...customer }]);
|
||||
await waitFor(() => expect(screen.getByDisplayValue('华东客户(更新)')).toBeInTheDocument());
|
||||
|
||||
fireEvent.click(screen.getByRole('tab', { name: /车辆权限/ }));
|
||||
fireEvent.click(screen.getByRole('button', { name: '清空全部 1 辆车辆权限' }));
|
||||
expect(await screen.findByText('清空 1 辆车辆权限?')).toBeInTheDocument();
|
||||
fireEvent.click(screen.getByRole('button', { name: '确认清空' }));
|
||||
await waitFor(() => expect(screen.queryByRole('button', { name: '移除 粤A11111' })).not.toBeInTheDocument());
|
||||
expect(screen.getByText('已从草稿移除 1 辆车,保存后生效')).toBeInTheDocument();
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: '关闭账号详情' }));
|
||||
expect(await screen.findByText('放弃未保存的更改?')).toBeInTheDocument();
|
||||
fireEvent.click(screen.getByRole('button', { name: 'cancel' }));
|
||||
expect(document.querySelector('.v2-user-editor-form')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: '保存权限' })).toBeEnabled();
|
||||
});
|
||||
|
||||
test('keeps the customer directory visible on mobile and opens details on demand', async () => {
|
||||
layout.mobile = true;
|
||||
mocks.adminUsers.mockResolvedValue([{
|
||||
|
||||
Reference in New Issue
Block a user