Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-18 21:08:04 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-18 21:08:04 +0300
commitbbe243060399191abcba33c7ebd611f6ec34c6cd (patch)
tree769ba47355cb903bc9139232d75710232ccb545a /spec
parentccf37fd3eca15cd5f55c1eba3b28d2798808d357 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/projects/error_tracking/projects_controller_spec.rb122
-rw-r--r--spec/controllers/projects/error_tracking_controller_spec.rb107
-rw-r--r--spec/features/dashboard/instance_statistics_spec.rb22
-rw-r--r--spec/finders/environments_finder_spec.rb28
-rw-r--r--spec/finders/events_finder_spec.rb26
-rw-r--r--spec/frontend/error_tracking_settings/store/actions_spec.js8
-rw-r--r--spec/models/environment_spec.rb6
-rw-r--r--spec/models/merge_request_spec.rb16
-rw-r--r--spec/requests/api/events_spec.rb15
9 files changed, 223 insertions, 127 deletions
diff --git a/spec/controllers/projects/error_tracking/projects_controller_spec.rb b/spec/controllers/projects/error_tracking/projects_controller_spec.rb
new file mode 100644
index 00000000000..e55495700c2
--- /dev/null
+++ b/spec/controllers/projects/error_tracking/projects_controller_spec.rb
@@ -0,0 +1,122 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Projects::ErrorTracking::ProjectsController do
+ let_it_be(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+
+ before do
+ sign_in(user)
+ project.add_maintainer(user)
+ end
+
+ describe 'POST #index' do
+ context 'with insufficient permissions' do
+ before do
+ project.add_guest(user)
+ end
+
+ it 'returns 404' do
+ get :index, params: list_projects_params
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'with an anonymous user' do
+ before do
+ sign_out(user)
+ end
+
+ it 'redirects to sign-in page' do
+ get :index, params: list_projects_params
+
+ expect(response).to have_gitlab_http_status(:redirect)
+ end
+ end
+
+ context 'with authorized user' do
+ let(:list_projects_service) { spy(:list_projects_service) }
+ let(:sentry_project) { build(:error_tracking_project) }
+
+ let(:query_params) do
+ list_projects_params.slice(:api_host, :token)
+ end
+
+ before do
+ allow(ErrorTracking::ListProjectsService)
+ .to receive(:new).with(project, user, query_params)
+ .and_return(list_projects_service)
+ end
+
+ context 'service result is successful' do
+ before do
+ expect(list_projects_service).to receive(:execute)
+ .and_return(status: :success, projects: [sentry_project])
+ end
+
+ it 'returns a list of projects' do
+ get :index, params: list_projects_params
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(response).to match_response_schema('error_tracking/list_projects')
+ expect(json_response['projects']).to eq([sentry_project].as_json)
+ end
+ end
+
+ context 'service result is erroneous' do
+ let(:error_message) { 'error message' }
+
+ context 'without http_status' do
+ before do
+ expect(list_projects_service).to receive(:execute)
+ .and_return(status: :error, message: error_message)
+ end
+
+ it 'returns 400 with message' do
+ get :index, params: list_projects_params
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response['message']).to eq(error_message)
+ end
+ end
+
+ context 'with explicit http_status' do
+ let(:http_status) { :no_content }
+
+ before do
+ expect(list_projects_service).to receive(:execute).and_return(
+ status: :error,
+ message: error_message,
+ http_status: http_status
+ )
+ end
+
+ it 'returns http_status with message' do
+ get :index, params: list_projects_params
+
+ expect(response).to have_gitlab_http_status(http_status)
+ expect(json_response['message']).to eq(error_message)
+ end
+ end
+ end
+ end
+
+ private
+
+ def list_projects_params(opts = {})
+ project_params(
+ format: :json,
+ api_host: 'gitlab.com',
+ token: 'token'
+ )
+ end
+ end
+
+ private
+
+ def project_params(opts = {})
+ opts.reverse_merge(namespace_id: project.namespace, project_id: project)
+ end
+end
diff --git a/spec/controllers/projects/error_tracking_controller_spec.rb b/spec/controllers/projects/error_tracking_controller_spec.rb
index e5585d7b52d..b1f7c7178c1 100644
--- a/spec/controllers/projects/error_tracking_controller_spec.rb
+++ b/spec/controllers/projects/error_tracking_controller_spec.rb
@@ -179,113 +179,6 @@ describe Projects::ErrorTrackingController do
end
end
- describe 'POST #list_projects' do
- context 'with insufficient permissions' do
- before do
- project.add_guest(user)
- end
-
- it 'returns 404' do
- post :list_projects, params: list_projects_params
-
- expect(response).to have_gitlab_http_status(:not_found)
- end
- end
-
- context 'with an anonymous user' do
- before do
- sign_out(user)
- end
-
- it 'redirects to sign-in page' do
- post :list_projects, params: list_projects_params
-
- expect(response).to have_gitlab_http_status(:redirect)
- end
- end
-
- context 'with authorized user' do
- let(:list_projects_service) { spy(:list_projects_service) }
- let(:sentry_project) { build(:error_tracking_project) }
-
- let(:permitted_params) do
- ActionController::Parameters.new(
- list_projects_params[:error_tracking_setting]
- ).permit!
- end
-
- before do
- allow(ErrorTracking::ListProjectsService)
- .to receive(:new).with(project, user, permitted_params)
- .and_return(list_projects_service)
- end
-
- context 'service result is successful' do
- before do
- expect(list_projects_service).to receive(:execute)
- .and_return(status: :success, projects: [sentry_project])
- end
-
- it 'returns a list of projects' do
- post :list_projects, params: list_projects_params
-
- expect(response).to have_gitlab_http_status(:ok)
- expect(response).to match_response_schema('error_tracking/list_projects')
- expect(json_response['projects']).to eq([sentry_project].as_json)
- end
- end
-
- context 'service result is erroneous' do
- let(:error_message) { 'error message' }
-
- context 'without http_status' do
- before do
- expect(list_projects_service).to receive(:execute)
- .and_return(status: :error, message: error_message)
- end
-
- it 'returns 400 with message' do
- get :list_projects, params: list_projects_params
-
- expect(response).to have_gitlab_http_status(:bad_request)
- expect(json_response['message']).to eq(error_message)
- end
- end
-
- context 'with explicit http_status' do
- let(:http_status) { :no_content }
-
- before do
- expect(list_projects_service).to receive(:execute).and_return(
- status: :error,
- message: error_message,
- http_status: http_status
- )
- end
-
- it 'returns http_status with message' do
- get :list_projects, params: list_projects_params
-
- expect(response).to have_gitlab_http_status(http_status)
- expect(json_response['message']).to eq(error_message)
- end
- end
- end
- end
-
- private
-
- def list_projects_params(opts = {})
- project_params(
- format: :json,
- error_tracking_setting: {
- api_host: 'gitlab.com',
- token: 'token'
- }
- )
- end
- end
-
describe 'GET #issue_details' do
let_it_be(:issue_id) { 1234 }
diff --git a/spec/features/dashboard/instance_statistics_spec.rb b/spec/features/dashboard/instance_statistics_spec.rb
index 21ee2796bd8..feb568d8ef4 100644
--- a/spec/features/dashboard/instance_statistics_spec.rb
+++ b/spec/features/dashboard/instance_statistics_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-describe 'Showing instance statistics' do
+describe 'Showing analytics' do
before do
sign_in user if user
end
@@ -13,10 +13,10 @@ describe 'Showing instance statistics' do
context 'for unauthenticated users' do
let(:user) { nil }
- it 'does not show the instance statistics link' do
+ it 'does not show the Analytics link' do
subject
- expect(page).not_to have_link('Instance Statistics')
+ expect(page).not_to have_link('Analytics')
end
end
@@ -28,10 +28,10 @@ describe 'Showing instance statistics' do
stub_application_setting(instance_statistics_visibility_private: false)
end
- it 'shows the instance statistics link' do
+ it 'shows the analytics link' do
subject
- expect(page).to have_link('Instance Statistics')
+ expect(page).to have_link('Analytics')
end
end
@@ -40,10 +40,14 @@ describe 'Showing instance statistics' do
stub_application_setting(instance_statistics_visibility_private: true)
end
- it 'shows the instance statistics link' do
+ it 'does not show the analytics link' do
subject
- expect(page).not_to have_link('Instance Statistics')
+ # Skipping this test on EE as there is an EE specifc spec for this functionality
+ # ee/spec/features/dashboards/analytics_spec.rb
+ skip if Gitlab.ee?
+
+ expect(page).not_to have_link('Analytics')
end
end
end
@@ -51,10 +55,10 @@ describe 'Showing instance statistics' do
context 'for admins' do
let(:user) { create(:admin) }
- it 'shows the instance statistics link' do
+ it 'shows the analytics link' do
subject
- expect(page).to have_link('Instance Statistics')
+ expect(page).to have_link('Analytics')
end
end
end
diff --git a/spec/finders/environments_finder_spec.rb b/spec/finders/environments_finder_spec.rb
index 69687eaa99f..7100376478a 100644
--- a/spec/finders/environments_finder_spec.rb
+++ b/spec/finders/environments_finder_spec.rb
@@ -13,17 +13,22 @@ describe EnvironmentsFinder do
end
context 'tagged deployment' do
+ let(:environment_two) { create(:environment, project: project) }
+ # Environments need to include commits, so rewind two commits to fit
+ let(:commit) { project.commit('HEAD~2') }
+
before do
- create(:deployment, :success, environment: environment, ref: 'v1.1.0', tag: true, sha: project.commit.id)
+ create(:deployment, :success, environment: environment, ref: 'v1.0.0', tag: true, sha: project.commit.id)
+ create(:deployment, :success, environment: environment_two, ref: 'v1.1.0', tag: true, sha: project.commit('HEAD~1').id)
end
it 'returns environment when with_tags is set' do
- expect(described_class.new(project, user, ref: 'master', commit: project.commit, with_tags: true).execute)
- .to contain_exactly(environment)
+ expect(described_class.new(project, user, ref: 'master', commit: commit, with_tags: true).execute)
+ .to contain_exactly(environment, environment_two)
end
it 'does not return environment when no with_tags is set' do
- expect(described_class.new(project, user, ref: 'master', commit: project.commit).execute)
+ expect(described_class.new(project, user, ref: 'master', commit: commit).execute)
.to be_empty
end
@@ -31,6 +36,21 @@ describe EnvironmentsFinder do
expect(described_class.new(project, user, ref: 'master', commit: project.commit('feature')).execute)
.to be_empty
end
+
+ it 'returns environment when with_tags is set' do
+ expect(described_class.new(project, user, ref: 'master', commit: commit, with_tags: true).execute)
+ .to contain_exactly(environment, environment_two)
+ end
+
+ # We expect two Gitaly calls: FindCommit, CommitIsAncestor
+ # This tests to ensure we don't call one CommitIsAncestor per environment
+ it 'only calls Gitaly twice when multiple environments are present', :request_store do
+ expect do
+ result = described_class.new(project, user, ref: 'master', commit: commit, with_tags: true, find_latest: true).execute
+
+ expect(result).to contain_exactly(environment_two)
+ end.to change { Gitlab::GitalyClient.get_request_count }.by(2)
+ end
end
context 'branch deployment' do
diff --git a/spec/finders/events_finder_spec.rb b/spec/finders/events_finder_spec.rb
index 848030262cd..5c28b31e8c8 100644
--- a/spec/finders/events_finder_spec.rb
+++ b/spec/finders/events_finder_spec.rb
@@ -5,8 +5,10 @@ require 'spec_helper'
describe EventsFinder do
let(:user) { create(:user) }
let(:other_user) { create(:user) }
+
let(:project1) { create(:project, :private, creator_id: user.id, namespace: user.namespace) }
let(:project2) { create(:project, :private, creator_id: user.id, namespace: user.namespace) }
+
let(:closed_issue) { create(:closed_issue, project: project1, author: user) }
let(:opened_merge_request) { create(:merge_request, source_project: project2, author: user) }
let!(:closed_issue_event) { create(:event, project: project1, author: user, target: closed_issue, action: Event::CLOSED, created_at: Date.new(2016, 12, 30)) }
@@ -15,6 +17,8 @@ describe EventsFinder do
let(:opened_merge_request2) { create(:merge_request, source_project: project2, author: user) }
let!(:closed_issue_event2) { create(:event, project: project1, author: user, target: closed_issue, action: Event::CLOSED, created_at: Date.new(2016, 2, 2)) }
let!(:opened_merge_request_event2) { create(:event, project: project2, author: user, target: opened_merge_request, action: Event::CREATED, created_at: Date.new(2017, 2, 2)) }
+ let(:opened_merge_request3) { create(:merge_request, source_project: project1, author: other_user) }
+ let!(:other_developer_event) { create(:event, project: project1, author: other_user, target: opened_merge_request3, action: Event::CREATED) }
let(:public_project) { create(:project, :public, creator_id: user.id, namespace: user.namespace) }
let(:confidential_issue) { create(:closed_issue, confidential: true, project: public_project, author: user) }
@@ -55,6 +59,28 @@ describe EventsFinder do
end
end
+ context 'dashboard events' do
+ before do
+ project1.add_developer(other_user)
+ end
+
+ context 'scope is `all`' do
+ it 'includes activity of other users' do
+ events = described_class.new(source: user, current_user: user, scope: 'all').execute
+
+ expect(events).to include(other_developer_event)
+ end
+ end
+
+ context 'scope is not `all`' do
+ it 'does not include activity of other users' do
+ events = described_class.new(source: user, current_user: user, scope: '').execute
+
+ expect(events).not_to include(other_developer_event)
+ end
+ end
+ end
+
context 'when targeting a project' do
it 'returns project events between specified dates filtered on action and type' do
events = described_class.new(source: project1, current_user: user, action: 'closed', target_type: 'issue', after: Date.new(2016, 12, 1), before: Date.new(2017, 1, 1)).execute
diff --git a/spec/frontend/error_tracking_settings/store/actions_spec.js b/spec/frontend/error_tracking_settings/store/actions_spec.js
index e12c4e20f58..b076e6ecd31 100644
--- a/spec/frontend/error_tracking_settings/store/actions_spec.js
+++ b/spec/frontend/error_tracking_settings/store/actions_spec.js
@@ -28,7 +28,7 @@ describe('error tracking settings actions', () => {
});
it('should request and transform the project list', done => {
- mock.onPost(TEST_HOST).reply(() => [200, { projects: projectList }]);
+ mock.onGet(TEST_HOST).reply(() => [200, { projects: projectList }]);
testAction(
actions.fetchProjects,
null,
@@ -42,14 +42,14 @@ describe('error tracking settings actions', () => {
},
],
() => {
- expect(mock.history.post.length).toBe(1);
+ expect(mock.history.get.length).toBe(1);
done();
},
);
});
it('should handle a server error', done => {
- mock.onPost(`${TEST_HOST}.json`).reply(() => [400]);
+ mock.onGet(`${TEST_HOST}.json`).reply(() => [400]);
testAction(
actions.fetchProjects,
null,
@@ -62,7 +62,7 @@ describe('error tracking settings actions', () => {
},
],
() => {
- expect(mock.history.post.length).toBe(1);
+ expect(mock.history.get.length).toBe(1);
done();
},
);
diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb
index 0537220fcd2..b82a9e9aa9d 100644
--- a/spec/models/environment_spec.rb
+++ b/spec/models/environment_spec.rb
@@ -36,9 +36,13 @@ describe Environment, :use_clean_rails_memory_store_caching do
let!(:deployment2) { create(:deployment, environment: environment2) }
let!(:deployment3) { create(:deployment, environment: environment1) }
- it 'returns the environments in order of having been last deployed' do
+ it 'returns the environments in ascending order of having been last deployed' do
expect(project.environments.order_by_last_deployed_at.to_a).to eq([environment3, environment2, environment1])
end
+
+ it 'returns the environments in descending order of having been last deployed' do
+ expect(project.environments.order_by_last_deployed_at_desc.to_a).to eq([environment1, environment2, environment3])
+ end
end
describe 'state machine' do
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index bf6fa20dc17..bf90fa53aba 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -2322,6 +2322,10 @@ describe MergeRequest do
let(:project) { create(:project, :repository) }
let(:user) { project.creator }
let(:merge_request) { create(:merge_request, source_project: project) }
+ let(:source_branch) { merge_request.source_branch }
+ let(:target_branch) { merge_request.target_branch }
+ let(:source_oid) { project.commit(source_branch).id }
+ let(:target_oid) { project.commit(target_branch).id }
before do
merge_request.source_project.add_maintainer(user)
@@ -2332,13 +2336,21 @@ describe MergeRequest do
let(:environments) { create_list(:environment, 3, project: project) }
before do
- create(:deployment, :success, environment: environments.first, ref: 'master', sha: project.commit('master').id)
- create(:deployment, :success, environment: environments.second, ref: 'feature', sha: project.commit('feature').id)
+ create(:deployment, :success, environment: environments.first, ref: source_branch, sha: source_oid)
+ create(:deployment, :success, environment: environments.second, ref: target_branch, sha: target_oid)
end
it 'selects deployed environments' do
expect(merge_request.environments_for(user)).to contain_exactly(environments.first)
end
+
+ it 'selects latest deployed environment' do
+ latest_environment = create(:environment, project: project)
+ create(:deployment, :success, environment: latest_environment, ref: source_branch, sha: source_oid)
+
+ expect(merge_request.environments_for(user)).to eq([environments.first, latest_environment])
+ expect(merge_request.environments_for(user, latest: true)).to contain_exactly(latest_environment)
+ end
end
context 'with environments on source project' do
diff --git a/spec/requests/api/events_spec.rb b/spec/requests/api/events_spec.rb
index 9f8d254a00c..240f9a02877 100644
--- a/spec/requests/api/events_spec.rb
+++ b/spec/requests/api/events_spec.rb
@@ -8,6 +8,8 @@ describe API::Events do
let(:private_project) { create(:project, :private, creator_id: user.id, namespace: user.namespace) }
let(:closed_issue) { create(:closed_issue, project: private_project, author: user) }
let!(:closed_issue_event) { create(:event, project: private_project, author: user, target: closed_issue, action: Event::CLOSED, created_at: Date.new(2016, 12, 30)) }
+ let(:closed_issue2) { create(:closed_issue, project: private_project, author: non_member) }
+ let!(:closed_issue_event2) { create(:event, project: private_project, author: non_member, target: closed_issue2, action: Event::CLOSED, created_at: Date.new(2016, 12, 30)) }
describe 'GET /events' do
context 'when unauthenticated' do
@@ -27,6 +29,19 @@ describe API::Events do
expect(json_response).to be_an Array
expect(json_response.size).to eq(1)
end
+
+ context 'when scope is passed' do
+ it 'returns all events across projects' do
+ private_project.add_developer(non_member)
+
+ get api('/events?action=closed&target_type=issue&after=2016-12-1&before=2016-12-31&scope=all', user)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response.size).to eq(2)
+ end
+ end
end
context 'when the requesting token has "read_user" scope' do