diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-18 13:16:36 +0000 |
commit | 311b0269b4eb9839fa63f80c8d7a58f32b8138a0 (patch) | |
tree | 07e7870bca8aed6d61fdcc810731c50d2c40af47 /spec/frontend/sidebar/components | |
parent | 27909cef6c4170ed9205afa7426b8d3de47cbb0c (diff) | |
download | gitlab-ce-311b0269b4eb9839fa63f80c8d7a58f32b8138a0.tar.gz |
Add latest changes from gitlab-org/gitlab@14-5-stable-eev14.5.0-rc42
Diffstat (limited to 'spec/frontend/sidebar/components')
4 files changed, 124 insertions, 3 deletions
diff --git a/spec/frontend/sidebar/components/assignees/uncollapsed_assignee_list_spec.js b/spec/frontend/sidebar/components/assignees/uncollapsed_assignee_list_spec.js index 7e81df1d7d2..c72c23a3a60 100644 --- a/spec/frontend/sidebar/components/assignees/uncollapsed_assignee_list_spec.js +++ b/spec/frontend/sidebar/components/assignees/uncollapsed_assignee_list_spec.js @@ -10,7 +10,7 @@ const DEFAULT_RENDER_COUNT = 5; describe('UncollapsedAssigneeList component', () => { let wrapper; - function createComponent(props = {}) { + function createComponent(props = {}, glFeatures = {}) { const propsData = { users: [], rootPath: TEST_HOST, @@ -19,6 +19,7 @@ describe('UncollapsedAssigneeList component', () => { wrapper = mount(UncollapsedAssigneeList, { propsData, + provide: { glFeatures }, }); } @@ -99,4 +100,22 @@ describe('UncollapsedAssigneeList component', () => { }); }); }); + + describe('merge requests', () => { + it.each` + numberOfUsers + ${1} + ${5} + `('displays as a vertical list for $numberOfUsers of users', ({ numberOfUsers }) => { + createComponent( + { + users: UsersMockHelper.createNumberRandomUsers(numberOfUsers), + issuableType: 'merge_request', + }, + { mrAttentionRequests: true }, + ); + + expect(wrapper.findAll('[data-testid="username"]').length).toBe(numberOfUsers); + }); + }); }); diff --git a/spec/frontend/sidebar/components/attention_required_toggle_spec.js b/spec/frontend/sidebar/components/attention_required_toggle_spec.js new file mode 100644 index 00000000000..8555068cdd8 --- /dev/null +++ b/spec/frontend/sidebar/components/attention_required_toggle_spec.js @@ -0,0 +1,84 @@ +import { GlButton } from '@gitlab/ui'; +import { mount } from '@vue/test-utils'; +import AttentionRequestedToggle from '~/sidebar/components/attention_requested_toggle.vue'; + +let wrapper; + +function factory(propsData = {}) { + wrapper = mount(AttentionRequestedToggle, { propsData }); +} + +const findToggle = () => wrapper.findComponent(GlButton); + +describe('Attention require toggle', () => { + afterEach(() => { + wrapper.destroy(); + }); + + it('renders button', () => { + factory({ type: 'reviewer', user: { attention_requested: false } }); + + expect(findToggle().exists()).toBe(true); + }); + + it.each` + attentionRequested | icon + ${true} | ${'star'} + ${false} | ${'star-o'} + `( + 'renders $icon icon when attention_requested is $attentionRequested', + ({ attentionRequested, icon }) => { + factory({ type: 'reviewer', user: { attention_requested: attentionRequested } }); + + expect(findToggle().props('icon')).toBe(icon); + }, + ); + + it.each` + attentionRequested | variant + ${true} | ${'warning'} + ${false} | ${'default'} + `( + 'renders button with variant $variant when attention_requested is $attentionRequested', + ({ attentionRequested, variant }) => { + factory({ type: 'reviewer', user: { attention_requested: attentionRequested } }); + + expect(findToggle().props('variant')).toBe(variant); + }, + ); + + it('emits toggle-attention-requested on click', async () => { + factory({ type: 'reviewer', user: { attention_requested: true } }); + + await findToggle().trigger('click'); + + expect(wrapper.emitted('toggle-attention-requested')[0]).toEqual([ + { + user: { attention_requested: true }, + callback: expect.anything(), + }, + ]); + }); + + it('sets loading on click', async () => { + factory({ type: 'reviewer', user: { attention_requested: true } }); + + await findToggle().trigger('click'); + + expect(findToggle().props('loading')).toBe(true); + }); + + it.each` + type | attentionRequested | tooltip + ${'reviewer'} | ${true} | ${AttentionRequestedToggle.i18n.removeAttentionRequested} + ${'reviewer'} | ${false} | ${AttentionRequestedToggle.i18n.attentionRequestedReviewer} + ${'assignee'} | ${false} | ${AttentionRequestedToggle.i18n.attentionRequestedAssignee} + `( + 'sets tooltip as $tooltip when attention_requested is $attentionRequested and type is $type', + ({ type, attentionRequested, tooltip }) => { + factory({ type, user: { attention_requested: attentionRequested } }); + + expect(findToggle().attributes('aria-label')).toBe(tooltip); + }, + ); +}); diff --git a/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js b/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js index 6b80224083a..13887f28d22 100644 --- a/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js +++ b/spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js @@ -1,5 +1,6 @@ import { shallowMount } from '@vue/test-utils'; import { TEST_HOST } from 'helpers/test_constants'; +import AttentionRequestedToggle from '~/sidebar/components/attention_requested_toggle.vue'; import ReviewerAvatarLink from '~/sidebar/components/reviewers/reviewer_avatar_link.vue'; import UncollapsedReviewerList from '~/sidebar/components/reviewers/uncollapsed_reviewer_list.vue'; import userDataMock from '../../user_data_mock'; @@ -9,7 +10,7 @@ describe('UncollapsedReviewerList component', () => { const reviewerApprovalIcons = () => wrapper.findAll('[data-testid="re-approved"]'); - function createComponent(props = {}) { + function createComponent(props = {}, glFeatures = {}) { const propsData = { users: [], rootPath: TEST_HOST, @@ -18,6 +19,9 @@ describe('UncollapsedReviewerList component', () => { wrapper = shallowMount(UncollapsedReviewerList, { propsData, + provide: { + glFeatures, + }, }); } @@ -110,4 +114,18 @@ describe('UncollapsedReviewerList component', () => { expect(wrapper.find('[data-testid="re-request-success"]').exists()).toBe(true); }); }); + + it('hides re-request review button when attentionRequired feature flag is enabled', () => { + createComponent({ users: [userDataMock()] }, { mrAttentionRequests: true }); + + expect(wrapper.findAll('[data-testid="re-request-button"]').length).toBe(0); + }); + + it('emits toggle-attention-requested', () => { + createComponent({ users: [userDataMock()] }, { mrAttentionRequests: true }); + + wrapper.find(AttentionRequestedToggle).vm.$emit('toggle-attention-requested', 'data'); + + expect(wrapper.emitted('toggle-attention-requested')[0]).toEqual(['data']); + }); }); diff --git a/spec/frontend/sidebar/components/time_tracking/report_spec.js b/spec/frontend/sidebar/components/time_tracking/report_spec.js index 66218626e6b..64d143615a0 100644 --- a/spec/frontend/sidebar/components/time_tracking/report_spec.js +++ b/spec/frontend/sidebar/components/time_tracking/report_spec.js @@ -50,7 +50,7 @@ describe('Issuable Time Tracking Report', () => { it('should render loading spinner', () => { mountComponent(); - expect(findLoadingIcon()).toExist(); + expect(findLoadingIcon().exists()).toBe(true); }); it('should render error message on reject', async () => { |