summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-04-14 12:09:26 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-04-14 12:09:26 +0000
commit2e4c4055181eec9186458dd5dd3219c937032ec7 (patch)
treeeee59e7124ffcf093f1b53369436c69cfe4d9cc5 /spec
parent97f0ae7454597105a27df65ffb772949d9d4f3cb (diff)
downloadgitlab-ce-2e4c4055181eec9186458dd5dd3219c937032ec7.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/projects/import/jira_controller_spec.rb69
-rw-r--r--spec/frontend/monitoring/components/__snapshots__/dashboard_template_spec.js.snap2
-rw-r--r--spec/frontend/monitoring/store/actions_spec.js12
-rw-r--r--spec/frontend/monitoring/store/mutations_spec.js5
-rw-r--r--spec/frontend/monitoring/store/utils_spec.js6
-rw-r--r--spec/frontend/vue_shared/components/form/__snapshots__/form_footer_actions_spec.js.snap19
-rw-r--r--spec/frontend/vue_shared/components/form/form_footer_actions_spec.js29
-rw-r--r--spec/graphql/resolvers/projects/jira_imports_resolver_spec.rb26
-rw-r--r--spec/requests/api/graphql/mutations/jira_import/start_spec.rb6
-rw-r--r--spec/services/jira_import/start_import_service_spec.rb6
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) }