Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/sidebar/components')
-rw-r--r--spec/frontend/sidebar/components/assignees/uncollapsed_assignee_list_spec.js21
-rw-r--r--spec/frontend/sidebar/components/attention_required_toggle_spec.js84
-rw-r--r--spec/frontend/sidebar/components/reviewers/uncollapsed_reviewer_list_spec.js20
-rw-r--r--spec/frontend/sidebar/components/time_tracking/report_spec.js2
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 () => {