grafana/public/app/features/profile/state/reducers.test.ts
2021-07-01 09:58:49 +02:00

198 lines
5.6 KiB
TypeScript

import { reducerTester } from '../../../../test/core/redux/reducerTester';
import { OrgRole, TeamPermissionLevel } from '../../../types';
import {
initialUserState,
orgsLoaded,
sessionsLoaded,
setUpdating,
teamsLoaded,
updateTimeZone,
userLoaded,
userReducer,
userSessionRevoked,
UserState,
} from './reducers';
describe('userReducer', () => {
let dateNow: any;
beforeAll(() => {
dateNow = jest.spyOn(Date, 'now').mockImplementation(() => 1609470000000); // 2021-01-01 04:00:00
});
afterAll(() => {
dateNow.mockRestore();
});
describe('when updateTimeZone is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, { ...initialUserState })
.whenActionIsDispatched(updateTimeZone({ timeZone: 'xyz' }))
.thenStateShouldEqual({ ...initialUserState, timeZone: 'xyz' });
});
});
describe('when setUpdating is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, { ...initialUserState, isUpdating: false })
.whenActionIsDispatched(setUpdating({ updating: true }))
.thenStateShouldEqual({ ...initialUserState, isUpdating: true });
});
});
describe('when userLoaded is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, { ...initialUserState, user: null })
.whenActionIsDispatched(
userLoaded({
user: {
id: 2021,
email: 'test@test.com',
isDisabled: true,
login: 'test',
name: 'Test Account',
isGrafanaAdmin: false,
},
})
)
.thenStateShouldEqual({
...initialUserState,
user: {
id: 2021,
email: 'test@test.com',
isDisabled: true,
login: 'test',
name: 'Test Account',
isGrafanaAdmin: false,
},
});
});
});
describe('when teamsLoaded is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, { ...initialUserState, teamsAreLoading: true })
.whenActionIsDispatched(
teamsLoaded({
teams: [
{
id: 1,
email: 'team@team.com',
name: 'Team',
avatarUrl: '/avatar/12345',
memberCount: 4,
permission: TeamPermissionLevel.Admin,
},
],
})
)
.thenStateShouldEqual({
...initialUserState,
teamsAreLoading: false,
teams: [
{
id: 1,
email: 'team@team.com',
name: 'Team',
avatarUrl: '/avatar/12345',
memberCount: 4,
permission: TeamPermissionLevel.Admin,
},
],
});
});
});
describe('when orgsLoaded is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, { ...initialUserState, orgsAreLoading: true })
.whenActionIsDispatched(
orgsLoaded({
orgs: [{ orgId: 1, name: 'Main', role: OrgRole.Viewer }],
})
)
.thenStateShouldEqual({
...initialUserState,
orgsAreLoading: false,
orgs: [{ orgId: 1, name: 'Main', role: OrgRole.Viewer }],
});
});
});
describe('when sessionsLoaded is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, { ...initialUserState, sessionsAreLoading: true })
.whenActionIsDispatched(
sessionsLoaded({
sessions: [
{
id: 1,
browser: 'Chrome',
browserVersion: '90',
osVersion: '95',
clientIp: '192.168.1.1',
createdAt: '2021-01-01 04:00:00',
device: 'Computer',
os: 'Windows',
isActive: false,
seenAt: '1996-01-01 04:00:00',
},
],
})
)
.thenStateShouldEqual({
...initialUserState,
sessionsAreLoading: false,
sessions: [
{
id: 1,
browser: 'Chrome',
browserVersion: '90',
osVersion: '95',
clientIp: '192.168.1.1',
createdAt: 'December 31, 2020',
device: 'Computer',
os: 'Windows',
isActive: false,
seenAt: '25 years ago',
},
],
});
});
});
describe('when userSessionRevoked is dispatched', () => {
it('then state should be correct', () => {
reducerTester<UserState>()
.givenReducer(userReducer, {
...initialUserState,
sessions: [
{
id: 1,
browser: 'Chrome',
browserVersion: '90',
osVersion: '95',
clientIp: '192.168.1.1',
createdAt: '2021-01-01',
device: 'Computer',
os: 'Windows',
isActive: false,
seenAt: '1996-01-01',
},
],
})
.whenActionIsDispatched(userSessionRevoked({ tokenId: 1 }))
.thenStateShouldEqual({
...initialUserState,
sessions: [],
});
});
});
});