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
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-09-25 18:10:16 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-09-25 18:10:16 +0300
commit02e4b2d0043b416314ffb76694aff200584352d5 (patch)
treea7d027891f3089960950d7ec75ba60d981623ab4 /spec
parent7a3aca2b5b3bfdebbd7bb6353d5bdcdc422670da (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/features/merge_request/admin_views_hidden_merge_request_spec.rb12
-rw-r--r--spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb2
-rw-r--r--spec/frontend/boards/board_card_inner_spec.js2
-rw-r--r--spec/frontend/issuable/components/hidden_badge_spec.js45
-rw-r--r--spec/frontend/issuable/components/locked_badge_spec.js45
-rw-r--r--spec/frontend/issues/show/components/sticky_header_spec.js29
-rw-r--r--spec/frontend/merge_requests/components/header_metadata_spec.js52
-rw-r--r--spec/frontend/vue_shared/components/badges/__snapshots__/beta_badge_spec.js.snap21
-rw-r--r--spec/frontend/vue_shared/components/badges/__snapshots__/experiment_badge_spec.js.snap41
-rw-r--r--spec/frontend/vue_shared/components/badges/beta_badge_spec.js4
-rw-r--r--spec/frontend/vue_shared/components/badges/experiment_badge_spec.js32
-rw-r--r--spec/frontend/vue_shared/components/badges/hover_badge_spec.js50
-rw-r--r--spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js2
-rw-r--r--spec/frontend/vue_shared/issuable/show/components/issuable_header_spec.js36
-rw-r--r--spec/helpers/application_helper_spec.rb4
-rw-r--r--spec/helpers/issuables_helper_spec.rb35
-rw-r--r--spec/lib/api/helpers_spec.rb21
-rw-r--r--spec/lib/gitlab/bitbucket_server_import/importers/pull_request_importer_spec.rb62
-rw-r--r--spec/models/ci/pipeline_spec.rb19
-rw-r--r--spec/requests/api/usage_data_spec.rb10
20 files changed, 355 insertions, 169 deletions
diff --git a/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb b/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb
index 0dbb42a633b..a20f75be9cf 100644
--- a/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb
+++ b/spec/features/merge_request/admin_views_hidden_merge_request_spec.rb
@@ -16,12 +16,12 @@ RSpec.describe 'Admin views hidden merge request', feature_category: :insider_th
end
it 'shows a hidden merge request icon' do
- page.within('.detail-page-header-body') do
- tooltip = format(_('This %{issuable} is hidden because its author has been banned'),
- issuable: _('merge request'))
- expect(page).to have_css("div[data-testid='hidden'][title='#{tooltip}']")
- expect(page).to have_css('svg[data-testid="spam-icon"]')
- end
+ expect(page).to have_css 'svg[data-testid="spam-icon"]'
+
+ find('svg[data-testid="spam-icon"]').hover
+
+ expect(page).to have_text format(_('This %{issuable} is hidden because its author has been banned.'),
+ issuable: _('merge request'))
end
end
end
diff --git a/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb b/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb
index e7727fbb9dc..7e33946f713 100644
--- a/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb
+++ b/spec/features/merge_requests/admin_views_hidden_merge_requests_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe 'Admin views hidden merge requests', feature_category: :insider_t
it 'shows a hidden merge request icon' do
page.within("#merge_request_#{merge_request.id}") do
- tooltip = format(_('This %{issuable} is hidden because its author has been banned'),
+ tooltip = format(_('This %{issuable} is hidden because its author has been banned.'),
issuable: _('merge request'))
expect(page).to have_css("span[title='#{tooltip}']")
expect(page).to have_css('svg[data-testid="spam-icon"]')
diff --git a/spec/frontend/boards/board_card_inner_spec.js b/spec/frontend/boards/board_card_inner_spec.js
index 95b5712bab0..179614b08b6 100644
--- a/spec/frontend/boards/board_card_inner_spec.js
+++ b/spec/frontend/boards/board_card_inner_spec.js
@@ -235,7 +235,7 @@ describe('Board card component', () => {
expect(tooltip).toBeDefined();
expect(findHiddenIssueIcon().attributes('title')).toBe(
- 'This issue is hidden because its author has been banned',
+ 'This issue is hidden because its author has been banned.',
);
});
});
diff --git a/spec/frontend/issuable/components/hidden_badge_spec.js b/spec/frontend/issuable/components/hidden_badge_spec.js
new file mode 100644
index 00000000000..db2248bb2d2
--- /dev/null
+++ b/spec/frontend/issuable/components/hidden_badge_spec.js
@@ -0,0 +1,45 @@
+import { GlBadge, GlIcon } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
+import HiddenBadge from '~/issuable/components/hidden_badge.vue';
+
+describe('HiddenBadge component', () => {
+ let wrapper;
+
+ const mountComponent = () => {
+ wrapper = shallowMount(HiddenBadge, {
+ directives: {
+ GlTooltip: createMockDirective('gl-tooltip'),
+ },
+ propsData: {
+ issuableType: 'issue',
+ },
+ });
+ };
+
+ const findBadge = () => wrapper.findComponent(GlBadge);
+ const findIcon = () => wrapper.findComponent(GlIcon);
+
+ beforeEach(() => {
+ mountComponent();
+ });
+
+ it('renders warning badge', () => {
+ expect(findBadge().text()).toBe('Hidden');
+ expect(findBadge().props('variant')).toEqual('warning');
+ });
+
+ it('renders spam icon', () => {
+ expect(findIcon().props('name')).toBe('spam');
+ });
+
+ it('has tooltip', () => {
+ expect(getBinding(wrapper.element, 'gl-tooltip')).not.toBeUndefined();
+ });
+
+ it('has title', () => {
+ expect(findBadge().attributes('title')).toBe(
+ 'This issue is hidden because its author has been banned.',
+ );
+ });
+});
diff --git a/spec/frontend/issuable/components/locked_badge_spec.js b/spec/frontend/issuable/components/locked_badge_spec.js
new file mode 100644
index 00000000000..73ab6e36ba1
--- /dev/null
+++ b/spec/frontend/issuable/components/locked_badge_spec.js
@@ -0,0 +1,45 @@
+import { GlBadge, GlIcon } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
+import LockedBadge from '~/issuable/components/locked_badge.vue';
+
+describe('LockedBadge component', () => {
+ let wrapper;
+
+ const mountComponent = () => {
+ wrapper = shallowMount(LockedBadge, {
+ directives: {
+ GlTooltip: createMockDirective('gl-tooltip'),
+ },
+ propsData: {
+ issuableType: 'issue',
+ },
+ });
+ };
+
+ const findBadge = () => wrapper.findComponent(GlBadge);
+ const findIcon = () => wrapper.findComponent(GlIcon);
+
+ beforeEach(() => {
+ mountComponent();
+ });
+
+ it('renders warning badge', () => {
+ expect(findBadge().text()).toBe('Locked');
+ expect(findBadge().props('variant')).toEqual('warning');
+ });
+
+ it('renders lock icon', () => {
+ expect(findIcon().props('name')).toBe('lock');
+ });
+
+ it('has tooltip', () => {
+ expect(getBinding(wrapper.element, 'gl-tooltip')).not.toBeUndefined();
+ });
+
+ it('has title', () => {
+ expect(findBadge().attributes('title')).toBe(
+ 'This issue is locked. Only project members can comment.',
+ );
+ });
+});
diff --git a/spec/frontend/issues/show/components/sticky_header_spec.js b/spec/frontend/issues/show/components/sticky_header_spec.js
index dd41e3034eb..a909084956f 100644
--- a/spec/frontend/issues/show/components/sticky_header_spec.js
+++ b/spec/frontend/issues/show/components/sticky_header_spec.js
@@ -1,6 +1,7 @@
-import { GlIcon } from '@gitlab/ui';
-import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
+import { GlIcon, GlLink } from '@gitlab/ui';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import HiddenBadge from '~/issuable/components/hidden_badge.vue';
+import LockedBadge from '~/issuable/components/locked_badge.vue';
import {
issuableStatusText,
STATUS_CLOSED,
@@ -17,14 +18,12 @@ describe('StickyHeader component', () => {
let wrapper;
const findConfidentialBadge = () => wrapper.findComponent(ConfidentialityBadge);
- const findHiddenBadge = () => wrapper.findByTestId('hidden');
- const findLockedBadge = () => wrapper.findByTestId('locked');
+ const findHiddenBadge = () => wrapper.findComponent(HiddenBadge);
+ const findLockedBadge = () => wrapper.findComponent(LockedBadge);
+ const findTitle = () => wrapper.findComponent(GlLink);
const createComponent = (props = {}) => {
wrapper = shallowMountExtended(StickyHeader, {
- directives: {
- GlTooltip: createMockDirective('gl-tooltip'),
- },
propsData: {
issuableStatus: STATUS_OPEN,
issuableType: TYPE_ISSUE,
@@ -90,13 +89,6 @@ describe('StickyHeader component', () => {
const lockedBadge = findLockedBadge();
expect(lockedBadge.exists()).toBe(isLocked);
-
- if (isLocked) {
- expect(lockedBadge.attributes('title')).toBe(
- 'This issue is locked. Only project members can comment.',
- );
- expect(getBinding(lockedBadge.element, 'gl-tooltip')).not.toBeUndefined();
- }
});
it.each`
@@ -108,18 +100,11 @@ describe('StickyHeader component', () => {
const hiddenBadge = findHiddenBadge();
expect(hiddenBadge.exists()).toBe(isHidden);
-
- if (isHidden) {
- expect(hiddenBadge.attributes('title')).toBe(
- 'This issue is hidden because its author has been banned',
- );
- expect(getBinding(hiddenBadge.element, 'gl-tooltip')).not.toBeUndefined();
- }
});
it('shows with title', () => {
createComponent();
- const title = wrapper.find('a');
+ const title = findTitle();
expect(title.text()).toContain('A sticky issue');
expect(title.attributes('href')).toBe('#top');
diff --git a/spec/frontend/merge_requests/components/header_metadata_spec.js b/spec/frontend/merge_requests/components/header_metadata_spec.js
index 2823b4b9d97..64df71e1128 100644
--- a/spec/frontend/merge_requests/components/header_metadata_spec.js
+++ b/spec/frontend/merge_requests/components/header_metadata_spec.js
@@ -1,5 +1,6 @@
-import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
-import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import { shallowMount } from '@vue/test-utils';
+import HiddenBadge from '~/issuable/components/hidden_badge.vue';
+import LockedBadge from '~/issuable/components/locked_badge.vue';
import HeaderMetadata from '~/merge_requests/components/header_metadata.vue';
import mrStore from '~/mr_notes/stores';
import ConfidentialityBadge from '~/vue_shared/components/confidentiality_badge.vue';
@@ -9,21 +10,18 @@ jest.mock('~/mr_notes/stores', () => jest.requireActual('helpers/mocks/mr_notes/
describe('HeaderMetadata component', () => {
let wrapper;
- const findConfidentialIcon = () => wrapper.findComponent(ConfidentialityBadge);
- const findLockedIcon = () => wrapper.findByTestId('locked');
- const findHiddenIcon = () => wrapper.findByTestId('hidden');
+ const findConfidentialBadge = () => wrapper.findComponent(ConfidentialityBadge);
+ const findLockedBadge = () => wrapper.findComponent(LockedBadge);
+ const findHiddenBadge = () => wrapper.findComponent(HiddenBadge);
const renderTestMessage = (renders) => (renders ? 'renders' : 'does not render');
const createComponent = ({ store, provide }) => {
- wrapper = shallowMountExtended(HeaderMetadata, {
+ wrapper = shallowMount(HeaderMetadata, {
mocks: {
$store: store,
},
provide,
- directives: {
- GlTooltip: createMockDirective('gl-tooltip'),
- },
});
};
@@ -51,42 +49,24 @@ describe('HeaderMetadata component', () => {
createComponent({ store, provide: { hidden: hiddenStatus } });
});
- it(`${renderTestMessage(lockStatus)} the locked icon`, () => {
- const lockedIcon = findLockedIcon();
-
- expect(lockedIcon.exists()).toBe(lockStatus);
-
- if (lockStatus) {
- expect(lockedIcon.attributes('title')).toBe(
- `This merge request is locked. Only project members can comment.`,
- );
- expect(getBinding(lockedIcon.element, 'gl-tooltip')).not.toBeUndefined();
- }
- });
-
- it(`${renderTestMessage(confidentialStatus)} the confidential icon`, () => {
- const confidentialIcon = findConfidentialIcon();
- expect(confidentialIcon.exists()).toBe(confidentialStatus);
+ it(`${renderTestMessage(confidentialStatus)} the confidential badge`, () => {
+ const confidentialBadge = findConfidentialBadge();
+ expect(confidentialBadge.exists()).toBe(confidentialStatus);
if (confidentialStatus && !hiddenStatus) {
- expect(confidentialIcon.props()).toMatchObject({
+ expect(confidentialBadge.props()).toMatchObject({
workspaceType: 'project',
issuableType: 'issue',
});
}
});
- it(`${renderTestMessage(confidentialStatus)} the hidden icon`, () => {
- const hiddenIcon = findHiddenIcon();
-
- expect(hiddenIcon.exists()).toBe(hiddenStatus);
+ it(`${renderTestMessage(lockStatus)} the locked badge`, () => {
+ expect(findLockedBadge().exists()).toBe(lockStatus);
+ });
- if (hiddenStatus) {
- expect(hiddenIcon.attributes('title')).toBe(
- `This merge request is hidden because its author has been banned`,
- );
- expect(getBinding(hiddenIcon.element, 'gl-tooltip')).not.toBeUndefined();
- }
+ it(`${renderTestMessage(hiddenStatus)} the hidden badge`, () => {
+ expect(findHiddenBadge().exists()).toBe(hiddenStatus);
});
},
);
diff --git a/spec/frontend/vue_shared/components/badges/__snapshots__/beta_badge_spec.js.snap b/spec/frontend/vue_shared/components/badges/__snapshots__/beta_badge_spec.js.snap
index 359aaacde0b..499a971d791 100644
--- a/spec/frontend/vue_shared/components/badges/__snapshots__/beta_badge_spec.js.snap
+++ b/spec/frontend/vue_shared/components/badges/__snapshots__/beta_badge_spec.js.snap
@@ -2,22 +2,15 @@
exports[`Beta badge component renders the badge 1`] = `
<div>
- <gl-badge-stub
- class="gl-cursor-pointer"
+ <a
+ class="badge badge-neutral badge-pill gl-badge gl-cursor-pointer md"
href="#"
- iconsize="md"
- size="md"
- variant="neutral"
+ target="_self"
>
Beta
- </gl-badge-stub>
- <gl-popover-stub
- cssclasses=""
- data-testid="beta-badge"
- showclosebutton="true"
- target="[Function]"
- title="What's Beta?"
- triggers="hover focus click"
+ </a>
+ <div
+ class="gl-popover"
>
<p>
A Beta feature is not production-ready, but is unlikely to change drastically before it's released. We encourage users to try Beta features and provide feedback.
@@ -43,6 +36,6 @@ exports[`Beta badge component renders the badge 1`] = `
Is complete or near completion.
</li>
</ul>
- </gl-popover-stub>
+ </div>
</div>
`;
diff --git a/spec/frontend/vue_shared/components/badges/__snapshots__/experiment_badge_spec.js.snap b/spec/frontend/vue_shared/components/badges/__snapshots__/experiment_badge_spec.js.snap
new file mode 100644
index 00000000000..4ad70338f3c
--- /dev/null
+++ b/spec/frontend/vue_shared/components/badges/__snapshots__/experiment_badge_spec.js.snap
@@ -0,0 +1,41 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Experiment badge component renders the badge 1`] = `
+<div>
+ <a
+ class="badge badge-neutral badge-pill gl-badge gl-cursor-pointer md"
+ href="#"
+ target="_self"
+ >
+ Experiment
+ </a>
+ <div
+ class="gl-popover"
+ >
+ <p>
+ An Experiment is a feature that's in the process of being developed. It's not production-ready. We encourage users to try Experimental features and provide feedback.
+ </p>
+ <p
+ class="gl-mb-0"
+ >
+ An Experiment:
+ </p>
+ <ul
+ class="gl-pl-4"
+ >
+ <li>
+ May be unstable.
+ </li>
+ <li>
+ Can cause data loss.
+ </li>
+ <li>
+ Has no support and might not be documented.
+ </li>
+ <li>
+ Can be removed at any time.
+ </li>
+ </ul>
+ </div>
+</div>
+`;
diff --git a/spec/frontend/vue_shared/components/badges/beta_badge_spec.js b/spec/frontend/vue_shared/components/badges/beta_badge_spec.js
index c930c6d5708..d826ca5c7c0 100644
--- a/spec/frontend/vue_shared/components/badges/beta_badge_spec.js
+++ b/spec/frontend/vue_shared/components/badges/beta_badge_spec.js
@@ -1,4 +1,4 @@
-import { shallowMount } from '@vue/test-utils';
+import { mount } from '@vue/test-utils';
import { GlBadge } from '@gitlab/ui';
import BetaBadge from '~/vue_shared/components/badges/beta_badge.vue';
@@ -7,7 +7,7 @@ describe('Beta badge component', () => {
const findBadge = () => wrapper.findComponent(GlBadge);
const createWrapper = (props = {}) => {
- wrapper = shallowMount(BetaBadge, {
+ wrapper = mount(BetaBadge, {
propsData: { ...props },
});
};
diff --git a/spec/frontend/vue_shared/components/badges/experiment_badge_spec.js b/spec/frontend/vue_shared/components/badges/experiment_badge_spec.js
new file mode 100644
index 00000000000..3239578a173
--- /dev/null
+++ b/spec/frontend/vue_shared/components/badges/experiment_badge_spec.js
@@ -0,0 +1,32 @@
+import { mount } from '@vue/test-utils';
+import { GlBadge } from '@gitlab/ui';
+import ExperimentBadge from '~/vue_shared/components/badges/experiment_badge.vue';
+
+describe('Experiment badge component', () => {
+ let wrapper;
+
+ const findBadge = () => wrapper.findComponent(GlBadge);
+ const createWrapper = (props = {}) => {
+ wrapper = mount(ExperimentBadge, {
+ propsData: { ...props },
+ });
+ };
+
+ it('renders the badge', () => {
+ createWrapper();
+
+ expect(wrapper.element).toMatchSnapshot();
+ });
+
+ it('passes default size to badge', () => {
+ createWrapper();
+
+ expect(findBadge().props('size')).toBe('md');
+ });
+
+ it('passes given size to badge', () => {
+ createWrapper({ size: 'sm' });
+
+ expect(findBadge().props('size')).toBe('sm');
+ });
+});
diff --git a/spec/frontend/vue_shared/components/badges/hover_badge_spec.js b/spec/frontend/vue_shared/components/badges/hover_badge_spec.js
new file mode 100644
index 00000000000..68f368215c0
--- /dev/null
+++ b/spec/frontend/vue_shared/components/badges/hover_badge_spec.js
@@ -0,0 +1,50 @@
+import { mount } from '@vue/test-utils';
+import { GlBadge, GlPopover } from '@gitlab/ui';
+import HoverBadge from '~/vue_shared/components/badges/hover_badge.vue';
+
+describe('Hover badge component', () => {
+ let wrapper;
+
+ const findBadge = () => wrapper.findComponent(GlBadge);
+ const findPopover = () => wrapper.findComponent(GlPopover);
+ const createWrapper = ({ props = {}, slots } = {}) => {
+ wrapper = mount(HoverBadge, {
+ propsData: {
+ label: 'Label',
+ title: 'Title',
+ ...props,
+ },
+ slots,
+ });
+ };
+
+ it('passes label to popover', () => {
+ createWrapper();
+
+ expect(findBadge().text()).toBe('Label');
+ });
+
+ it('passes title to popover', () => {
+ createWrapper();
+
+ expect(findPopover().props('title')).toBe('Title');
+ });
+
+ it('renders the default slot', () => {
+ createWrapper({ slots: { default: '<p>This is an awesome content</p>' } });
+
+ expect(findPopover().text()).toContain('This is an awesome content');
+ });
+
+ it('passes default size to badge', () => {
+ createWrapper();
+
+ expect(findBadge().props('size')).toBe('md');
+ });
+
+ it('passes given size to badge', () => {
+ createWrapper({ props: { size: 'sm' } });
+
+ expect(findBadge().props('size')).toBe('sm');
+ });
+});
diff --git a/spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js b/spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js
index d353e336977..47da111b604 100644
--- a/spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js
+++ b/spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js
@@ -352,7 +352,7 @@ describe('IssuableItem', () => {
expect(hiddenIcon.props('name')).toBe('spam');
expect(hiddenIcon.attributes()).toMatchObject({
- title: 'This issue is hidden because its author has been banned',
+ title: 'This issue is hidden because its author has been banned.',
arialabel: 'Hidden',
});
});
diff --git a/spec/frontend/vue_shared/issuable/show/components/issuable_header_spec.js b/spec/frontend/vue_shared/issuable/show/components/issuable_header_spec.js
index 3b6f06d835b..03395e5dfc0 100644
--- a/spec/frontend/vue_shared/issuable/show/components/issuable_header_spec.js
+++ b/spec/frontend/vue_shared/issuable/show/components/issuable_header_spec.js
@@ -2,6 +2,8 @@ import { GlBadge, GlButton, GlIcon, GlLink, GlSprintf } from '@gitlab/ui';
import { shallowMount } from '@vue/test-utils';
import { resetHTMLFixture, setHTMLFixture } from 'helpers/fixtures';
import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
+import HiddenBadge from '~/issuable/components/hidden_badge.vue';
+import LockedBadge from '~/issuable/components/locked_badge.vue';
import { STATUS_CLOSED, STATUS_OPEN, STATUS_REOPENED, TYPE_ISSUE } from '~/issues/constants';
import { __ } from '~/locale';
import ConfidentialityBadge from '~/vue_shared/components/confidentiality_badge.vue';
@@ -23,8 +25,8 @@ describe('IssuableHeader component', () => {
wrapper.findAllComponents(GlIcon).filter((component) => component.props('name') === name);
const findIcon = (name) =>
findGlIconWithName(name).exists() ? findGlIconWithName(name).at(0) : undefined;
- const findBlockedIcon = () => findIcon('lock');
- const findHiddenIcon = () => findIcon('spam');
+ const findBlockedBadge = () => wrapper.findComponent(LockedBadge);
+ const findHiddenBadge = () => wrapper.findComponent(HiddenBadge);
const findExternalLinkIcon = () => findIcon('external-link');
const findFirstContributionIcon = () => findIcon('first-contribution');
const findComponentTooltip = (component) => getBinding(component.element, 'gl-tooltip');
@@ -111,49 +113,31 @@ describe('IssuableHeader component', () => {
});
});
- describe('blocked icon', () => {
+ describe('blocked badge', () => {
it('renders when issuable is blocked', () => {
createComponent({ blocked: true });
- expect(findBlockedIcon().props('ariaLabel')).toBe('Blocked');
- });
-
- it('has tooltip', () => {
- createComponent({ blocked: true });
-
- expect(findComponentTooltip(findBlockedIcon())).toBeDefined();
- expect(findBlockedIcon().attributes('title')).toBe(
- 'This issue is locked. Only project members can comment.',
- );
+ expect(findBlockedBadge().props('issuableType')).toBe('issue');
});
it('does not render when issuable is not blocked', () => {
createComponent({ blocked: false });
- expect(findBlockedIcon()).toBeUndefined();
+ expect(findBlockedBadge().exists()).toBe(false);
});
});
- describe('hidden icon', () => {
+ describe('hidden badge', () => {
it('renders when issuable is hidden', () => {
createComponent({ isHidden: true });
- expect(findHiddenIcon().props('ariaLabel')).toBe('Hidden');
- });
-
- it('has tooltip', () => {
- createComponent({ isHidden: true });
-
- expect(findComponentTooltip(findHiddenIcon())).toBeDefined();
- expect(findHiddenIcon().attributes('title')).toBe(
- 'This issue is hidden because its author has been banned',
- );
+ expect(findHiddenBadge().props('issuableType')).toBe('issue');
});
it('does not render when issuable is not hidden', () => {
createComponent({ isHidden: false });
- expect(findHiddenIcon()).toBeUndefined();
+ expect(findHiddenBadge().exists()).toBe(false);
});
});
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 757f832faa4..7cf64c6e049 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -922,14 +922,14 @@ RSpec.describe ApplicationHelper do
context 'when resource is an issue' do
let_it_be(:resource) { build(:issue) }
- let(:expected_title) { 'This issue is hidden because its author has been banned' }
+ let(:expected_title) { 'This issue is hidden because its author has been banned.' }
it_behaves_like 'returns icon with tooltip'
end
context 'when resource is a merge request' do
let_it_be(:resource) { build(:merge_request) }
- let(:expected_title) { 'This merge request is hidden because its author has been banned' }
+ let(:expected_title) { 'This merge request is hidden because its author has been banned.' }
it_behaves_like 'returns icon with tooltip'
end
diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb
index 9fe820ccae9..f0377b1cb20 100644
--- a/spec/helpers/issuables_helper_spec.rb
+++ b/spec/helpers/issuables_helper_spec.rb
@@ -568,41 +568,6 @@ RSpec.describe IssuablesHelper, feature_category: :team_planning do
end
end
- describe '#state_name_with_icon' do
- let_it_be(:project) { create(:project, :repository) }
-
- context 'for an issue' do
- let_it_be(:issue) { create(:issue, project: project) }
- let_it_be(:issue_closed) { create(:issue, :closed, project: project) }
-
- it 'returns the correct state name and icon when issue is open' do
- expect(helper.state_name_with_icon(issue)).to match_array([_('Open'), 'issues'])
- end
-
- it 'returns the correct state name and icon when issue is closed' do
- expect(helper.state_name_with_icon(issue_closed)).to match_array([_('Closed'), 'issue-closed'])
- end
- end
-
- context 'for a merge request' do
- let_it_be(:merge_request) { create(:merge_request, source_project: project) }
- let_it_be(:merge_request_merged) { create(:merge_request, :merged, source_project: project) }
- let_it_be(:merge_request_closed) { create(:merge_request, :closed, source_project: project) }
-
- it 'returns the correct state name and icon when merge request is open' do
- expect(helper.state_name_with_icon(merge_request)).to match_array([_('Open'), 'merge-request-open'])
- end
-
- it 'returns the correct state name and icon when merge request is merged' do
- expect(helper.state_name_with_icon(merge_request_merged)).to match_array([_('Merged'), 'merge'])
- end
-
- it 'returns the correct state name and icon when merge request is closed' do
- expect(helper.state_name_with_icon(merge_request_closed)).to match_array([_('Closed'), 'merge-request-close'])
- end
- end
- end
-
describe '#issuable_type_selector_data' do
using RSpec::Parameterized::TableSyntax
diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb
index dd62343890e..9e7e174f4f0 100644
--- a/spec/lib/api/helpers_spec.rb
+++ b/spec/lib/api/helpers_spec.rb
@@ -773,21 +773,21 @@ RSpec.describe API::Helpers, feature_category: :shared do
end
describe '#track_event' do
- let(:user_id) { 345 }
- let(:namespace_id) { 12 }
- let(:project_id) { 56 }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:namespace) { create(:namespace) }
+ let_it_be(:project) { create(:project) }
let(:event_name) { 'i_compliance_dashboard' }
let(:unknown_event) { 'unknown' }
it 'tracks internal event' do
expect(Gitlab::InternalEvents).to receive(:track_event).with(
event_name,
- user_id: user_id,
- namespace_id: namespace_id,
- project_id: project_id
+ user: user,
+ namespace: namespace,
+ project: project
)
- helper.track_event(event_name, user_id: user_id, namespace_id: namespace_id, project_id: project_id)
+ helper.track_event(event_name, user: user, namespace_id: namespace.id, project_id: project.id)
end
it 'logs an exception for unknown event' do
@@ -797,13 +797,14 @@ RSpec.describe API::Helpers, feature_category: :shared do
instance_of(Gitlab::InternalEvents::UnknownEventError),
event_name: unknown_event
)
- helper.track_event(unknown_event, user_id: user_id, namespace_id: namespace_id, project_id: project_id)
+
+ helper.track_event(unknown_event, user: user, namespace_id: namespace.id, project_id: project.id)
end
- it 'does not track event for nil user_id' do
+ it 'does not track event for nil user' do
expect(Gitlab::InternalEvents).not_to receive(:track_event)
- helper.track_event(unknown_event, user_id: nil, namespace_id: namespace_id, project_id: project_id)
+ helper.track_event(unknown_event, user: nil, namespace_id: namespace.id, project_id: project.id)
end
end
diff --git a/spec/lib/gitlab/bitbucket_server_import/importers/pull_request_importer_spec.rb b/spec/lib/gitlab/bitbucket_server_import/importers/pull_request_importer_spec.rb
index 3c84d888c92..1ae68f9efb8 100644
--- a/spec/lib/gitlab/bitbucket_server_import/importers/pull_request_importer_spec.rb
+++ b/spec/lib/gitlab/bitbucket_server_import/importers/pull_request_importer_spec.rb
@@ -48,6 +48,68 @@ RSpec.describe Gitlab::BitbucketServerImport::Importers::PullRequestImporter, fe
end
end
+ describe 'merge request diff head_commit_sha' do
+ before do
+ allow(pull_request).to receive(:source_branch_sha).and_return(source_branch_sha)
+ end
+
+ context 'when a commit with the source_branch_sha exists' do
+ let(:source_branch_sha) { project.repository.head_commit.sha }
+
+ it 'is equal to the source_branch_sha' do
+ importer.execute
+
+ merge_request = project.merge_requests.find_by_iid(pull_request.iid)
+
+ expect(merge_request.merge_request_diffs.first.head_commit_sha).to eq(source_branch_sha)
+ end
+ end
+
+ context 'when a commit with the source_branch_sha does not exist' do
+ let(:source_branch_sha) { 'x' * Commit::MIN_SHA_LENGTH }
+
+ it 'is nil' do
+ importer.execute
+
+ merge_request = project.merge_requests.find_by_iid(pull_request.iid)
+
+ expect(merge_request.merge_request_diffs.first.head_commit_sha).to be_nil
+ end
+
+ context 'when a commit containing the sha in the message exists' do
+ let(:source_branch_sha) { project.repository.head_commit.sha }
+
+ it 'is equal to the sha' do
+ message = "
+ Squashed commit of the following:
+
+ commit #{source_branch_sha}
+ Author: John Smith <john@smith.com>
+ Date: Mon Sep 18 15:58:38 2023 +0200
+
+ My commit message
+ "
+
+ Files::CreateService.new(
+ project,
+ project.creator,
+ start_branch: 'master',
+ branch_name: 'master',
+ commit_message: message,
+ file_path: 'files/lfs/ruby.rb',
+ file_content: 'testing'
+ ).execute
+
+ importer.execute
+
+ merge_request = project.merge_requests.find_by_iid(pull_request.iid)
+
+ expect(merge_request.merge_request_diffs.first.head_commit_sha).to eq(source_branch_sha)
+ end
+ end
+ end
+ end
+
it 'logs its progress' do
expect(Gitlab::BitbucketServerImport::Logger)
.to receive(:info).with(include(message: 'starting', iid: pull_request.iid)).and_call_original
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index 7e572e2fdc6..76ebd1dbf5e 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -3250,22 +3250,23 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep, feature_category:
shared_examples 'a method that returns all merge requests for a given pipeline' do
let(:pipeline) { create(:ci_empty_pipeline, status: 'created', project: pipeline_project, ref: 'master') }
+ let(:merge_request) do
+ create(
+ :merge_request,
+ source_project: pipeline_project,
+ target_project: project,
+ source_branch: pipeline.ref
+ )
+ end
it 'returns all merge requests having the same source branch and the pipeline sha' do
- merge_request = create(:merge_request, source_project: pipeline_project, target_project: project, source_branch: pipeline.ref)
-
- create(:merge_request_diff, merge_request: merge_request).tap do |diff|
- create(:merge_request_diff_commit, merge_request_diff: diff, sha: pipeline.sha)
- end
+ create(:merge_request_diff_commit, merge_request_diff: merge_request.merge_request_diff, sha: pipeline.sha)
expect(pipeline.all_merge_requests).to eq([merge_request])
end
it "doesn't return merge requests having the same source branch without the pipeline sha" do
- merge_request = create(:merge_request, source_project: pipeline_project, target_project: project, source_branch: pipeline.ref)
- create(:merge_request_diff, merge_request: merge_request).tap do |diff|
- create(:merge_request_diff_commit, merge_request_diff: diff, sha: 'unrelated')
- end
+ create(:merge_request_diff_commit, merge_request_diff: merge_request.merge_request_diff, sha: 'unrelated')
expect(pipeline.all_merge_requests).to be_empty
end
diff --git a/spec/requests/api/usage_data_spec.rb b/spec/requests/api/usage_data_spec.rb
index c8f1e8d6973..d296566853e 100644
--- a/spec/requests/api/usage_data_spec.rb
+++ b/spec/requests/api/usage_data_spec.rb
@@ -200,6 +200,9 @@ RSpec.describe API::UsageData, feature_category: :service_ping do
end
context 'with authentication' do
+ let_it_be(:namespace) { create(:namespace) }
+ let_it_be(:project) { create(:project) }
+
before do
stub_application_setting(usage_ping_enabled: true)
allow(Gitlab::RequestForgeryProtection).to receive(:verified?).and_return(true)
@@ -207,11 +210,10 @@ RSpec.describe API::UsageData, feature_category: :service_ping do
context 'with correct params' do
it 'returns status ok' do
- expect(Gitlab::InternalEvents).to receive(:track_event).with(known_event, anything)
- # allow other events to also get triggered
- allow(Gitlab::InternalEvents).to receive(:track_event)
+ expect(Gitlab::InternalEvents).to receive(:track_event)
+ .with(known_event, user: user, namespace: namespace, project: project)
- post api(endpoint, user), params: { event: known_event, namespace_id: namespace_id, project_id: project_id }
+ post api(endpoint, user), params: { event: known_event, namespace_id: namespace.id, project_id: project.id }
expect(response).to have_gitlab_http_status(:ok)
end