summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-13 03:07:50 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-13 03:07:50 +0000
commit38bab6e1581d30c0e9d312474fd796404cc7b484 (patch)
treee4e6b11e2788cae577ecb1efa5195f9bc77b83f2 /spec
parent47b8f79a0896f406008d5a7eda2781f8da301e91 (diff)
downloadgitlab-ce-38bab6e1581d30c0e9d312474fd796404cc7b484.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb18
-rw-r--r--spec/frontend/error_tracking/components/error_details_spec.js9
-rw-r--r--spec/lib/api/projects_batch_counting_spec.rb72
-rw-r--r--spec/models/sentry_issue_spec.rb1
-rw-r--r--spec/requests/api/projects_spec.rb110
5 files changed, 27 insertions, 183 deletions
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index 51d5a0d2144..e4e2487f1e1 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -1073,6 +1073,24 @@ describe Projects::IssuesController do
expect(issue.time_estimate).to eq(7200)
end
end
+
+ context 'when created from sentry error' do
+ subject { post_new_issue(sentry_issue_attributes: { sentry_issue_identifier: 1234567 }) }
+
+ it 'creates an issue' do
+ expect { subject }.to change(Issue, :count)
+ end
+
+ it 'creates a sentry issue' do
+ expect { subject }.to change(SentryIssue, :count)
+ end
+
+ it 'with existing issue it will not create an issue' do
+ post_new_issue(sentry_issue_attributes: { sentry_issue_identifier: 1234567 })
+
+ expect { subject }.not_to change(Issue, :count)
+ end
+ end
end
describe 'POST #mark_as_spam' do
diff --git a/spec/frontend/error_tracking/components/error_details_spec.js b/spec/frontend/error_tracking/components/error_details_spec.js
index 632ed373545..6dc4980aaec 100644
--- a/spec/frontend/error_tracking/components/error_details_spec.js
+++ b/spec/frontend/error_tracking/components/error_details_spec.js
@@ -110,7 +110,7 @@ describe('ErrorDetails', () => {
beforeEach(() => {
store.state.details.loading = false;
store.state.details.error = {
- id: 1,
+ id: 129381,
title: 'Issue title',
external_url: 'http://sentry.gitlab.net/gitlab',
first_seen: '2017-05-26T13:32:48Z',
@@ -121,6 +121,13 @@ describe('ErrorDetails', () => {
mountComponent();
});
+ it('should send sentry_issue_identifier', () => {
+ const sentryErrorIdInput = wrapper.find(
+ 'glforminput-stub[name="issue[sentry_issue_attributes][sentry_issue_identifier]"',
+ );
+ expect(sentryErrorIdInput.attributes('value')).toBe('129381');
+ });
+
it('should set the form values with title and description', () => {
const csrfTokenInput = wrapper.find('glforminput-stub[name="authenticity_token"]');
const issueTitleInput = wrapper.find('glforminput-stub[name="issue[title]"]');
diff --git a/spec/lib/api/projects_batch_counting_spec.rb b/spec/lib/api/projects_batch_counting_spec.rb
deleted file mode 100644
index 6094952bb52..00000000000
--- a/spec/lib/api/projects_batch_counting_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe API::ProjectsBatchCounting do
- subject do
- Class.new do
- include ::API::ProjectsBatchCounting
- end
- end
-
- describe '.preload_and_batch_count!' do
- let(:projects) { double }
- let(:preloaded_projects) { double }
-
- it 'preloads the relation' do
- allow(subject).to receive(:execute_batch_counting).with(preloaded_projects)
-
- expect(subject).to receive(:preload_relation).with(projects).and_return(preloaded_projects)
-
- expect(subject.preload_and_batch_count!(projects)).to eq(preloaded_projects)
- end
-
- it 'executes batch counting' do
- allow(subject).to receive(:preload_relation).with(projects).and_return(preloaded_projects)
-
- expect(subject).to receive(:execute_batch_counting).with(preloaded_projects)
-
- subject.preload_and_batch_count!(projects)
- end
- end
-
- describe '.execute_batch_counting' do
- let(:projects) { create_list(:project, 2) }
- let(:count_service) { double }
-
- it 'counts forks' do
- allow(::Projects::BatchForksCountService).to receive(:new).with(projects).and_return(count_service)
-
- expect(count_service).to receive(:refresh_cache)
-
- subject.execute_batch_counting(projects)
- end
-
- it 'counts open issues' do
- allow(::Projects::BatchOpenIssuesCountService).to receive(:new).with(projects).and_return(count_service)
-
- expect(count_service).to receive(:refresh_cache)
-
- subject.execute_batch_counting(projects)
- end
-
- context 'custom fork counting' do
- subject do
- Class.new do
- include ::API::ProjectsBatchCounting
- def self.forks_counting_projects(projects)
- [projects.first]
- end
- end
- end
-
- it 'counts forks for other projects' do
- allow(::Projects::BatchForksCountService).to receive(:new).with([projects.first]).and_return(count_service)
-
- expect(count_service).to receive(:refresh_cache)
-
- subject.execute_batch_counting(projects)
- end
- end
- end
-end
diff --git a/spec/models/sentry_issue_spec.rb b/spec/models/sentry_issue_spec.rb
index b3f7d2628db..48f9adf64af 100644
--- a/spec/models/sentry_issue_spec.rb
+++ b/spec/models/sentry_issue_spec.rb
@@ -13,5 +13,6 @@ describe SentryIssue do
it { is_expected.to validate_presence_of(:issue) }
it { is_expected.to validate_uniqueness_of(:issue) }
it { is_expected.to validate_presence_of(:sentry_issue_identifier) }
+ it { is_expected.to validate_uniqueness_of(:sentry_issue_identifier).with_message("has already been taken") }
end
end
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 5161de6de5e..cda2dd7d2f4 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -155,35 +155,6 @@ describe API::Projects do
project4
end
- # This is a regression spec for https://gitlab.com/gitlab-org/gitlab/issues/37919
- context 'batch counting forks and open issues and refreshing count caches' do
- # We expect to count these projects (only the ones on the first page, not all matching ones)
- let(:projects) { Project.public_to_user(nil).order(id: :desc).first(per_page) }
- let(:per_page) { 2 }
- let(:count_service) { double }
-
- before do
- # Create more projects, so we have more than one page
- create_list(:project, 5, :public)
- end
-
- it 'batch counts project forks' do
- expect(::Projects::BatchForksCountService).to receive(:new).with(projects).and_return(count_service)
- expect(count_service).to receive(:refresh_cache)
-
- get api("/projects?per_page=#{per_page}")
- expect(response.status).to eq 200
- end
-
- it 'batch counts open issues' do
- expect(::Projects::BatchOpenIssuesCountService).to receive(:new).with(projects).and_return(count_service)
- expect(count_service).to receive(:refresh_cache)
-
- get api("/projects?per_page=#{per_page}")
- expect(response.status).to eq 200
- end
- end
-
context 'when unauthenticated' do
it_behaves_like 'projects response' do
let(:filter) { { search: project.name } }
@@ -599,87 +570,6 @@ describe API::Projects do
let(:projects) { Project.all }
end
end
-
- context 'with keyset pagination' do
- let(:current_user) { user }
- let(:projects) { [public_project, project, project2, project3] }
-
- context 'headers and records' do
- let(:params) { { pagination: 'keyset', order_by: :id, sort: :asc, per_page: 1 } }
-
- it 'includes a pagination header with link to the next page' do
- get api('/projects', current_user), params: params
-
- expect(response.header).to include('Links')
- expect(response.header['Links']).to include('pagination=keyset')
- expect(response.header['Links']).to include("id_after=#{public_project.id}")
- end
-
- it 'contains only the first project with per_page = 1' do
- get api('/projects', current_user), params: params
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response).to be_an Array
- expect(json_response.map { |p| p['id'] }).to contain_exactly(public_project.id)
- end
-
- it 'does not include a link if the end has reached and there is no more data' do
- get api('/projects', current_user), params: params.merge(id_after: project2.id)
-
- expect(response.header).not_to include('Links')
- end
-
- it 'responds with 501 if order_by is different from id' do
- get api('/projects', current_user), params: params.merge(order_by: :created_at)
-
- expect(response).to have_gitlab_http_status(405)
- end
- end
-
- context 'with descending sorting' do
- let(:params) { { pagination: 'keyset', order_by: :id, sort: :desc, per_page: 1 } }
-
- it 'includes a pagination header with link to the next page' do
- get api('/projects', current_user), params: params
-
- expect(response.header).to include('Links')
- expect(response.header['Links']).to include('pagination=keyset')
- expect(response.header['Links']).to include("id_before=#{project3.id}")
- end
-
- it 'contains only the last project with per_page = 1' do
- get api('/projects', current_user), params: params
-
- expect(response).to have_gitlab_http_status(200)
- expect(json_response).to be_an Array
- expect(json_response.map { |p| p['id'] }).to contain_exactly(project3.id)
- end
- end
-
- context 'retrieving the full relation' do
- let(:params) { { pagination: 'keyset', order_by: :id, sort: :desc, per_page: 2 } }
-
- it 'returns all projects' do
- url = '/projects'
- requests = 0
- ids = []
-
- while url && requests <= 5 # circuit breaker
- requests += 1
- get api(url, current_user), params: params
-
- links = response.header['Links']
- url = links&.match(/<[^>]+(\/projects\?[^>]+)>; rel="next"/) do |match|
- match[1]
- end
-
- ids += JSON.parse(response.body).map { |p| p['id'] }
- end
-
- expect(ids).to contain_exactly(*projects.map(&:id))
- end
- end
- end
end
describe 'POST /projects' do