Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
f9c23393a5
commit
2926cbb864
|
|
@ -1 +1 @@
|
||||||
b7cdb3d14671f81166148616b029db2b5a785709
|
ef91aecceeb69d7b7d7e7f8fb8b26e4dfcf1c266
|
||||||
|
|
|
||||||
2
Gemfile
2
Gemfile
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"},
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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([[]]);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue