mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
189 lines
4.7 KiB
JavaScript
189 lines
4.7 KiB
JavaScript
import { mount } from '@vue/test-utils'
|
|
import GroupMember from './GroupMember.vue'
|
|
import { changeGroupMemberRoleMutation, removeUserFromGroupMutation } from '~/graphql/groups.js'
|
|
|
|
const localVue = global.localVue
|
|
|
|
const propsData = {
|
|
groupId: 'group-id',
|
|
groupMembers: [
|
|
{
|
|
slug: 'owner',
|
|
id: 'owner',
|
|
myRoleInGroup: 'owner',
|
|
},
|
|
{
|
|
slug: 'user',
|
|
id: 'user',
|
|
myRoleInGroup: 'usual',
|
|
},
|
|
],
|
|
}
|
|
|
|
const stubs = {
|
|
'nuxt-link': true,
|
|
}
|
|
|
|
const apolloMock = jest
|
|
.fn()
|
|
.mockRejectedValueOnce({ message: 'Oh no!' })
|
|
.mockResolvedValue({
|
|
data: {
|
|
ChangeGroupMemberRole: {
|
|
slug: 'user',
|
|
id: 'user',
|
|
myRoleInGroup: 'admin',
|
|
},
|
|
},
|
|
})
|
|
|
|
const toastErrorMock = jest.fn()
|
|
const toastSuccessMock = jest.fn()
|
|
|
|
describe('GroupMember', () => {
|
|
let wrapper
|
|
let mocks
|
|
|
|
beforeEach(() => {
|
|
mocks = {
|
|
$t: jest.fn((t) => t),
|
|
$apollo: {
|
|
mutate: apolloMock,
|
|
},
|
|
$toast: {
|
|
error: toastErrorMock,
|
|
success: toastSuccessMock,
|
|
},
|
|
}
|
|
})
|
|
|
|
describe('mount', () => {
|
|
const Wrapper = () => {
|
|
return mount(GroupMember, { propsData, mocks, localVue, stubs })
|
|
}
|
|
|
|
beforeEach(() => {
|
|
wrapper = Wrapper()
|
|
})
|
|
|
|
it('renders', () => {
|
|
expect(wrapper.findAll('.group-member')).toHaveLength(1)
|
|
})
|
|
|
|
it('has two users in table', () => {
|
|
expect(wrapper.find('tbody').findAll('tr')).toHaveLength(2)
|
|
})
|
|
|
|
it('has no modal', () => {
|
|
expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false)
|
|
})
|
|
|
|
describe('change user role', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
wrapper
|
|
.find('tbody')
|
|
.findAll('tr')
|
|
.at(1)
|
|
.find('select')
|
|
.findAll('option')
|
|
.at(2)
|
|
.setSelected()
|
|
wrapper.find('tbody').findAll('tr').at(1).find('select').trigger('change')
|
|
})
|
|
|
|
describe('with server error', () => {
|
|
it('toasts an error message', () => {
|
|
expect(toastErrorMock).toHaveBeenCalledWith('Oh no!')
|
|
})
|
|
})
|
|
|
|
describe('with server success', () => {
|
|
it('calls the API', () => {
|
|
expect(apolloMock).toHaveBeenCalledWith({
|
|
mutation: changeGroupMemberRoleMutation(),
|
|
variables: { groupId: 'group-id', userId: 'user', roleInGroup: 'admin' },
|
|
})
|
|
})
|
|
|
|
it('toasts a success message', () => {
|
|
expect(toastSuccessMock).toHaveBeenCalledWith('group.changeMemberRole')
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('click remove user', () => {
|
|
beforeAll(() => {
|
|
apolloMock.mockRejectedValueOnce({ message: 'Oh no!!' }).mockResolvedValue({
|
|
data: {
|
|
RemoveUserFromGroup: {
|
|
slug: 'user',
|
|
id: 'user',
|
|
myRoleInGroup: null,
|
|
},
|
|
},
|
|
})
|
|
})
|
|
|
|
beforeEach(() => {
|
|
wrapper = Wrapper()
|
|
wrapper.find('tbody').findAll('tr').at(1).find('button').trigger('click')
|
|
})
|
|
|
|
it('opens the modal', () => {
|
|
expect(wrapper.find('div.ds-modal-wrapper').isVisible()).toBe(true)
|
|
})
|
|
|
|
describe('click on cancel', () => {
|
|
beforeEach(() => {
|
|
wrapper.find('div.ds-modal-wrapper').find('button.ds-button-ghost').trigger('click')
|
|
})
|
|
|
|
it('closes the modal', () => {
|
|
expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('click on confirm with server error', () => {
|
|
beforeEach(() => {
|
|
wrapper.find('div.ds-modal-wrapper').find('button.ds-button-primary').trigger('click')
|
|
})
|
|
|
|
it('toasts an error message', () => {
|
|
expect(toastErrorMock).toHaveBeenCalledWith('Oh no!!')
|
|
})
|
|
|
|
it('closes the modal', () => {
|
|
expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('click on confirm with success', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
wrapper.find('div.ds-modal-wrapper').find('button.ds-button-primary').trigger('click')
|
|
})
|
|
|
|
it('calls the API', () => {
|
|
expect(apolloMock).toHaveBeenCalledWith({
|
|
mutation: removeUserFromGroupMutation(),
|
|
variables: { groupId: 'group-id', userId: 'user' },
|
|
})
|
|
})
|
|
|
|
it('emits load group members', () => {
|
|
expect(wrapper.emitted('loadGroupMembers')).toBeTruthy()
|
|
})
|
|
|
|
it('toasts a success message', () => {
|
|
expect(toastSuccessMock).toHaveBeenCalledWith('group.memberRemoved')
|
|
})
|
|
|
|
it('closes the modal', () => {
|
|
expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|