diff options
Diffstat (limited to 'spec/frontend/frequent_items')
8 files changed, 39 insertions, 80 deletions
diff --git a/spec/frontend/frequent_items/components/app_spec.js b/spec/frontend/frequent_items/components/app_spec.js index b74e4ac45cf..80059c4c87f 100644 --- a/spec/frontend/frequent_items/components/app_spec.js +++ b/spec/frontend/frequent_items/components/app_spec.js @@ -1,15 +1,16 @@ import MockAdapter from 'axios-mock-adapter'; import Vue from 'vue'; -import { mountComponentWithStore } from 'helpers/vue_mount_component_helper'; +import { useRealDate } from 'helpers/fake_date'; import { useLocalStorageSpy } from 'helpers/local_storage_helper'; +import { mountComponentWithStore } from 'helpers/vue_mount_component_helper'; import waitForPromises from 'helpers/wait_for_promises'; -import axios from '~/lib/utils/axios_utils'; import appComponent from '~/frequent_items/components/app.vue'; -import eventHub from '~/frequent_items/event_hub'; import { FREQUENT_ITEMS, HOUR_IN_MS } from '~/frequent_items/constants'; +import eventHub from '~/frequent_items/event_hub'; +import { createStore } from '~/frequent_items/store'; import { getTopFrequentItems } from '~/frequent_items/utils'; +import axios from '~/lib/utils/axios_utils'; import { currentSession, mockFrequentProjects, mockSearchedProjects } from '../mock_data'; -import { createStore } from '~/frequent_items/store'; useLocalStorageSpy(); @@ -93,23 +94,27 @@ describe('Frequent Items App Component', () => { expect(projects.length).toBe(1); }); - it('should increase frequency of report if it was logged multiple times over the course of an hour', () => { - let projects; - const newTimestamp = Date.now() + HOUR_IN_MS + 1; + describe('with real date', () => { + useRealDate(); - vm.logItemAccess(session.storageKey, session.project); - projects = JSON.parse(storage[session.storageKey]); + it('should increase frequency of report if it was logged multiple times over the course of an hour', () => { + let projects; + const newTimestamp = Date.now() + HOUR_IN_MS + 1; - expect(projects[0].frequency).toBe(1); + vm.logItemAccess(session.storageKey, session.project); + projects = JSON.parse(storage[session.storageKey]); - vm.logItemAccess(session.storageKey, { - ...session.project, - lastAccessedOn: newTimestamp, - }); - projects = JSON.parse(storage[session.storageKey]); + expect(projects[0].frequency).toBe(1); + + vm.logItemAccess(session.storageKey, { + ...session.project, + lastAccessedOn: newTimestamp, + }); + projects = JSON.parse(storage[session.storageKey]); - expect(projects[0].frequency).toBe(2); - expect(projects[0].lastAccessedOn).not.toBe(session.project.lastAccessedOn); + expect(projects[0].frequency).toBe(2); + expect(projects[0].lastAccessedOn).not.toBe(session.project.lastAccessedOn); + }); }); it('should always update project metadata', () => { diff --git a/spec/frontend/frequent_items/components/frequent_items_list_item_spec.js b/spec/frontend/frequent_items/components/frequent_items_list_item_spec.js index 19095c4474e..66fb346cb38 100644 --- a/spec/frontend/frequent_items/components/frequent_items_list_item_spec.js +++ b/spec/frontend/frequent_items/components/frequent_items_list_item_spec.js @@ -1,6 +1,6 @@ import { shallowMount } from '@vue/test-utils'; -import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; import { trimText } from 'helpers/text_helper'; +import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; import frequentItemsListItemComponent from '~/frequent_items/components/frequent_items_list_item.vue'; import { createStore } from '~/frequent_items/store'; import { mockProject } from '../mock_data'; diff --git a/spec/frontend/frequent_items/components/frequent_items_list_spec.js b/spec/frontend/frequent_items/components/frequent_items_list_spec.js index 96f73ab1468..bd0711005b3 100644 --- a/spec/frontend/frequent_items/components/frequent_items_list_spec.js +++ b/spec/frontend/frequent_items/components/frequent_items_list_spec.js @@ -1,7 +1,7 @@ import { mount } from '@vue/test-utils'; -import { createStore } from '~/frequent_items/store'; import frequentItemsListComponent from '~/frequent_items/components/frequent_items_list.vue'; import frequentItemsListItemComponent from '~/frequent_items/components/frequent_items_list_item.vue'; +import { createStore } from '~/frequent_items/store'; import { mockFrequentProjects } from '../mock_data'; describe('FrequentItemsListComponent', () => { diff --git a/spec/frontend/frequent_items/components/frequent_items_search_input_spec.js b/spec/frontend/frequent_items/components/frequent_items_search_input_spec.js index cdd8b127676..0280fdb0ca2 100644 --- a/spec/frontend/frequent_items/components/frequent_items_search_input_spec.js +++ b/spec/frontend/frequent_items/components/frequent_items_search_input_spec.js @@ -1,8 +1,8 @@ +import { GlSearchBoxByType } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; import searchComponent from '~/frequent_items/components/frequent_items_search_input.vue'; import { createStore } from '~/frequent_items/store'; -import eventHub from '~/frequent_items/event_hub'; describe('FrequentItemsSearchInputComponent', () => { let wrapper; @@ -16,6 +16,8 @@ describe('FrequentItemsSearchInputComponent', () => { propsData: { namespace }, }); + const findSearchBoxByType = () => wrapper.find(GlSearchBoxByType); + beforeEach(() => { store = createStore({ dropdownType: 'project' }); jest.spyOn(store, 'dispatch').mockImplementation(() => {}); @@ -33,59 +35,13 @@ describe('FrequentItemsSearchInputComponent', () => { vm.$destroy(); }); - describe('methods', () => { - describe('setFocus', () => { - it('should set focus to search input', () => { - jest.spyOn(vm.$refs.search, 'focus').mockImplementation(() => {}); - - vm.setFocus(); - - expect(vm.$refs.search.focus).toHaveBeenCalled(); - }); - }); - }); - - describe('mounted', () => { - it('should listen `dropdownOpen` event', (done) => { - jest.spyOn(eventHub, '$on').mockImplementation(() => {}); - const vmX = createComponent().vm; - - vmX.$nextTick(() => { - expect(eventHub.$on).toHaveBeenCalledWith( - `${vmX.namespace}-dropdownOpen`, - expect.any(Function), - ); - done(); - }); - }); - }); - - describe('beforeDestroy', () => { - it('should unbind event listeners on eventHub', (done) => { - const vmX = createComponent().vm; - jest.spyOn(eventHub, '$off').mockImplementation(() => {}); - - vmX.$mount(); - vmX.$destroy(); - - vmX.$nextTick(() => { - expect(eventHub.$off).toHaveBeenCalledWith( - `${vmX.namespace}-dropdownOpen`, - expect.any(Function), - ); - done(); - }); - }); - }); - describe('template', () => { it('should render component element', () => { expect(wrapper.classes()).toContain('search-input-container'); - expect(wrapper.find('input.form-control').exists()).toBe(true); - expect(wrapper.find('.search-icon').exists()).toBe(true); - expect(wrapper.find('input.form-control').attributes('placeholder')).toBe( - 'Search your projects', - ); + expect(findSearchBoxByType().exists()).toBe(true); + expect(findSearchBoxByType().attributes()).toMatchObject({ + placeholder: 'Search your projects', + }); }); }); @@ -96,9 +52,7 @@ describe('FrequentItemsSearchInputComponent', () => { const value = 'my project'; - const input = wrapper.find('input'); - input.setValue(value); - input.trigger('input'); + findSearchBoxByType().vm.$emit('input', value); await wrapper.vm.$nextTick(); diff --git a/spec/frontend/frequent_items/store/actions_spec.js b/spec/frontend/frequent_items/store/actions_spec.js index 351fde25f49..dacfc7ce707 100644 --- a/spec/frontend/frequent_items/store/actions_spec.js +++ b/spec/frontend/frequent_items/store/actions_spec.js @@ -1,10 +1,10 @@ -import testAction from 'helpers/vuex_action_helper'; import MockAdapter from 'axios-mock-adapter'; -import axios from '~/lib/utils/axios_utils'; -import AccessorUtilities from '~/lib/utils/accessor'; +import testAction from 'helpers/vuex_action_helper'; import * as actions from '~/frequent_items/store/actions'; import * as types from '~/frequent_items/store/mutation_types'; import state from '~/frequent_items/store/state'; +import AccessorUtilities from '~/lib/utils/accessor'; +import axios from '~/lib/utils/axios_utils'; import { mockNamespace, mockStorageKey, diff --git a/spec/frontend/frequent_items/store/getters_spec.js b/spec/frontend/frequent_items/store/getters_spec.js index 1cd12eb6832..97732cd95fc 100644 --- a/spec/frontend/frequent_items/store/getters_spec.js +++ b/spec/frontend/frequent_items/store/getters_spec.js @@ -1,5 +1,5 @@ -import state from '~/frequent_items/store/state'; import * as getters from '~/frequent_items/store/getters'; +import state from '~/frequent_items/store/state'; describe('Frequent Items Dropdown Store Getters', () => { let mockedState; diff --git a/spec/frontend/frequent_items/store/mutations_spec.js b/spec/frontend/frequent_items/store/mutations_spec.js index d36964b2600..e593c9fae58 100644 --- a/spec/frontend/frequent_items/store/mutations_spec.js +++ b/spec/frontend/frequent_items/store/mutations_spec.js @@ -1,6 +1,6 @@ -import state from '~/frequent_items/store/state'; -import mutations from '~/frequent_items/store/mutations'; import * as types from '~/frequent_items/store/mutation_types'; +import mutations from '~/frequent_items/store/mutations'; +import state from '~/frequent_items/store/state'; import { mockNamespace, mockStorageKey, diff --git a/spec/frontend/frequent_items/utils_spec.js b/spec/frontend/frequent_items/utils_spec.js index 181dd9268dc..a7ab18b0d10 100644 --- a/spec/frontend/frequent_items/utils_spec.js +++ b/spec/frontend/frequent_items/utils_spec.js @@ -1,11 +1,11 @@ import { GlBreakpointInstance as bp } from '@gitlab/ui/dist/utils'; +import { HOUR_IN_MS, FREQUENT_ITEMS } from '~/frequent_items/constants'; import { isMobile, getTopFrequentItems, updateExistingFrequentItem, sanitizeItem, } from '~/frequent_items/utils'; -import { HOUR_IN_MS, FREQUENT_ITEMS } from '~/frequent_items/constants'; import { mockProject, unsortedFrequentItems, sortedFrequentItems } from './mock_data'; describe('Frequent Items utils spec', () => { |