Alina Beck 77f4810ddc set up global localVue
by setting up localVue with all required plugins (such as styleguide and vuex)
in a separate testSetup file we can avoid doing this individually in all component tests
the testSetup is executed before each test suite, so each test file gets a fresh
instance of localVue
2019-11-20 12:31:40 +03:00

125 lines
3.6 KiB
JavaScript

import { mount } from '@vue/test-utils'
import Emotions from './Emotions.vue'
import Vuex from 'vuex'
import PostMutations from '~/graphql/PostMutations.js'
const localVue = global.localVue
describe('Emotions.vue', () => {
let wrapper
let mocks
let propsData
let getters
let funnyButton
let funnyImage
const funnyImageSrc = '/img/svg/emoji/funny_color.svg'
beforeEach(() => {
mocks = {
$apollo: {
mutate: jest
.fn()
.mockResolvedValueOnce({
data: {
AddPostEmotions: {
to: { id: 'p143' },
data: { emotion: 'happy' },
},
},
})
.mockResolvedValueOnce({
data: {
RemovePostEmotions: {
from: { id: 'u176' },
to: { id: 'p143' },
data: { emotion: 'happy' },
},
},
}),
query: jest.fn().mockResolvedValue({
data: {
PostsEmotionsCountByEmotion: 1,
},
}),
},
$t: jest.fn(),
}
propsData = {
post: { id: 'p143' },
}
getters = {
'auth/user': () => {
return { id: 'u176' }
},
}
})
describe('mount', () => {
const Wrapper = () => {
const store = new Vuex.Store({
getters,
})
return mount(Emotions, { mocks, propsData, store, localVue })
}
beforeEach(() => {
wrapper = Wrapper()
})
it("queries the post's emotions count for each of the 5 emotions", () => {
expect(mocks.$apollo.query).toHaveBeenCalledTimes(5)
})
describe('adding emotions', () => {
let expectedParams
beforeEach(() => {
wrapper.vm.PostsEmotionsCountByEmotion.funny = 0
funnyButton = wrapper.findAll('button').at(0)
funnyButton.trigger('click')
})
it('shows the colored image when the button is active', () => {
funnyImage = wrapper.findAll('img').at(0)
expect(funnyImage.attributes().src).toEqual(funnyImageSrc)
})
it('sends the AddPostEmotionsMutation for an emotion when clicked', () => {
expectedParams = {
mutation: PostMutations().AddPostEmotionsMutation,
variables: { to: { id: 'p143' }, data: { emotion: 'funny' } },
}
expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams))
})
it('increases the PostsEmotionsCountByEmotion for the emotion clicked', () => {
expect(wrapper.vm.PostsEmotionsCountByEmotion.funny).toEqual(1)
})
it('adds an emotion to selectedEmotions to show the colored image when the button is active', () => {
expect(wrapper.vm.selectedEmotions).toEqual(['funny'])
})
describe('removing emotions', () => {
beforeEach(() => {
funnyButton.trigger('click')
})
it('sends the RemovePostEmotionsMutation when a user clicks on an active emotion', () => {
expectedParams = {
mutation: PostMutations().RemovePostEmotionsMutation,
variables: { to: { id: 'p143' }, data: { emotion: 'funny' } },
}
expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams))
})
it('decreases the PostsEmotionsCountByEmotion for the emotion clicked', async () => {
expect(wrapper.vm.PostsEmotionsCountByEmotion.funny).toEqual(0)
})
it('removes an emotion from selectedEmotions to show the default image', async () => {
expect(wrapper.vm.selectedEmotions).toEqual([])
})
})
})
})
})