diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/features/projects/clusters_spec.rb | 1 | ||||
-rw-r--r-- | spec/frontend/clusters_list/components/clusters_spec.js | 55 | ||||
-rw-r--r-- | spec/frontend/clusters_list/store/actions_spec.js | 50 | ||||
-rw-r--r-- | spec/frontend/vue_mr_widget/mock_data.js | 1 | ||||
-rw-r--r-- | spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/all_models.yml | 1 | ||||
-rw-r--r-- | spec/serializers/merge_request_widget_entity_spec.rb | 7 |
7 files changed, 121 insertions, 0 deletions
diff --git a/spec/features/projects/clusters_spec.rb b/spec/features/projects/clusters_spec.rb index ad51533c42c..fc2de4df5ec 100644 --- a/spec/features/projects/clusters_spec.rb +++ b/spec/features/projects/clusters_spec.rb @@ -11,6 +11,7 @@ describe 'Clusters', :js do before do project.add_maintainer(user) gitlab_sign_in(user) + stub_feature_flags(clusters_list_redesign: false) end context 'when user does not have a cluster and visits cluster index page' do diff --git a/spec/frontend/clusters_list/components/clusters_spec.js b/spec/frontend/clusters_list/components/clusters_spec.js new file mode 100644 index 00000000000..825bc7813a5 --- /dev/null +++ b/spec/frontend/clusters_list/components/clusters_spec.js @@ -0,0 +1,55 @@ +import { createLocalVue, mount } from '@vue/test-utils'; +import { GlTable, GlLoadingIcon } from '@gitlab/ui'; +import Clusters from '~/clusters_list/components/clusters.vue'; +import Vuex from 'vuex'; + +const localVue = createLocalVue(); +localVue.use(Vuex); + +describe('Clusters', () => { + let wrapper; + + const findTable = () => wrapper.find(GlTable); + const findLoader = () => wrapper.find(GlLoadingIcon); + + const mountComponent = _state => { + const state = { clusters: [], endpoint: 'some/endpoint', ..._state }; + const store = new Vuex.Store({ + state, + }); + + wrapper = mount(Clusters, { localVue, store }); + }; + + beforeEach(() => { + mountComponent({ loading: false }); + }); + + describe('clusters table', () => { + it('displays a loader instead of the table while loading', () => { + mountComponent({ loading: true }); + expect(findLoader().exists()).toBe(true); + expect(findTable().exists()).toBe(false); + }); + + it('displays a table component', () => { + expect(findTable().exists()).toBe(true); + expect(findTable().exists()).toBe(true); + }); + + it('renders the correct table headers', () => { + const tableHeaders = wrapper.vm.$options.fields; + const headers = findTable().findAll('th'); + + expect(headers.length).toBe(tableHeaders.length); + + tableHeaders.forEach((headerText, i) => + expect(headers.at(i).text()).toEqual(headerText.label), + ); + }); + + it('should stack on smaller devices', () => { + expect(findTable().classes()).toContain('b-table-stacked-md'); + }); + }); +}); diff --git a/spec/frontend/clusters_list/store/actions_spec.js b/spec/frontend/clusters_list/store/actions_spec.js new file mode 100644 index 00000000000..e903200bf1d --- /dev/null +++ b/spec/frontend/clusters_list/store/actions_spec.js @@ -0,0 +1,50 @@ +import MockAdapter from 'axios-mock-adapter'; +import flashError from '~/flash'; +import testAction from 'helpers/vuex_action_helper'; +import axios from '~/lib/utils/axios_utils'; +import * as types from '~/clusters_list/store/mutation_types'; +import * as actions from '~/clusters_list/store/actions'; + +jest.mock('~/flash.js'); + +describe('Clusters store actions', () => { + describe('fetchClusters', () => { + let mock; + const endpoint = '/clusters'; + const clusters = [{ name: 'test' }]; + + beforeEach(() => { + mock = new MockAdapter(axios); + }); + + afterEach(() => mock.restore()); + + it('should commit SET_CLUSTERS_DATA with received response', done => { + mock.onGet().reply(200, clusters); + + testAction( + actions.fetchClusters, + { endpoint }, + {}, + [ + { type: types.SET_CLUSTERS_DATA, payload: clusters }, + { type: types.SET_LOADING_STATE, payload: false }, + ], + [], + () => done(), + ); + }); + + it('should show flash on API error', done => { + mock.onGet().reply(400, 'Not Found'); + + testAction(actions.fetchClusters, { endpoint }, {}, [], [], () => { + expect(flashError).toHaveBeenCalledWith(expect.stringMatching('error')); + done(); + }); + }); + }); +}); + +// prevent babel-plugin-rewire from generating an invalid default during karma tests +export default () => {}; diff --git a/spec/frontend/vue_mr_widget/mock_data.js b/spec/frontend/vue_mr_widget/mock_data.js index d11756d712a..8ed153658fd 100644 --- a/spec/frontend/vue_mr_widget/mock_data.js +++ b/spec/frontend/vue_mr_widget/mock_data.js @@ -37,6 +37,7 @@ export default { target_project_id: 19, target_project_full_path: '/group2/project2', merge_request_add_ci_config_path: '/group2/project2/new/pipeline', + new_project_pipeline_path: '/group2/project2/pipelines/new', metrics: { merged_by: { name: 'Administrator', diff --git a/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js b/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js index 796235be4c3..1906585af7b 100644 --- a/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js +++ b/spec/javascripts/vue_mr_widget/stores/mr_widget_store_spec.js @@ -102,5 +102,11 @@ describe('MergeRequestStore', () => { expect(store.pipelinesEmptySvgPath).toBe('/path/to/svg'); }); + + it('should set newPipelinePath', () => { + store.setData({ ...mockData }); + + expect(store.newPipelinePath).toBe('/group2/project2/pipelines/new'); + }); }); }); diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index 7740c34702b..78e80576aef 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -466,6 +466,7 @@ project: - container_expiration_policy - resource_groups - autoclose_referenced_issues +- status_page_setting award_emoji: - awardable - user diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb index beb6a0de0f6..31f8bcbfef0 100644 --- a/spec/serializers/merge_request_widget_entity_spec.rb +++ b/spec/serializers/merge_request_widget_entity_spec.rb @@ -162,6 +162,13 @@ describe MergeRequestWidgetEntity do .to eq('Maintainer') end + it 'has new pipeline path for project' do + project.add_maintainer(user) + + expect(subject[:new_project_pipeline_path]) + .to eq("/#{resource.project.full_path}/pipelines/new") + end + describe 'when source project is deleted' do let(:project) { create(:project, :repository) } let(:forked_project) { fork_project(project) } |