mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-20 03:12:15 +00:00
153 lines
3.5 KiB
TypeScript
153 lines
3.5 KiB
TypeScript
import type { CurrentUserResponse } from '@n8n/rest-api-client/api/users';
|
|
import { useUsersStore } from './users.store';
|
|
import { createPinia, setActivePinia } from 'pinia';
|
|
|
|
const { loginCurrentUser, inviteUsers } = vi.hoisted(() => {
|
|
return {
|
|
loginCurrentUser: vi.fn(),
|
|
identify: vi.fn(),
|
|
inviteUsers: vi.fn(),
|
|
};
|
|
});
|
|
|
|
vi.mock('@n8n/rest-api-client/api/users', () => ({
|
|
loginCurrentUser,
|
|
}));
|
|
|
|
vi.mock('@/api/invitation', () => ({
|
|
inviteUsers,
|
|
}));
|
|
|
|
vi.mock('@n8n/stores/useRootStore', () => ({
|
|
useRootStore: vi.fn(() => ({
|
|
instanceId: 'test-instance-id',
|
|
})),
|
|
}));
|
|
|
|
const mockUser: CurrentUserResponse = {
|
|
id: '1',
|
|
firstName: 'John Doe',
|
|
role: 'global:owner',
|
|
isPending: false,
|
|
};
|
|
|
|
describe('users.store', () => {
|
|
beforeEach(() => {
|
|
vi.restoreAllMocks();
|
|
setActivePinia(createPinia());
|
|
});
|
|
|
|
describe('loginWithCookie', () => {
|
|
it('should set current user', async () => {
|
|
const usersStore = useUsersStore();
|
|
|
|
loginCurrentUser.mockResolvedValueOnce(mockUser);
|
|
|
|
await usersStore.loginWithCookie();
|
|
|
|
expect(loginCurrentUser).toHaveBeenCalled();
|
|
expect(usersStore.currentUserId).toEqual(mockUser.id);
|
|
expect(usersStore.currentUser).toEqual({
|
|
...mockUser,
|
|
fullName: `${mockUser.firstName} `,
|
|
isDefaultUser: false,
|
|
isPendingUser: false,
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('inviteUsers', () => {
|
|
it('should add pending user to the store', async () => {
|
|
const usersStore = useUsersStore();
|
|
|
|
inviteUsers.mockResolvedValueOnce([
|
|
{
|
|
user: { id: 'random-id', email: 'test@n8n.io', emailSent: true, role: 'global:member' },
|
|
},
|
|
]);
|
|
|
|
await usersStore.inviteUsers([{ email: 'test@n8n.io', role: 'global:member' }]);
|
|
|
|
expect(usersStore.allUsers[0]).toMatchObject(
|
|
expect.objectContaining({
|
|
id: 'random-id',
|
|
email: 'test@n8n.io',
|
|
role: 'global:member',
|
|
isPending: true,
|
|
isDefaultUser: false,
|
|
isPendingUser: true,
|
|
fullName: undefined,
|
|
emailSent: true,
|
|
}),
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('isCalloutDismissed', () => {
|
|
it('should return true if callout is dismissed', () => {
|
|
const usersStore = useUsersStore();
|
|
|
|
usersStore.usersById['1'] = {
|
|
...mockUser,
|
|
isDefaultUser: false,
|
|
isPendingUser: false,
|
|
mfaEnabled: false,
|
|
settings: {
|
|
dismissedCallouts: {
|
|
testCallout: true,
|
|
},
|
|
},
|
|
};
|
|
usersStore.currentUserId = '1';
|
|
|
|
const isDismissed = usersStore.isCalloutDismissed('testCallout');
|
|
expect(isDismissed).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('setCalloutDismissed', () => {
|
|
it('should set callout as dismissed in user settings', () => {
|
|
const usersStore = useUsersStore();
|
|
|
|
usersStore.usersById['1'] = {
|
|
...mockUser,
|
|
isDefaultUser: false,
|
|
isPendingUser: false,
|
|
mfaEnabled: false,
|
|
settings: {},
|
|
};
|
|
usersStore.currentUserId = '1';
|
|
|
|
usersStore.setCalloutDismissed('testCallout');
|
|
|
|
expect(usersStore.usersById['1'].settings?.dismissedCallouts).toEqual({
|
|
testCallout: true,
|
|
});
|
|
});
|
|
|
|
it('should not lose existing dismissed callouts', () => {
|
|
const usersStore = useUsersStore();
|
|
|
|
usersStore.usersById['1'] = {
|
|
...mockUser,
|
|
isDefaultUser: false,
|
|
isPendingUser: false,
|
|
mfaEnabled: false,
|
|
settings: {
|
|
dismissedCallouts: {
|
|
previousCallout: true,
|
|
},
|
|
},
|
|
};
|
|
usersStore.currentUserId = '1';
|
|
|
|
usersStore.setCalloutDismissed('testCallout');
|
|
|
|
expect(usersStore.usersById['1'].settings?.dismissedCallouts).toEqual({
|
|
previousCallout: true,
|
|
testCallout: true,
|
|
});
|
|
});
|
|
});
|
|
});
|