diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-14 12:09:26 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-14 12:09:26 +0000 |
commit | 2e4c4055181eec9186458dd5dd3219c937032ec7 (patch) | |
tree | eee59e7124ffcf093f1b53369436c69cfe4d9cc5 /spec | |
parent | 97f0ae7454597105a27df65ffb772949d9d4f3cb (diff) | |
download | gitlab-ce-2e4c4055181eec9186458dd5dd3219c937032ec7.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
10 files changed, 142 insertions, 38 deletions
diff --git a/spec/controllers/projects/import/jira_controller_spec.rb b/spec/controllers/projects/import/jira_controller_spec.rb index 8e0d506e5e4..4629aab65dd 100644 --- a/spec/controllers/projects/import/jira_controller_spec.rb +++ b/spec/controllers/projects/import/jira_controller_spec.rb @@ -5,6 +5,7 @@ require 'spec_helper' describe Projects::Import::JiraController do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project) } + let_it_be(:jira_project_key) { 'Test' } context 'with anonymous user' do before do @@ -21,7 +22,7 @@ describe Projects::Import::JiraController do context 'post import' do it 'redirects to issues page' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' } + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } expect(response).to redirect_to(new_user_session_path) end @@ -49,7 +50,7 @@ describe Projects::Import::JiraController do context 'post import' do it 'redirects to issues page' do - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' } + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } expect(response).to redirect_to(project_issues_path(project)) end @@ -65,12 +66,64 @@ describe Projects::Import::JiraController do context 'when jira service is enabled for the project' do let_it_be(:jira_service) { create(:jira_service, project: project) } + context 'when user is developer' do + let_it_be(:dev) { create(:user) } + + before do + sign_in(dev) + project.add_developer(dev) + end + + context 'get show' do + before do + get :show, params: { namespace_id: project.namespace.to_param, project_id: project } + end + + it 'does not query jira service' do + expect(project).not_to receive(:jira_service) + end + + it 'renders show template' do + expect(response).to render_template(:show) + expect(assigns(:jira_projects)).not_to be_present + end + end + + context 'post import' do + it 'returns 404' do + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } + + expect(response).to have_gitlab_http_status(:not_found) + end + end + end + + context 'when issues disabled' do + let_it_be(:disabled_issues_project) { create(:project, :public, :issues_disabled) } + + context 'get show' do + it 'returs 404' do + get :show, params: { namespace_id: project.namespace.to_param, project_id: disabled_issues_project } + + expect(response).to have_gitlab_http_status(:not_found) + end + end + + context 'post import' do + it 'returs 404' do + post :import, params: { namespace_id: disabled_issues_project.namespace, project_id: disabled_issues_project, jira_project_key: jira_project_key } + + expect(response).to have_gitlab_http_status(:not_found) + end + end + end + context 'when running jira import first time' do context 'get show' do before do allow(JIRA::Resource::Project).to receive(:all).and_return(jira_projects) - expect(project.import_state).to be_nil + expect(project.jira_imports).to be_empty get :show, params: { namespace_id: project.namespace.to_param, project_id: project } end @@ -84,7 +137,7 @@ describe Projects::Import::JiraController do end end - context 'when everything is ok' do + context 'when projects retrieved from Jira' do let(:jira_projects) { [double(name: 'FOO project', key: 'FOO')] } it 'renders show template' do @@ -107,14 +160,14 @@ describe Projects::Import::JiraController do it 'creates import state' do expect(project.latest_jira_import).to be_nil - post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' } + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: jira_project_key } project.reload jira_import = project.latest_jira_import expect(project.import_type).to eq 'jira' expect(jira_import.status).to eq 'scheduled' - expect(jira_import.jira_project_key).to eq 'Test' + expect(jira_import.jira_project_key).to eq jira_project_key expect(response).to redirect_to(project_import_jira_path(project)) end end @@ -145,7 +198,7 @@ describe Projects::Import::JiraController do end context 'when jira import ran before' do - let_it_be(:jira_import_state) { create(:jira_import_state, :finished, project: project, jira_project_key: 'Test') } + let_it_be(:jira_import_state) { create(:jira_import_state, :finished, project: project, jira_project_key: jira_project_key) } context 'get show' do it 'renders import status' do @@ -164,7 +217,7 @@ describe Projects::Import::JiraController do project.reload expect(project.latest_jira_import.status).to eq 'scheduled' expect(project.jira_imports.size).to eq 2 - expect(project.jira_imports.first.jira_project_key).to eq 'Test' + expect(project.jira_imports.first.jira_project_key).to eq jira_project_key expect(project.jira_imports.last.jira_project_key).to eq 'New Project' expect(response).to redirect_to(project_import_jira_path(project)) end diff --git a/spec/frontend/monitoring/components/__snapshots__/dashboard_template_spec.js.snap b/spec/frontend/monitoring/components/__snapshots__/dashboard_template_spec.js.snap index 88710b23bc9..d968b042ff1 100644 --- a/spec/frontend/monitoring/components/__snapshots__/dashboard_template_spec.js.snap +++ b/spec/frontend/monitoring/components/__snapshots__/dashboard_template_spec.js.snap @@ -92,7 +92,7 @@ exports[`Dashboard template matches the default snapshot 1`] = ` > <gl-deprecated-button-stub size="md" - title="Reload this page" + title="Refresh dashboard" variant="default" > <icon-stub diff --git a/spec/frontend/monitoring/store/actions_spec.js b/spec/frontend/monitoring/store/actions_spec.js index b37c10791bf..d6faec29b65 100644 --- a/spec/frontend/monitoring/store/actions_spec.js +++ b/spec/frontend/monitoring/store/actions_spec.js @@ -15,7 +15,7 @@ import { receiveMetricsDashboardSuccess, fetchDeploymentsData, fetchEnvironmentsData, - fetchPrometheusMetrics, + fetchDashboardData, fetchPrometheusMetric, setInitialState, filterEnvironments, @@ -375,7 +375,7 @@ describe('Monitoring store actions', () => { metricsDashboardResponse.dashboard, ); - expect(dispatch).toHaveBeenCalledWith('fetchPrometheusMetrics'); + expect(dispatch).toHaveBeenCalledWith('fetchDashboardData'); }); it('sets the dashboards loaded from the repository', () => { const params = {}; @@ -395,7 +395,7 @@ describe('Monitoring store actions', () => { expect(commit).toHaveBeenCalledWith(types.SET_ALL_DASHBOARDS, dashboardGitResponse); }); }); - describe('fetchPrometheusMetrics', () => { + describe('fetchDashboardData', () => { let commit; let dispatch; let state; @@ -413,7 +413,7 @@ describe('Monitoring store actions', () => { const getters = { metricsWithData: () => [], }; - fetchPrometheusMetrics({ state, commit, dispatch, getters }) + fetchDashboardData({ state, commit, dispatch, getters }) .then(() => { expect(Tracking.event).toHaveBeenCalledWith( document.body.dataset.page, @@ -442,7 +442,7 @@ describe('Monitoring store actions', () => { metricsWithData: () => [metric.id], }; - fetchPrometheusMetrics({ state, commit, dispatch, getters }) + fetchDashboardData({ state, commit, dispatch, getters }) .then(() => { expect(dispatch).toHaveBeenCalledWith('fetchPrometheusMetric', { metric, @@ -478,7 +478,7 @@ describe('Monitoring store actions', () => { dispatch.mockRejectedValueOnce(new Error('Error fetching this metric')); dispatch.mockResolvedValue(); - fetchPrometheusMetrics({ state, commit, dispatch }) + fetchDashboardData({ state, commit, dispatch }) .then(() => { expect(dispatch).toHaveBeenCalledTimes(10); // one per metric plus 1 for deployments expect(dispatch).toHaveBeenCalledWith('fetchDeploymentsData'); diff --git a/spec/frontend/monitoring/store/mutations_spec.js b/spec/frontend/monitoring/store/mutations_spec.js index 21a27a443af..34d224e13b0 100644 --- a/spec/frontend/monitoring/store/mutations_spec.js +++ b/spec/frontend/monitoring/store/mutations_spec.js @@ -202,15 +202,12 @@ describe('Monitoring mutations', () => { mutations[types.REQUEST_METRIC_RESULT](stateCopy, { metricId, - result, }); expect(stateCopy.showEmptyState).toBe(true); expect(getMetric()).toEqual( expect.objectContaining({ loading: true, - result: null, - state: metricStates.LOADING, }), ); }); @@ -232,7 +229,7 @@ describe('Monitoring mutations', () => { }); it('adds results to the store', () => { - expect(getMetric().result).toBe(undefined); + expect(getMetric().result).toBe(null); mutations[types.RECEIVE_METRIC_RESULT_SUCCESS](stateCopy, { metricId, diff --git a/spec/frontend/monitoring/store/utils_spec.js b/spec/frontend/monitoring/store/utils_spec.js index fcc5614850b..f46409e8e32 100644 --- a/spec/frontend/monitoring/store/utils_spec.js +++ b/spec/frontend/monitoring/store/utils_spec.js @@ -5,6 +5,7 @@ import { removeLeadingSlash, mapToDashboardViewModel, } from '~/monitoring/stores/utils'; +import { NOT_IN_DB_PREFIX } from '~/monitoring/constants'; const projectPath = 'gitlab-org/gitlab-test'; @@ -256,6 +257,9 @@ describe('mapToDashboardViewModel', () => { expect(getMappedMetric(dashboard)).toEqual({ label: expect.any(String), metricId: expect.any(String), + loading: false, + result: null, + state: null, }); }); @@ -307,7 +311,7 @@ describe('mapToDashboardViewModel', () => { describe('uniqMetricsId', () => { [ - { input: { id: 1 }, expected: 'NO_DB_1' }, + { input: { id: 1 }, expected: `${NOT_IN_DB_PREFIX}_1` }, { input: { metric_id: 2 }, expected: '2_undefined' }, { input: { metric_id: 2, id: 21 }, expected: '2_21' }, { input: { metric_id: 22, id: 1 }, expected: '22_1' }, diff --git a/spec/frontend/vue_shared/components/form/__snapshots__/form_footer_actions_spec.js.snap b/spec/frontend/vue_shared/components/form/__snapshots__/form_footer_actions_spec.js.snap new file mode 100644 index 00000000000..2189d6ac3cc --- /dev/null +++ b/spec/frontend/vue_shared/components/form/__snapshots__/form_footer_actions_spec.js.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Form Footer Actions renders content properly 1`] = ` +<footer + class="form-actions d-flex justify-content-between" +> + <div> + Bar + </div> + + <div> + Foo + </div> + + <div> + Abrakadabra + </div> +</footer> +`; diff --git a/spec/frontend/vue_shared/components/form/form_footer_actions_spec.js b/spec/frontend/vue_shared/components/form/form_footer_actions_spec.js new file mode 100644 index 00000000000..30e16bd12da --- /dev/null +++ b/spec/frontend/vue_shared/components/form/form_footer_actions_spec.js @@ -0,0 +1,29 @@ +import FormFooterActions from '~/vue_shared/components/form/form_footer_actions.vue'; +import { shallowMount } from '@vue/test-utils'; + +describe('Form Footer Actions', () => { + let wrapper; + + function createComponent(slots = {}) { + wrapper = shallowMount(FormFooterActions, { + slots, + }); + } + + afterEach(() => { + wrapper.destroy(); + }); + + it('renders content properly', () => { + const defaultSlot = 'Foo'; + const prepend = 'Bar'; + const append = 'Abrakadabra'; + createComponent({ + default: defaultSlot, + prepend, + append, + }); + + expect(wrapper.element).toMatchSnapshot(); + }); +}); diff --git a/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb b/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb index 4d060d213ed..47889126531 100644 --- a/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb +++ b/spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb @@ -18,22 +18,20 @@ describe Resolvers::Projects::JiraImportsResolver do it_behaves_like 'no jira import access' end - - context 'when user developer' do - before do - project.add_developer(user) - end - - it_behaves_like 'no jira import access' - end end context 'when user can read Jira import data' do before do - project.add_maintainer(user) + project.add_guest(user) end it_behaves_like 'no jira import data present' + + it 'does not raise access error' do + expect do + resolve_imports + end.not_to raise_error + end end end @@ -58,19 +56,11 @@ describe Resolvers::Projects::JiraImportsResolver do it_behaves_like 'no jira import access' end - - context 'when user developer' do - before do - project.add_developer(user) - end - - it_behaves_like 'no jira import access' - end end context 'when user can access Jira imports' do before do - project.add_maintainer(user) + project.add_guest(user) end it 'returns Jira imports sorted ascending by created_at time' do diff --git a/spec/requests/api/graphql/mutations/jira_import/start_spec.rb b/spec/requests/api/graphql/mutations/jira_import/start_spec.rb index 7e213d3adb0..feca89558e3 100644 --- a/spec/requests/api/graphql/mutations/jira_import/start_spec.rb +++ b/spec/requests/api/graphql/mutations/jira_import/start_spec.rb @@ -99,6 +99,12 @@ describe 'Starting a Jira Import' do it_behaves_like 'a mutation that returns errors in the response', errors: ['Jira integration not configured.'] end + context 'when issues feature are disabled' do + let_it_be(:project, reload: true) { create(:project, :issues_disabled) } + + it_behaves_like 'a mutation that returns errors in the response', errors: ['Cannot import because issues are not available in this project.'] + end + context 'when when project has Jira service' do let!(:service) { create(:jira_service, project: project) } diff --git a/spec/services/jira_import/start_import_service_spec.rb b/spec/services/jira_import/start_import_service_spec.rb index 8d9ba5ac692..785f8b6d792 100644 --- a/spec/services/jira_import/start_import_service_spec.rb +++ b/spec/services/jira_import/start_import_service_spec.rb @@ -38,6 +38,12 @@ describe JiraImport::StartImportService do it_behaves_like 'responds with error', 'Jira integration not configured.' end + context 'when issues feature are disabled' do + let_it_be(:project, reload: true) { create(:project, :issues_disabled) } + + it_behaves_like 'responds with error', 'Cannot import because issues are not available in this project.' + end + context 'when Jira service exists' do let!(:jira_service) { create(:jira_service, project: project, active: true) } |