2024-04-24 10:15:12 +00:00
|
|
|
import { vi, describe, expect, it, beforeAll, beforeEach } from 'vitest';
|
2024-05-16 12:05:39 +00:00
|
|
|
import { axios } from 'app/test/vitest/helper';
|
2023-01-03 13:17:22 +00:00
|
|
|
import { useSession } from 'composables/useSession';
|
|
|
|
import { useState } from 'composables/useState';
|
2022-12-20 11:30:25 +00:00
|
|
|
|
|
|
|
const session = useSession();
|
|
|
|
const state = useState();
|
|
|
|
|
|
|
|
describe('session', () => {
|
2024-05-16 12:05:39 +00:00
|
|
|
|
2022-12-20 11:30:25 +00:00
|
|
|
describe('getToken / setToken', () => {
|
|
|
|
it('should return an empty string if no token is found in local or session storage', async () => {
|
2022-12-22 12:46:43 +00:00
|
|
|
const expectedToken = '';
|
2022-12-20 11:30:25 +00:00
|
|
|
|
|
|
|
const token = session.getToken();
|
|
|
|
|
|
|
|
expect(token).toEqual(expectedToken);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return the token stored in local or session storage', async () => {
|
2022-12-22 12:46:43 +00:00
|
|
|
const expectedToken = 'myToken';
|
2022-12-20 11:30:25 +00:00
|
|
|
const data = {
|
|
|
|
token: expectedToken,
|
2022-12-22 12:46:43 +00:00
|
|
|
keepLogin: false,
|
|
|
|
};
|
2022-12-20 11:30:25 +00:00
|
|
|
session.setToken(data);
|
|
|
|
|
|
|
|
const token = session.getToken();
|
|
|
|
|
|
|
|
expect(token).toEqual(expectedToken);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('destroy', () => {
|
|
|
|
it('should remove the token from the local storage and set a blank user', async () => {
|
|
|
|
const previousUser = {
|
|
|
|
id: 999,
|
|
|
|
name: `T'Challa`,
|
|
|
|
nickname: 'Black Panther',
|
|
|
|
lang: 'en',
|
|
|
|
darkMode: false,
|
2022-12-22 12:46:43 +00:00
|
|
|
};
|
2022-12-20 11:30:25 +00:00
|
|
|
const expectedUser = {
|
|
|
|
id: 0,
|
|
|
|
name: '',
|
|
|
|
nickname: '',
|
|
|
|
lang: '',
|
|
|
|
darkMode: null,
|
2022-12-22 12:46:43 +00:00
|
|
|
};
|
2022-12-20 11:30:25 +00:00
|
|
|
let user = state.getUser();
|
|
|
|
|
|
|
|
localStorage.setItem('token', 'tokenToBeGone');
|
2022-12-22 12:46:43 +00:00
|
|
|
state.setUser(previousUser);
|
2022-12-20 11:30:25 +00:00
|
|
|
|
|
|
|
expect(localStorage.getItem('token')).toEqual('tokenToBeGone');
|
|
|
|
expect(user.value).toEqual(previousUser);
|
|
|
|
|
2024-02-28 12:15:59 +00:00
|
|
|
vi.spyOn(axios, 'post').mockResolvedValue({ data: true });
|
|
|
|
await session.destroy();
|
2022-12-20 11:30:25 +00:00
|
|
|
|
|
|
|
user = state.getUser();
|
|
|
|
expect(localStorage.getItem('token')).toBeNull();
|
|
|
|
expect(user.value).toEqual(expectedUser);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
describe(
|
|
|
|
'login',
|
|
|
|
() => {
|
|
|
|
const expectedUser = {
|
|
|
|
id: 999,
|
|
|
|
name: `T'Challa`,
|
|
|
|
nickname: 'Black Panther',
|
|
|
|
lang: 'en',
|
|
|
|
userConfig: {
|
|
|
|
darkMode: false,
|
2022-12-22 12:46:43 +00:00
|
|
|
},
|
2024-04-24 10:15:12 +00:00
|
|
|
};
|
|
|
|
const rolesData = [
|
|
|
|
{
|
|
|
|
role: {
|
|
|
|
name: 'salesPerson',
|
|
|
|
},
|
2022-12-22 12:46:43 +00:00
|
|
|
},
|
2024-04-24 10:15:12 +00:00
|
|
|
{
|
|
|
|
role: {
|
|
|
|
name: 'admin',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
2024-05-16 12:05:39 +00:00
|
|
|
beforeEach(() => {
|
|
|
|
vi.spyOn(axios, 'get').mockImplementation((url) => {
|
|
|
|
if(url === 'VnUsers/acls') return Promise.resolve({data: []});
|
|
|
|
return Promise.resolve({data: { roles: rolesData, user: expectedUser }});
|
|
|
|
});
|
|
|
|
})
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
it('should fetch the user roles and then set token in the sessionStorage', async () => {
|
|
|
|
const expectedRoles = ['salesPerson', 'admin'];
|
|
|
|
const expectedToken = 'mySessionToken';
|
|
|
|
const expectedTokenMultimedia = 'mySessionTokenMultimedia';
|
|
|
|
const keepLogin = false;
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
await session.login({
|
|
|
|
token: expectedToken,
|
|
|
|
tokenMultimedia: expectedTokenMultimedia,
|
|
|
|
keepLogin,
|
|
|
|
});
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
const roles = state.getRoles();
|
|
|
|
const localToken = localStorage.getItem('token');
|
|
|
|
const sessionToken = sessionStorage.getItem('token');
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
expect(roles.value).toEqual(expectedRoles);
|
|
|
|
expect(localToken).toBeNull();
|
|
|
|
expect(sessionToken).toEqual(expectedToken);
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
await session.destroy(); // this clears token and user for any other test
|
2022-12-20 11:30:25 +00:00
|
|
|
});
|
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
it('should fetch the user roles and then set token in the localStorage', async () => {
|
|
|
|
const expectedRoles = ['salesPerson', 'admin'];
|
|
|
|
const expectedToken = 'myLocalToken';
|
|
|
|
const expectedTokenMultimedia = 'myLocalTokenMultimedia';
|
|
|
|
const keepLogin = true;
|
|
|
|
|
|
|
|
await session.login({
|
|
|
|
token: expectedToken,
|
|
|
|
tokenMultimedia: expectedTokenMultimedia,
|
|
|
|
keepLogin,
|
|
|
|
});
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
const roles = state.getRoles();
|
|
|
|
const localToken = localStorage.getItem('token');
|
|
|
|
const sessionToken = sessionStorage.getItem('token');
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
expect(roles.value).toEqual(expectedRoles);
|
|
|
|
expect(localToken).toEqual(expectedToken);
|
|
|
|
expect(sessionToken).toBeNull();
|
2022-12-20 11:30:25 +00:00
|
|
|
|
2024-04-24 10:15:12 +00:00
|
|
|
await session.destroy(); // this clears token and user for any other test
|
|
|
|
});
|
|
|
|
},
|
|
|
|
{}
|
|
|
|
);
|
|
|
|
|
|
|
|
describe('RenewToken', () => {
|
|
|
|
const expectedToken = 'myToken';
|
|
|
|
const expectedTokenMultimedia = 'myTokenMultimedia';
|
|
|
|
const currentDate = new Date();
|
|
|
|
beforeAll(() => {
|
|
|
|
const tokenConfig = {
|
|
|
|
id: 1,
|
|
|
|
renewPeriod: 21600,
|
|
|
|
courtesyTime: 60,
|
|
|
|
renewInterval: 300,
|
|
|
|
};
|
|
|
|
state.setTokenConfig(tokenConfig);
|
|
|
|
sessionStorage.setItem('renewPeriod', 1);
|
|
|
|
});
|
|
|
|
it('NOT Should renewToken', async () => {
|
|
|
|
const data = {
|
|
|
|
token: expectedToken,
|
|
|
|
tokenMultimedia: expectedTokenMultimedia,
|
|
|
|
keepLogin: false,
|
|
|
|
ttl: 1,
|
|
|
|
created: Date.now(),
|
|
|
|
};
|
|
|
|
session.setSession(data);
|
|
|
|
expect(sessionStorage.getItem('keepLogin')).toBeFalsy();
|
|
|
|
expect(sessionStorage.getItem('created')).toBeDefined();
|
|
|
|
expect(sessionStorage.getItem('ttl')).toEqual(1);
|
|
|
|
await session.checkValidity();
|
|
|
|
expect(sessionStorage.getItem('token')).toEqual(expectedToken);
|
|
|
|
expect(sessionStorage.getItem('tokenMultimedia')).toEqual(
|
|
|
|
expectedTokenMultimedia
|
|
|
|
);
|
|
|
|
});
|
|
|
|
it('Should renewToken', async () => {
|
|
|
|
currentDate.setMinutes(currentDate.getMinutes() - 100);
|
|
|
|
const data = {
|
|
|
|
token: expectedToken,
|
|
|
|
tokenMultimedia: expectedTokenMultimedia,
|
|
|
|
keepLogin: false,
|
|
|
|
ttl: 1,
|
|
|
|
created: currentDate,
|
|
|
|
};
|
|
|
|
session.setSession(data);
|
|
|
|
|
|
|
|
vi.spyOn(axios, 'post')
|
|
|
|
.mockResolvedValueOnce({
|
|
|
|
data: { id: '' },
|
|
|
|
})
|
|
|
|
.mockResolvedValueOnce({
|
|
|
|
data: {
|
|
|
|
id: '',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
expect(sessionStorage.getItem('keepLogin')).toBeFalsy();
|
|
|
|
expect(sessionStorage.getItem('created')).toBeDefined();
|
|
|
|
expect(sessionStorage.getItem('ttl')).toEqual(1);
|
|
|
|
await session.checkValidity();
|
|
|
|
expect(sessionStorage.getItem('token')).not.toEqual(expectedToken);
|
|
|
|
expect(sessionStorage.getItem('tokenMultimedia')).not.toEqual(
|
|
|
|
expectedTokenMultimedia
|
|
|
|
);
|
2022-12-20 11:30:25 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|