122 lines
3.9 KiB
JavaScript
122 lines
3.9 KiB
JavaScript
import axios from 'axios'
|
|
import * as authModule from './auth'
|
|
|
|
describe('@state/modules/auth', () => {
|
|
it('exports a valid Vuex module', () => {
|
|
expect(authModule).toBeAVuexModule()
|
|
})
|
|
|
|
describe('in a store', () => {
|
|
let store
|
|
beforeEach(() => {
|
|
store = createModuleStore(authModule)
|
|
window.localStorage.clear()
|
|
})
|
|
|
|
it('mutations.SET_CURRENT_USER correctly sets axios default authorization header', () => {
|
|
axios.defaults.headers.common.Authorization = ''
|
|
|
|
store.commit('SET_CURRENT_USER', { token: 'some-token' })
|
|
expect(axios.defaults.headers.common.Authorization).toEqual('some-token')
|
|
|
|
store.commit('SET_CURRENT_USER', null)
|
|
expect(axios.defaults.headers.common.Authorization).toEqual('')
|
|
})
|
|
|
|
it('mutations.SET_CURRENT_USER correctly saves currentUser in localStorage', () => {
|
|
let savedCurrentUser = JSON.parse(
|
|
window.localStorage.getItem('auth.currentUser')
|
|
)
|
|
expect(savedCurrentUser).toEqual(null)
|
|
|
|
const expectedCurrentUser = { token: 'some-token' }
|
|
store.commit('SET_CURRENT_USER', expectedCurrentUser)
|
|
|
|
savedCurrentUser = JSON.parse(
|
|
window.localStorage.getItem('auth.currentUser')
|
|
)
|
|
expect(savedCurrentUser).toEqual(expectedCurrentUser)
|
|
})
|
|
|
|
it('getters.loggedIn returns true when currentUser is an object', () => {
|
|
store.commit('SET_CURRENT_USER', {})
|
|
expect(store.getters.loggedIn).toEqual(true)
|
|
})
|
|
|
|
it('getters.loggedIn returns false when currentUser is null', () => {
|
|
store.commit('SET_CURRENT_USER', null)
|
|
expect(store.getters.loggedIn).toEqual(false)
|
|
})
|
|
|
|
it('actions.logIn resolves to a refreshed currentUser when already logged in', () => {
|
|
expect.assertions(2)
|
|
|
|
store.commit('SET_CURRENT_USER', { token: validUserExample.token })
|
|
return store.dispatch('logIn').then((user) => {
|
|
expect(user).toEqual(validUserExample)
|
|
expect(store.state.currentUser).toEqual(validUserExample)
|
|
})
|
|
})
|
|
|
|
it('actions.logIn commits the currentUser and resolves to the user when NOT already logged in and provided a correct username and password', () => {
|
|
expect.assertions(2)
|
|
|
|
return store
|
|
.dispatch('logIn', { username: 'admin', password: 'password' })
|
|
.then((user) => {
|
|
expect(user).toEqual(validUserExample)
|
|
expect(store.state.currentUser).toEqual(validUserExample)
|
|
})
|
|
})
|
|
|
|
it('actions.logIn rejects with 401 when NOT already logged in and provided an incorrect username and password', () => {
|
|
expect.assertions(1)
|
|
|
|
return store
|
|
.dispatch('logIn', {
|
|
username: 'bad username',
|
|
password: 'bad password',
|
|
})
|
|
.catch((error) => {
|
|
expect(error.message).toEqual('Request failed with status code 401')
|
|
})
|
|
})
|
|
|
|
it('actions.validate resolves to null when currentUser is null', () => {
|
|
expect.assertions(1)
|
|
|
|
store.commit('SET_CURRENT_USER', null)
|
|
return store.dispatch('validate').then((user) => {
|
|
expect(user).toEqual(null)
|
|
})
|
|
})
|
|
|
|
it('actions.validate resolves to null when currentUser contains an invalid token', () => {
|
|
expect.assertions(2)
|
|
|
|
store.commit('SET_CURRENT_USER', { token: 'invalid-token' })
|
|
return store.dispatch('validate').then((user) => {
|
|
expect(user).toEqual(null)
|
|
expect(store.state.currentUser).toEqual(null)
|
|
})
|
|
})
|
|
|
|
it('actions.validate resolves to a user when currentUser contains a valid token', () => {
|
|
expect.assertions(2)
|
|
|
|
store.commit('SET_CURRENT_USER', { token: validUserExample.token })
|
|
return store.dispatch('validate').then((user) => {
|
|
expect(user).toEqual(validUserExample)
|
|
expect(store.state.currentUser).toEqual(validUserExample)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
const validUserExample = {
|
|
id: 1,
|
|
username: 'admin',
|
|
name: 'Vue Master',
|
|
token: 'valid-token-for-admin',
|
|
}
|