import { config, shallowMount, mount, createLocalVue, RouterLinkStub } from '@vue/test-utils' import NotificationList from './NotificationList.vue' import Notification from './Notification.vue' import Vue from 'vue' import Vuex from 'vuex' import Styleguide from '@human-connection/styleguide' const localVue = createLocalVue() localVue.use(Vuex) localVue.use(Styleguide) localVue.filter('truncate', string => string) config.stubs['no-ssr'] = '' config.stubs['v-popover'] = '' describe('NotificationList.vue', () => { let wrapper let Wrapper let propsData let mocks let stubs let getters let actions let user beforeEach(() => { mocks = { $t: jest.fn() } stubs = { NuxtLink: RouterLinkStub } actions = { 'notifications/markAsRead': jest.fn() } getters = { 'auth/user': () => { return { notifications: [ { id: 'notification-41', read: false, post: { id: 'post-1', title: 'some post title', contentExcerpt: 'this is a post content', author: { id: 'john-1', slug: 'john-doe', name: 'John Doe' } } }, { id: 'notification-42', read: false, post: { id: 'post-2', title: 'another post title', contentExcerpt: 'this is yet another post content', author: { id: 'john-1', slug: 'john-doe', name: 'John Doe' } } } ] } } } }) describe('shallowMount', () => { const Wrapper = () => { const store = new Vuex.Store({ getters, actions }) return shallowMount(NotificationList, { store, propsData, mocks, localVue }) } beforeEach(() => { wrapper = Wrapper() }) it('renders Notification.vue for each notification of the user', () => { expect(wrapper.findAll(Notification)).toHaveLength(2) }) }) describe('mount', () => { const Wrapper = () => { const store = new Vuex.Store({ getters, actions }) return mount(NotificationList, { store, propsData, mocks, stubs, localVue }) } beforeEach(() => { wrapper = Wrapper() }) describe('click on a notification', () => { beforeEach(() => { wrapper .findAll('a') .at(1) .trigger('click') }) it('marks notification as read', () => { expect(actions['notifications/markAsRead'].mock.calls[0][1]).toEqual(42) }) describe('given mutation resolves', () => { it.skip('updates currentUser.notifications', () => {}) }) describe('given mutation rejects', () => { it.skip('displays error warning', () => {}) }) }) }) })