Files
hammond/ui/src/state/modules/auth.unit.js
Akhil Gupta d25c30a7b2 first commit
2021-05-29 15:20:50 +05:30

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',
}