Skip to content
代码片段 群组 项目
提交 ec2531aa 编辑于 作者: Mughees Pervaiz's avatar Mughees Pervaiz 提交者: Illya Klymov
浏览文件

Migrate "import_actions_cell.vue" to GlDisclosure

上级 c60b4916
No related branches found
No related tags found
无相关合并请求
<script> <script>
import { GlDropdown, GlDropdownItem, GlIcon, GlTooltipDirective as GlTooltip } from '@gitlab/ui'; import {
GlDisclosureDropdown,
GlDisclosureDropdownItem,
GlIcon,
GlButtonGroup,
GlButton,
GlTooltipDirective as GlTooltip,
} from '@gitlab/ui';
export default { export default {
components: { components: {
GlIcon, GlIcon,
GlDropdown, GlDisclosureDropdown,
GlDropdownItem, GlDisclosureDropdownItem,
GlButtonGroup,
GlButton,
}, },
directives: { directives: {
GlTooltip, GlTooltip,
...@@ -34,20 +43,31 @@ export default { ...@@ -34,20 +43,31 @@ export default {
<template> <template>
<span class="gl-white-space-nowrap gl-inline-flex gl-align-items-center"> <span class="gl-white-space-nowrap gl-inline-flex gl-align-items-center">
<gl-dropdown <gl-button-group v-if="isAvailableForImport || isFinished">
v-if="isAvailableForImport || isFinished" <gl-button
:text="isFinished ? __('Re-import with projects') : __('Import with projects')" variant="confirm"
:disabled="isInvalid" category="secondary"
variant="confirm" @click="importGroup({ migrateProjects: true })"
category="secondary" >{{ isFinished ? __('Re-import with projects') : __('Import with projects') }}</gl-button
data-qa-selector="import_group_button" >
split <gl-disclosure-dropdown
@click="importGroup({ migrateProjects: true })" toggle-text="Import options"
> text-sr-only
<gl-dropdown-item @click="importGroup({ migrateProjects: false })">{{ :disabled="isInvalid"
isFinished ? __('Re-import without projects') : __('Import without projects') icon="chevron-down"
}}</gl-dropdown-item> no-caret
</gl-dropdown> variant="confirm"
category="secondary"
data-qa-selector="import_group_button"
>
<gl-disclosure-dropdown-item @action="importGroup({ migrateProjects: false })">
<template #list-item>
{{ isFinished ? __('Re-import without projects') : __('Import without projects') }}
</template></gl-disclosure-dropdown-item
>
</gl-disclosure-dropdown>
</gl-button-group>
<gl-icon <gl-icon
v-if="isFinished" v-if="isFinished"
v-gl-tooltip v-gl-tooltip
......
import { GlDropdown, GlIcon, GlDropdownItem } from '@gitlab/ui'; import {
GlDisclosureDropdown,
GlDisclosureDropdownItem,
GlButtonGroup,
GlButton,
GlIcon,
} from '@gitlab/ui';
import { shallowMount } from '@vue/test-utils'; import { shallowMount } from '@vue/test-utils';
import ImportActionsCell from '~/import_entities/import_groups/components/import_actions_cell.vue'; import ImportActionsCell from '~/import_entities/import_groups/components/import_actions_cell.vue';
...@@ -13,6 +19,11 @@ describe('import actions cell', () => { ...@@ -13,6 +19,11 @@ describe('import actions cell', () => {
isInvalid: false, isInvalid: false,
...props, ...props,
}, },
stubs: {
GlButtonGroup,
GlDisclosureDropdown,
GlDisclosureDropdownItem,
},
}); });
}; };
...@@ -22,9 +33,9 @@ describe('import actions cell', () => { ...@@ -22,9 +33,9 @@ describe('import actions cell', () => {
}); });
it('renders import dropdown', () => { it('renders import dropdown', () => {
const dropdown = wrapper.findComponent(GlDropdown); const button = wrapper.findComponent(GlButton);
expect(dropdown.exists()).toBe(true); expect(button.exists()).toBe(true);
expect(dropdown.props('text')).toBe('Import with projects'); expect(button.text()).toBe('Import with projects');
}); });
it('does not render icon with a hint', () => { it('does not render icon with a hint', () => {
...@@ -38,9 +49,9 @@ describe('import actions cell', () => { ...@@ -38,9 +49,9 @@ describe('import actions cell', () => {
}); });
it('renders re-import dropdown', () => { it('renders re-import dropdown', () => {
const dropdown = wrapper.findComponent(GlDropdown); const button = wrapper.findComponent(GlButton);
expect(dropdown.exists()).toBe(true); expect(button.exists()).toBe(true);
expect(dropdown.props('text')).toBe('Re-import with projects'); expect(button.text()).toBe('Re-import with projects');
}); });
it('renders icon with a hint', () => { it('renders icon with a hint', () => {
...@@ -55,22 +66,22 @@ describe('import actions cell', () => { ...@@ -55,22 +66,22 @@ describe('import actions cell', () => {
it('does not render import dropdown when group is not available for import', () => { it('does not render import dropdown when group is not available for import', () => {
createComponent({ isAvailableForImport: false }); createComponent({ isAvailableForImport: false });
const dropdown = wrapper.findComponent(GlDropdown); const dropdown = wrapper.findComponent(GlDisclosureDropdown);
expect(dropdown.exists()).toBe(false); expect(dropdown.exists()).toBe(false);
}); });
it('renders import dropdown as disabled when group is invalid', () => { it('renders import dropdown as disabled when group is invalid', () => {
createComponent({ isInvalid: true, isAvailableForImport: true }); createComponent({ isInvalid: true, isAvailableForImport: true });
const dropdown = wrapper.findComponent(GlDropdown); const dropdown = wrapper.findComponent(GlDisclosureDropdown);
expect(dropdown.props().disabled).toBe(true); expect(dropdown.props().disabled).toBe(true);
}); });
it('emits import-group event when import button is clicked', () => { it('emits import-group event when import button is clicked', () => {
createComponent({ isAvailableForImport: true }); createComponent({ isAvailableForImport: true });
const dropdown = wrapper.findComponent(GlDropdown); const button = wrapper.findComponent(GlButton);
dropdown.vm.$emit('click'); button.vm.$emit('click');
expect(wrapper.emitted('import-group')).toHaveLength(1); expect(wrapper.emitted('import-group')).toHaveLength(1);
}); });
...@@ -87,23 +98,24 @@ describe('import actions cell', () => { ...@@ -87,23 +98,24 @@ describe('import actions cell', () => {
}); });
it('render import dropdown', () => { it('render import dropdown', () => {
const dropdown = wrapper.findComponent(GlDropdown); const button = wrapper.findComponent(GlButton);
expect(dropdown.props('text')).toBe(`${expectedAction} with projects`); const dropdown = wrapper.findComponent(GlDisclosureDropdown);
expect(dropdown.findComponent(GlDropdownItem).text()).toBe( expect(button.element).toHaveText(`${expectedAction} with projects`);
expect(dropdown.findComponent(GlDisclosureDropdownItem).text()).toBe(
`${expectedAction} without projects`, `${expectedAction} without projects`,
); );
}); });
it('request migrate projects by default', () => { it('request migrate projects by default', () => {
const dropdown = wrapper.findComponent(GlDropdown); const button = wrapper.findComponent(GlButton);
dropdown.vm.$emit('click'); button.vm.$emit('click');
expect(wrapper.emitted('import-group')[0]).toStrictEqual([{ migrateProjects: true }]); expect(wrapper.emitted('import-group')[0]).toStrictEqual([{ migrateProjects: true }]);
}); });
it('request not to migrate projects via dropdown option', () => { it('request not to migrate projects via dropdown option', () => {
const dropdown = wrapper.findComponent(GlDropdown); const dropdown = wrapper.findComponent(GlDisclosureDropdown);
dropdown.findComponent(GlDropdownItem).vm.$emit('click'); dropdown.findComponent(GlDisclosureDropdownItem).vm.$emit('action');
expect(wrapper.emitted('import-group')[0]).toStrictEqual([{ migrateProjects: false }]); expect(wrapper.emitted('import-group')[0]).toStrictEqual([{ migrateProjects: false }]);
}); });
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册