summaryrefslogtreecommitdiff
path: root/spec/frontend/confidential_merge_request/components/dropdown_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/confidential_merge_request/components/dropdown_spec.js')
-rw-r--r--spec/frontend/confidential_merge_request/components/dropdown_spec.js100
1 files changed, 66 insertions, 34 deletions
diff --git a/spec/frontend/confidential_merge_request/components/dropdown_spec.js b/spec/frontend/confidential_merge_request/components/dropdown_spec.js
index 770f2636648..4d577fe1132 100644
--- a/spec/frontend/confidential_merge_request/components/dropdown_spec.js
+++ b/spec/frontend/confidential_merge_request/components/dropdown_spec.js
@@ -1,47 +1,79 @@
-import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
-import { mount } from '@vue/test-utils';
+import { GlCollapsibleListbox } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
import Dropdown from '~/confidential_merge_request/components/dropdown.vue';
-let vm;
+const TEST_PROJECTS = [
+ {
+ id: 7,
+ name: 'test',
+ },
+ {
+ id: 9,
+ name: 'lorem ipsum',
+ },
+ {
+ id: 11,
+ name: 'dolar sit',
+ },
+];
-function factory(projects = []) {
- vm = mount(Dropdown, {
- propsData: {
- projects,
- selectedProject: projects[0],
- },
- });
-}
-
-describe('Confidential merge request project dropdown component', () => {
- afterEach(() => {
- vm.destroy();
- });
+describe('~/confidential_merge_request/components/dropdown.vue', () => {
+ let wrapper;
- it('renders dropdown items', () => {
- factory([
- {
- id: 1,
- name: 'test',
- },
- {
- id: 2,
- name: 'test',
+ function factory(props = {}) {
+ wrapper = shallowMount(Dropdown, {
+ propsData: {
+ projects: TEST_PROJECTS,
+ ...props,
},
- ]);
+ });
+ }
- expect(vm.findAllComponents(GlDropdownItem).length).toBe(2);
- });
+ const findListbox = () => wrapper.findComponent(GlCollapsibleListbox);
+
+ describe('default', () => {
+ beforeEach(() => {
+ factory();
+ });
+
+ it('renders collapsible listbox', () => {
+ expect(findListbox().props()).toMatchObject({
+ icon: 'lock',
+ selected: [],
+ toggleText: 'Select private project',
+ block: true,
+ items: TEST_PROJECTS.map(({ id, name }) => ({
+ value: String(id),
+ text: name,
+ })),
+ });
+ });
+
+ it('does not emit anything', () => {
+ expect(wrapper.emitted()).toEqual({});
+ });
- it('shows lock icon', () => {
- factory();
+ describe('when listbox emits selected', () => {
+ beforeEach(() => {
+ findListbox().vm.$emit('select', String(TEST_PROJECTS[1].id));
+ });
- expect(vm.findComponent(GlDropdown).props('icon')).toBe('lock');
+ it('emits selected project', () => {
+ expect(wrapper.emitted('select')).toEqual([[TEST_PROJECTS[1]]]);
+ });
+ });
});
- it('has dropdown text', () => {
- factory();
+ describe('with selected', () => {
+ beforeEach(() => {
+ factory({ selectedProject: TEST_PROJECTS[1] });
+ });
- expect(vm.findComponent(GlDropdown).props('text')).toBe('Select private project');
+ it('shows selected project', () => {
+ expect(findListbox().props()).toMatchObject({
+ selected: String(TEST_PROJECTS[1].id),
+ toggleText: TEST_PROJECTS[1].name,
+ });
+ });
});
});