debian-mirror-gitlab/spec/frontend/notes/components/discussion_counter_spec.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

155 lines
4.9 KiB
JavaScript
Raw Normal View History

2022-10-11 01:57:18 +05:30
import { GlDropdownItem } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
2022-04-04 11:22:00 +05:30
import Vue, { nextTick } from 'vue';
2021-03-11 19:13:27 +05:30
import Vuex from 'vuex';
2020-04-08 14:13:33 +05:30
import DiscussionCounter from '~/notes/components/discussion_counter.vue';
2021-03-11 19:13:27 +05:30
import notesModule from '~/notes/stores/modules';
2020-04-08 14:13:33 +05:30
import * as types from '~/notes/stores/mutation_types';
2021-03-11 19:13:27 +05:30
import { noteableDataMock, discussionMock, notesDataMock, userDataMock } from '../mock_data';
2020-04-08 14:13:33 +05:30
describe('DiscussionCounter component', () => {
let store;
let wrapper;
2021-01-03 14:25:43 +05:30
let setExpandDiscussionsFn;
2020-04-08 14:13:33 +05:30
2022-04-04 11:22:00 +05:30
Vue.use(Vuex);
2020-04-08 14:13:33 +05:30
beforeEach(() => {
window.mrTabs = {};
const { state, getters, mutations, actions } = notesModule();
2021-01-03 14:25:43 +05:30
setExpandDiscussionsFn = jest.fn().mockImplementation(actions.setExpandDiscussions);
2020-04-08 14:13:33 +05:30
store = new Vuex.Store({
state: {
...state,
userData: userDataMock,
},
getters,
mutations,
2021-01-03 14:25:43 +05:30
actions: {
...actions,
setExpandDiscussions: setExpandDiscussionsFn,
},
2020-04-08 14:13:33 +05:30
});
store.dispatch('setNoteableData', {
...noteableDataMock,
create_issue_to_resolve_discussions_path: '/test',
});
store.dispatch('setNotesData', notesDataMock);
});
afterEach(() => {
wrapper.vm.$destroy();
wrapper = null;
});
describe('has no discussions', () => {
it('does not render', () => {
2022-10-11 01:57:18 +05:30
wrapper = mount(DiscussionCounter, { store, propsData: { blocksMerge: true } });
2020-04-08 14:13:33 +05:30
2022-08-27 11:52:29 +05:30
expect(wrapper.findComponent({ ref: 'discussionCounter' }).exists()).toBe(false);
2020-04-08 14:13:33 +05:30
});
});
describe('has no resolvable discussions', () => {
it('does not render', () => {
2021-12-11 22:18:48 +05:30
store.commit(types.ADD_OR_UPDATE_DISCUSSIONS, [{ ...discussionMock, resolvable: false }]);
2020-04-08 14:13:33 +05:30
store.dispatch('updateResolvableDiscussionsCounts');
2022-10-11 01:57:18 +05:30
wrapper = mount(DiscussionCounter, { store, propsData: { blocksMerge: true } });
2020-04-08 14:13:33 +05:30
2022-08-27 11:52:29 +05:30
expect(wrapper.findComponent({ ref: 'discussionCounter' }).exists()).toBe(false);
2020-04-08 14:13:33 +05:30
});
});
describe('has resolvable discussions', () => {
const updateStore = (note = {}) => {
discussionMock.notes[0] = { ...discussionMock.notes[0], ...note };
2021-12-11 22:18:48 +05:30
store.commit(types.ADD_OR_UPDATE_DISCUSSIONS, [discussionMock]);
2020-04-08 14:13:33 +05:30
store.dispatch('updateResolvableDiscussionsCounts');
};
afterEach(() => {
delete discussionMock.notes[0].resolvable;
delete discussionMock.notes[0].resolved;
});
it('renders', () => {
updateStore();
2022-10-11 01:57:18 +05:30
wrapper = mount(DiscussionCounter, { store, propsData: { blocksMerge: true } });
2020-04-08 14:13:33 +05:30
2022-08-27 11:52:29 +05:30
expect(wrapper.findComponent({ ref: 'discussionCounter' }).exists()).toBe(true);
2020-04-08 14:13:33 +05:30
});
it.each`
2022-07-16 23:28:13 +05:30
blocksMerge | color
${true} | ${'gl-bg-orange-50'}
${false} | ${'gl-bg-gray-50'}
`(
'changes background color to $color if blocksMerge is $blocksMerge',
({ blocksMerge, color }) => {
updateStore();
store.state.unresolvedDiscussionsCount = 1;
2022-10-11 01:57:18 +05:30
wrapper = mount(DiscussionCounter, { store, propsData: { blocksMerge } });
2022-07-16 23:28:13 +05:30
expect(wrapper.find('[data-testid="discussions-counter-text"]').classes()).toContain(color);
},
);
it.each`
title | resolved | groupLength
2022-10-11 01:57:18 +05:30
${'not allResolved'} | ${false} | ${2}
2022-07-16 23:28:13 +05:30
${'allResolved'} | ${true} | ${1}
2022-10-11 01:57:18 +05:30
`('renders correctly if $title', async ({ resolved, groupLength }) => {
2020-04-08 14:13:33 +05:30
updateStore({ resolvable: true, resolved });
2022-10-11 01:57:18 +05:30
wrapper = mount(DiscussionCounter, { store, propsData: { blocksMerge: true } });
await wrapper.find('.dropdown-toggle').trigger('click');
2020-04-08 14:13:33 +05:30
2022-10-11 01:57:18 +05:30
expect(wrapper.findAllComponents(GlDropdownItem)).toHaveLength(groupLength);
2020-04-08 14:13:33 +05:30
});
});
2020-04-22 19:07:51 +05:30
describe('toggle all threads button', () => {
let toggleAllButton;
2022-10-11 01:57:18 +05:30
const updateStoreWithExpanded = async (expanded) => {
2020-04-22 19:07:51 +05:30
const discussion = { ...discussionMock, expanded };
2021-12-11 22:18:48 +05:30
store.commit(types.ADD_OR_UPDATE_DISCUSSIONS, [discussion]);
2020-04-22 19:07:51 +05:30
store.dispatch('updateResolvableDiscussionsCounts');
2022-10-11 01:57:18 +05:30
wrapper = mount(DiscussionCounter, { store, propsData: { blocksMerge: true } });
await wrapper.find('.dropdown-toggle').trigger('click');
toggleAllButton = wrapper.find('[data-testid="toggle-all-discussions-btn"]');
2020-04-22 19:07:51 +05:30
};
afterEach(() => wrapper.destroy());
2022-10-11 01:57:18 +05:30
it('calls button handler when clicked', async () => {
await updateStoreWithExpanded(true);
2020-04-22 19:07:51 +05:30
2022-10-11 01:57:18 +05:30
toggleAllButton.trigger('click');
2020-04-22 19:07:51 +05:30
2021-01-03 14:25:43 +05:30
expect(setExpandDiscussionsFn).toHaveBeenCalledTimes(1);
2020-04-22 19:07:51 +05:30
});
2022-04-04 11:22:00 +05:30
it('collapses all discussions if expanded', async () => {
2022-10-11 01:57:18 +05:30
await updateStoreWithExpanded(true);
2020-04-22 19:07:51 +05:30
expect(wrapper.vm.allExpanded).toBe(true);
2022-10-11 01:57:18 +05:30
toggleAllButton.trigger('click');
2020-04-22 19:07:51 +05:30
2022-04-04 11:22:00 +05:30
await nextTick();
expect(wrapper.vm.allExpanded).toBe(false);
2020-04-22 19:07:51 +05:30
});
2022-04-04 11:22:00 +05:30
it('expands all discussions if collapsed', async () => {
2022-10-11 01:57:18 +05:30
await updateStoreWithExpanded(false);
2020-04-22 19:07:51 +05:30
expect(wrapper.vm.allExpanded).toBe(false);
2022-10-11 01:57:18 +05:30
toggleAllButton.trigger('click');
2020-04-22 19:07:51 +05:30
2022-04-04 11:22:00 +05:30
await nextTick();
expect(wrapper.vm.allExpanded).toBe(true);
2020-04-22 19:07:51 +05:30
});
});
2020-04-08 14:13:33 +05:30
});