mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
import addNavigationGuards from './guards'
|
|
import router from './router'
|
|
|
|
const storeCommitMock = jest.fn()
|
|
const storeDispatchMock = jest.fn()
|
|
const apolloQueryMock = jest.fn().mockResolvedValue({
|
|
data: {
|
|
verifyLogin: {
|
|
firstName: 'Peter',
|
|
},
|
|
},
|
|
})
|
|
|
|
const store = {
|
|
commit: storeCommitMock,
|
|
state: {
|
|
token: null,
|
|
},
|
|
dispatch: storeDispatchMock,
|
|
}
|
|
|
|
const apollo = {
|
|
query: apolloQueryMock,
|
|
}
|
|
|
|
addNavigationGuards(router, store, apollo)
|
|
|
|
describe('navigation guards', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
describe('publisher ID', () => {
|
|
it('commits the pid to the store when present', async () => {
|
|
await router.push({ path: 'register', query: { pid: 42 } })
|
|
expect(storeCommitMock).toBeCalledWith('publisherId', '42')
|
|
})
|
|
|
|
it('does not commit the pid when not present', async () => {
|
|
await router.push({ path: 'password' })
|
|
expect(storeCommitMock).not.toBeCalled()
|
|
})
|
|
})
|
|
|
|
describe('authenticate', () => {
|
|
const navGuard = router.beforeHooks[1]
|
|
const next = jest.fn()
|
|
|
|
describe('with valid token', () => {
|
|
beforeEach(() => {
|
|
navGuard({ path: '/authenticate', query: { token: 'valid-token' } }, {}, next)
|
|
})
|
|
|
|
it('commts the token to the store', () => {
|
|
expect(storeCommitMock).toBeCalledWith('token', 'valid-token')
|
|
})
|
|
|
|
it('calls verifyLogin', () => {
|
|
expect(apolloQueryMock).toBeCalled()
|
|
})
|
|
|
|
it('commits login to the store', () => {
|
|
expect(storeDispatchMock).toBeCalledWith('login', { firstName: 'Peter' })
|
|
})
|
|
})
|
|
|
|
describe('with valid token and server error', () => {
|
|
beforeEach(() => {
|
|
apolloQueryMock.mockRejectedValue({
|
|
message: 'Ouch!',
|
|
})
|
|
navGuard({ path: '/authenticate', query: { token: 'valid-token' } }, {}, next)
|
|
})
|
|
|
|
it('dispatches logout to store', () => {
|
|
expect(storeDispatchMock).toBeCalledWith('logout')
|
|
})
|
|
|
|
it('calls next', () => {
|
|
expect(next).toBeCalledWith()
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('authorization', () => {
|
|
const navGuard = router.beforeHooks[2]
|
|
const next = jest.fn()
|
|
|
|
it('redirects to login when not authorized', () => {
|
|
navGuard({ meta: { requiresAuth: true }, query: {} }, {}, next)
|
|
expect(next).toBeCalledWith({ path: '/login' })
|
|
})
|
|
|
|
it('does not redirect to login when authorized', () => {
|
|
store.state.token = 'valid token'
|
|
navGuard({ meta: { requiresAuth: true }, query: {} }, {}, next)
|
|
expect(next).toBeCalledWith()
|
|
})
|
|
})
|
|
})
|