diff options
Diffstat (limited to 'spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js')
-rw-r--r-- | spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js b/spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js new file mode 100644 index 00000000000..644cd0b5f27 --- /dev/null +++ b/spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js @@ -0,0 +1,98 @@ +import Vuex from 'vuex'; +import { shallowMount, createLocalVue } from '@vue/test-utils'; +import { GlDeprecatedDropdownItem, GlNewDropdown } from '@gitlab/ui'; +import TimezoneDropdown from '~/vue_shared/components/timezone_dropdown.vue'; +import createStore from '~/deploy_freeze/store'; + +const localVue = createLocalVue(); +localVue.use(Vuex); + +describe('Deploy freeze timezone dropdown', () => { + let wrapper; + let store; + const timezoneDataFixture = getJSONFixture('/api/freeze-periods/timezone_data.json'); + + const createComponent = (searchTerm, selectedTimezone) => { + store = createStore({ + projectId: '8', + timezoneData: timezoneDataFixture, + }); + wrapper = shallowMount(TimezoneDropdown, { + store, + localVue, + propsData: { + value: selectedTimezone, + timezoneData: timezoneDataFixture, + }, + }); + + wrapper.setData({ searchTerm }); + }; + + const findAllDropdownItems = () => wrapper.findAll(GlDeprecatedDropdownItem); + const findDropdownItemByIndex = index => wrapper.findAll(GlDeprecatedDropdownItem).at(index); + + afterEach(() => { + wrapper.destroy(); + wrapper = null; + }); + + describe('No time zones found', () => { + beforeEach(() => { + createComponent('UTC timezone'); + }); + + it('renders empty results message', () => { + expect(findDropdownItemByIndex(0).text()).toBe('No matching results'); + }); + }); + + describe('Search term is empty', () => { + beforeEach(() => { + createComponent(''); + }); + + it('renders all timezones when search term is empty', () => { + expect(findAllDropdownItems()).toHaveLength(timezoneDataFixture.length); + }); + }); + + describe('Time zones found', () => { + beforeEach(() => { + createComponent('Alaska'); + }); + + it('renders only the time zone searched for', () => { + expect(findAllDropdownItems()).toHaveLength(1); + expect(findDropdownItemByIndex(0).text()).toBe('[UTC -8] Alaska'); + }); + + it('should not display empty results message', () => { + expect(wrapper.find('[data-testid="noMatchingResults"]').exists()).toBe(false); + }); + + describe('Custom events', () => { + it('should emit input if a time zone is clicked', () => { + findDropdownItemByIndex(0).vm.$emit('click'); + expect(wrapper.emitted('input')).toEqual([ + [ + { + formattedTimezone: '[UTC -8] Alaska', + identifier: 'America/Juneau', + }, + ], + ]); + }); + }); + }); + + describe('Selected time zone', () => { + beforeEach(() => { + createComponent('', 'Alaska'); + }); + + it('renders selected time zone as dropdown label', () => { + expect(wrapper.find(GlNewDropdown).vm.text).toBe('Alaska'); + }); + }); +}); |