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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-08-02 15:09:59 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-08-02 15:09:59 +0300
commit3eec6c2511af2b10cd25be64dcd84c4a35a7bcdb (patch)
tree8af0733be4f7cb507353ed97ca8d6b4e9e374b7f /spec/frontend/vue_shared/components/dropdown
parent1930898566965dbc1bd779089ec9e58e17674268 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/vue_shared/components/dropdown')
-rw-r--r--spec/frontend/vue_shared/components/dropdown/dropdown_widget_spec.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/spec/frontend/vue_shared/components/dropdown/dropdown_widget_spec.js b/spec/frontend/vue_shared/components/dropdown/dropdown_widget_spec.js
new file mode 100644
index 00000000000..929bd34c10f
--- /dev/null
+++ b/spec/frontend/vue_shared/components/dropdown/dropdown_widget_spec.js
@@ -0,0 +1,79 @@
+import { GlDropdown, GlSearchBoxByType, GlDropdownItem } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+
+import DropdownWidget from '~/vue_shared/components/dropdown/dropdown_widget/dropdown_widget.vue';
+
+describe('DropdownWidget component', () => {
+ let wrapper;
+
+ const findDropdown = () => wrapper.findComponent(GlDropdown);
+ const findDropdownItems = () => wrapper.findAll(GlDropdownItem);
+ const findSearch = () => wrapper.findComponent(GlSearchBoxByType);
+
+ const createComponent = ({ props = {} } = {}) => {
+ wrapper = shallowMount(DropdownWidget, {
+ propsData: {
+ ...props,
+ options: [
+ {
+ id: '1',
+ title: 'Option 1',
+ },
+ {
+ id: '2',
+ title: 'Option 2',
+ },
+ ],
+ },
+ stubs: {
+ GlDropdown,
+ },
+ });
+
+ // We need to mock out `showDropdown` which
+ // invokes `show` method of BDropdown used inside GlDropdown.
+ // Context: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54895#note_524281679
+ jest.spyOn(wrapper.vm, 'showDropdown').mockImplementation();
+ };
+
+ beforeEach(() => {
+ createComponent();
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ wrapper = null;
+ });
+
+ it('passes default selectText prop to dropdown', () => {
+ expect(findDropdown().props('text')).toBe('Select');
+ });
+
+ describe('when dropdown is open', () => {
+ beforeEach(async () => {
+ findDropdown().vm.$emit('show');
+ await wrapper.vm.$nextTick();
+ });
+
+ it('emits search event when typing in search box', () => {
+ const searchTerm = 'searchTerm';
+ findSearch().vm.$emit('input', searchTerm);
+
+ expect(wrapper.emitted('set-search')).toEqual([[searchTerm]]);
+ });
+
+ it('renders one selectable item per passed option', async () => {
+ expect(findDropdownItems()).toHaveLength(2);
+ });
+
+ it('emits set-option event when clicking on an option', async () => {
+ wrapper
+ .findAll('[data-testid="unselected-option"]')
+ .at(1)
+ .vm.$emit('click', new Event('click'));
+ await wrapper.vm.$nextTick();
+
+ expect(wrapper.emitted('set-option')).toEqual([[wrapper.props().options[1]]]);
+ });
+ });
+});