Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-06-23 18:07:23 +00:00
parent f9c23393a5
commit 2926cbb864
7 changed files with 64 additions and 40 deletions

View File

@ -1 +1 @@
b7cdb3d14671f81166148616b029db2b5a785709 ef91aecceeb69d7b7d7e7f8fb8b26e4dfcf1c266

View File

@ -432,7 +432,7 @@ group :development, :test do
end end
group :development, :test, :danger do group :development, :test, :danger do
gem 'gitlab-dangerfiles', '~> 3.10.0', require: false gem 'gitlab-dangerfiles', '~> 3.11.0', require: false
end end
group :development, :test, :coverage do group :development, :test, :coverage do

View File

@ -207,7 +207,7 @@
{"name":"gitaly","version":"16.1.0.pre.rc2","platform":"ruby","checksum":"0007db161bd3f12321813e7095c8d3266d74b0a22b84d7cba8df864c0b88e3af"}, {"name":"gitaly","version":"16.1.0.pre.rc2","platform":"ruby","checksum":"0007db161bd3f12321813e7095c8d3266d74b0a22b84d7cba8df864c0b88e3af"},
{"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"}, {"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"},
{"name":"gitlab-chronic","version":"0.10.5","platform":"ruby","checksum":"f80f18dc699b708870a80685243331290bc10cfeedb6b99c92219722f729c875"}, {"name":"gitlab-chronic","version":"0.10.5","platform":"ruby","checksum":"f80f18dc699b708870a80685243331290bc10cfeedb6b99c92219722f729c875"},
{"name":"gitlab-dangerfiles","version":"3.10.0","platform":"ruby","checksum":"df4cfe051f52529c0256346d89d06d5ef2bb630928754eb620b5233eb9b14041"}, {"name":"gitlab-dangerfiles","version":"3.11.0","platform":"ruby","checksum":"9a5cfe03e00c9d489782ad330ece4ce109e6cea1dcaae3eb41a5b5aed234a123"},
{"name":"gitlab-experiment","version":"0.7.1","platform":"ruby","checksum":"166dddb3aa83428bcaa93c35684ed01dc4d61f321fd2ae40b020806dc54a7824"}, {"name":"gitlab-experiment","version":"0.7.1","platform":"ruby","checksum":"166dddb3aa83428bcaa93c35684ed01dc4d61f321fd2ae40b020806dc54a7824"},
{"name":"gitlab-fog-azure-rm","version":"1.7.0","platform":"ruby","checksum":"969c67943c54ad4c259a6acd040493f13922fbdf2211bb4eca00e71505263dc2"}, {"name":"gitlab-fog-azure-rm","version":"1.7.0","platform":"ruby","checksum":"969c67943c54ad4c259a6acd040493f13922fbdf2211bb4eca00e71505263dc2"},
{"name":"gitlab-labkit","version":"0.33.0","platform":"ruby","checksum":"d1fba8d30fde314a3f5dee1921ac31860bed4fecd8aa98ac6671f2627479e05b"}, {"name":"gitlab-labkit","version":"0.33.0","platform":"ruby","checksum":"d1fba8d30fde314a3f5dee1921ac31860bed4fecd8aa98ac6671f2627479e05b"},

View File

@ -594,7 +594,7 @@ GEM
terminal-table (>= 1.5.1) terminal-table (>= 1.5.1)
gitlab-chronic (0.10.5) gitlab-chronic (0.10.5)
numerizer (~> 0.2) numerizer (~> 0.2)
gitlab-dangerfiles (3.10.0) gitlab-dangerfiles (3.11.0)
danger (>= 8.4.5) danger (>= 8.4.5)
danger-gitlab (>= 8.0.0) danger-gitlab (>= 8.0.0)
rake rake
@ -1767,7 +1767,7 @@ DEPENDENCIES
gettext_i18n_rails_js (~> 1.3) gettext_i18n_rails_js (~> 1.3)
gitaly (~> 16.1.0.pre.rc2) gitaly (~> 16.1.0.pre.rc2)
gitlab-chronic (~> 0.10.5) gitlab-chronic (~> 0.10.5)
gitlab-dangerfiles (~> 3.10.0) gitlab-dangerfiles (~> 3.11.0)
gitlab-experiment (~> 0.7.1) gitlab-experiment (~> 0.7.1)
gitlab-fog-azure-rm (~> 1.7.0) gitlab-fog-azure-rm (~> 1.7.0)
gitlab-labkit (~> 0.33.0) gitlab-labkit (~> 0.33.0)

View File

@ -4,8 +4,7 @@ import {
GlTooltipDirective, GlTooltipDirective,
GlSprintf, GlSprintf,
GlIcon, GlIcon,
GlDropdown, GlDisclosureDropdown,
GlDropdownItem,
} from '@gitlab/ui'; } from '@gitlab/ui';
import { formatDate } from '~/lib/utils/datetime_utility'; import { formatDate } from '~/lib/utils/datetime_utility';
import { numberToHumanSize } from '~/lib/utils/number_utils'; import { numberToHumanSize } from '~/lib/utils/number_utils';
@ -33,8 +32,7 @@ export default {
GlSprintf, GlSprintf,
GlFormCheckbox, GlFormCheckbox,
GlIcon, GlIcon,
GlDropdown, GlDisclosureDropdown,
GlDropdownItem,
ListItem, ListItem,
ClipboardButton, ClipboardButton,
TimeAgoTooltip, TimeAgoTooltip,
@ -76,6 +74,22 @@ export default {
COPY_IMAGE_PATH_TITLE, COPY_IMAGE_PATH_TITLE,
}, },
computed: { computed: {
items() {
return [
{
text: this.$options.i18n.REMOVE_TAG_BUTTON_TITLE,
extraAttrs: {
class: 'gl-text-red-500!',
'data-testid': 'single-delete-button',
'data-qa-selector': 'tag_delete_button',
},
action: () => {
this.$emit('delete');
},
},
];
},
formattedSize() { formattedSize() {
return this.tag.totalSize return this.tag.totalSize
? numberToHumanSize(Number(this.tag.totalSize)) ? numberToHumanSize(Number(this.tag.totalSize))
@ -177,27 +191,19 @@ export default {
</span> </span>
</template> </template>
<template v-if="tag.canDelete" #right-action> <template v-if="tag.canDelete" #right-action>
<gl-dropdown <gl-disclosure-dropdown
:disabled="disabled" :disabled="disabled"
icon="ellipsis_v" icon="ellipsis_v"
:text="$options.i18n.MORE_ACTIONS_TEXT" :toggle-text="$options.i18n.MORE_ACTIONS_TEXT"
:text-sr-only="true" :text-sr-only="true"
category="tertiary" category="tertiary"
no-caret no-caret
right placement="right"
:class="{ 'gl-opacity-0 gl-pointer-events-none': disabled }" :class="{ 'gl-opacity-0 gl-pointer-events-none': disabled }"
data-testid="additional-actions" data-testid="additional-actions"
data-qa-selector="more_actions_menu" data-qa-selector="more_actions_menu"
> :items="items"
<gl-dropdown-item />
variant="danger"
data-testid="single-delete-button"
data-qa-selector="tag_delete_button"
@click="$emit('delete')"
>
{{ $options.i18n.REMOVE_TAG_BUTTON_TITLE }}
</gl-dropdown-item>
</gl-dropdown>
</template> </template>
<template v-if="!isInvalidTag" #details-published> <template v-if="!isInvalidTag" #details-published>

View File

@ -24,6 +24,7 @@ jest.mock('~/invite_members/utils/trigger_successful_invite_alert');
describe('InviteGroupsModal', () => { describe('InviteGroupsModal', () => {
let wrapper; let wrapper;
const mockToastShow = jest.fn();
const createComponent = (props = {}) => { const createComponent = (props = {}) => {
wrapper = shallowMountExtended(InviteGroupsModal, { wrapper = shallowMountExtended(InviteGroupsModal, {
@ -39,9 +40,18 @@ describe('InviteGroupsModal', () => {
template: '<div><slot></slot><slot name="modal-footer"></slot></div>', template: '<div><slot></slot><slot name="modal-footer"></slot></div>',
}), }),
}, },
mocks: {
$toast: {
show: mockToastShow,
},
},
}); });
}; };
afterEach(() => {
mockToastShow.mockClear();
});
const createInviteGroupToProjectWrapper = () => { const createInviteGroupToProjectWrapper = () => {
createComponent({ isProject: true }); createComponent({ isProject: true });
}; };
@ -133,7 +143,6 @@ describe('InviteGroupsModal', () => {
createComponent(); createComponent();
triggerGroupSelect(sharedGroup); triggerGroupSelect(sharedGroup);
wrapper.vm.$toast = { show: jest.fn() };
jest.spyOn(Api, 'groupShareWithGroup').mockImplementation( jest.spyOn(Api, 'groupShareWithGroup').mockImplementation(
() => () =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
@ -167,7 +176,7 @@ describe('InviteGroupsModal', () => {
}); });
it('displays the successful toastMessage', () => { it('displays the successful toastMessage', () => {
expect(wrapper.vm.$toast.show).toHaveBeenCalledWith('Members were successfully added', { expect(mockToastShow).toHaveBeenCalledWith('Members were successfully added', {
onComplete: expect.any(Function), onComplete: expect.any(Function),
}); });
}); });
@ -187,7 +196,7 @@ describe('InviteGroupsModal', () => {
}); });
it('does not show the toast message on failure', () => { it('does not show the toast message on failure', () => {
expect(wrapper.vm.$toast.show).not.toHaveBeenCalled(); expect(mockToastShow).not.toHaveBeenCalled();
}); });
it('displays the generic error for http server error', () => { it('displays the generic error for http server error', () => {
@ -222,7 +231,6 @@ describe('InviteGroupsModal', () => {
createComponent({ reloadPageOnSubmit: true }); createComponent({ reloadPageOnSubmit: true });
triggerGroupSelect(sharedGroup); triggerGroupSelect(sharedGroup);
wrapper.vm.$toast = { show: jest.fn() };
jest.spyOn(Api, 'groupShareWithGroup').mockResolvedValue({ data: groupPostData }); jest.spyOn(Api, 'groupShareWithGroup').mockResolvedValue({ data: groupPostData });
clickInviteButton(); clickInviteButton();
@ -238,7 +246,7 @@ describe('InviteGroupsModal', () => {
}); });
it('does not show the toast message on failure', () => { it('does not show the toast message on failure', () => {
expect(wrapper.vm.$toast.show).not.toHaveBeenCalled(); expect(mockToastShow).not.toHaveBeenCalled();
}); });
}); });
}); });

View File

@ -1,5 +1,11 @@
import { GlFormCheckbox, GlSprintf, GlIcon, GlDropdown, GlDropdownItem } from '@gitlab/ui'; import {
import { shallowMount } from '@vue/test-utils'; GlFormCheckbox,
GlSprintf,
GlIcon,
GlDisclosureDropdown,
GlDisclosureDropdownItem,
} from '@gitlab/ui';
import { shallowMount, mount } from '@vue/test-utils';
import { nextTick } from 'vue'; import { nextTick } from 'vue';
import { createMockDirective, getBinding } from 'helpers/vue_mock_directive'; import { createMockDirective, getBinding } from 'helpers/vue_mock_directive';
@ -37,16 +43,17 @@ describe('tags list row', () => {
const findManifestDetail = () => wrapper.find('[data-testid="manifest-detail"]'); const findManifestDetail = () => wrapper.find('[data-testid="manifest-detail"]');
const findConfigurationDetail = () => wrapper.find('[data-testid="configuration-detail"]'); const findConfigurationDetail = () => wrapper.find('[data-testid="configuration-detail"]');
const findWarningIcon = () => wrapper.findComponent(GlIcon); const findWarningIcon = () => wrapper.findComponent(GlIcon);
const findAdditionalActionsMenu = () => wrapper.findComponent(GlDropdown); const findAdditionalActionsMenu = () => wrapper.findComponent(GlDisclosureDropdown);
const findDeleteButton = () => wrapper.findComponent(GlDropdownItem); const findDeleteButton = () => wrapper.findComponent(GlDisclosureDropdownItem);
const mountComponent = (propsData = defaultProps) => { const mountComponent = (propsData = defaultProps, mountFn = shallowMount) => {
wrapper = shallowMount(component, { wrapper = mountFn(component, {
stubs: { stubs: {
GlSprintf, GlSprintf,
ListItem, ListItem,
DetailsRow, DetailsRow,
GlDropdown, GlDisclosureDropdown,
GlDisclosureDropdownItem,
}, },
propsData, propsData,
directives: { directives: {
@ -274,10 +281,10 @@ describe('tags list row', () => {
expect(findAdditionalActionsMenu().props()).toMatchObject({ expect(findAdditionalActionsMenu().props()).toMatchObject({
icon: 'ellipsis_v', icon: 'ellipsis_v',
text: 'More actions', toggleText: 'More actions',
textSrOnly: true, textSrOnly: true,
category: 'tertiary', category: 'tertiary',
right: true, placement: 'right',
disabled: false, disabled: false,
}); });
}); });
@ -308,16 +315,19 @@ describe('tags list row', () => {
mountComponent(); mountComponent();
expect(findDeleteButton().exists()).toBe(true); expect(findDeleteButton().exists()).toBe(true);
expect(findDeleteButton().attributes()).toMatchObject({ expect(findDeleteButton().props('item').extraAttrs).toMatchObject({
variant: 'danger', class: 'gl-text-red-500!',
'data-testid': 'single-delete-button',
'data-qa-selector': 'tag_delete_button',
}); });
expect(findDeleteButton().text()).toBe(REMOVE_TAG_BUTTON_TITLE); expect(findDeleteButton().text()).toBe(REMOVE_TAG_BUTTON_TITLE);
}); });
it('delete event emits delete', () => { it('delete event emits delete', () => {
mountComponent(); mountComponent(undefined, mount);
findDeleteButton().vm.$emit('click'); wrapper.find('[data-testid="single-delete-button"]').trigger('click');
expect(wrapper.emitted('delete')).toEqual([[]]); expect(wrapper.emitted('delete')).toEqual([[]]);
}); });