summaryrefslogtreecommitdiff
path: root/spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js')
-rw-r--r--spec/frontend/deploy_freeze/components/timezone_dropdown_spec.js98
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');
+ });
+ });
+});