2023-02-13 21:09:24 +01:00

68 lines
1.6 KiB
JavaScript

import Vuex from 'vuex'
import { mount } from '@vue/test-utils'
import Privacy from './privacy.vue'
const localVue = global.localVue
describe('privacy.vue', () => {
let wrapper
let mocks
let store
beforeEach(() => {
mocks = {
$t: jest.fn(),
$apollo: {
mutate: jest.fn(),
},
$toast: {
success: jest.fn(),
error: jest.fn(),
},
}
store = new Vuex.Store({
getters: {
'auth/user': () => {
return {
id: 'u343',
name: 'MyAccount',
showShoutsPublicly: true,
}
},
},
})
})
describe('mount', () => {
const Wrapper = () => {
return mount(Privacy, {
store,
mocks,
localVue,
})
}
beforeEach(() => {
wrapper = Wrapper()
})
it('renders', () => {
expect(wrapper.classes('base-card')).toBe(true)
})
it('clicking on submit changes shoutsAllowed to false', async () => {
await wrapper.find('#allow-shouts').setChecked(false)
await wrapper.find('.base-button').trigger('click')
expect(wrapper.vm.shoutsAllowed).toBe(false)
})
it('clicking on submit with a server error shows a toast and shoutsAllowed is still true', async () => {
mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' })
await wrapper.find('#allow-shouts').setChecked(false)
await wrapper.find('.base-button').trigger('click')
expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!')
expect(wrapper.vm.shoutsAllowed).toBe(true)
})
})
})