Commit 712bf446 authored by Jan Provaznik's avatar Jan Provaznik

Merge branch 'pl-spec-requests-api-todos' into 'master'

Speed up todo API specs

See merge request gitlab-org/gitlab!28283
parents 928dcc19 fec618c9
...@@ -3,23 +3,23 @@ ...@@ -3,23 +3,23 @@
require 'spec_helper' require 'spec_helper'
describe API::Todos do describe API::Todos do
let(:group) { create(:group) } let_it_be(:group) { create(:group) }
let(:project_1) { create(:project, :repository, group: group) } let_it_be(:project_1) { create(:project, :repository, group: group) }
let(:project_2) { create(:project) } let_it_be(:project_2) { create(:project) }
let(:author_1) { create(:user) } let_it_be(:author_1) { create(:user) }
let(:author_2) { create(:user) } let_it_be(:author_2) { create(:user) }
let(:john_doe) { create(:user, username: 'john_doe') } let_it_be(:john_doe) { create(:user, username: 'john_doe') }
let(:merge_request) { create(:merge_request, source_project: project_1) } let_it_be(:merge_request) { create(:merge_request, source_project: project_1) }
let!(:merge_request_todo) { create(:todo, project: project_1, author: author_2, user: john_doe, target: merge_request) } let_it_be(:merge_request_todo) { create(:todo, project: project_1, author: author_2, user: john_doe, target: merge_request) }
let!(:pending_1) { create(:todo, :mentioned, project: project_1, author: author_1, user: john_doe) } let_it_be(:pending_1) { create(:todo, :mentioned, project: project_1, author: author_1, user: john_doe) }
let!(:pending_2) { create(:todo, project: project_2, author: author_2, user: john_doe) } let_it_be(:pending_2) { create(:todo, project: project_2, author: author_2, user: john_doe) }
let!(:pending_3) { create(:on_commit_todo, project: project_1, author: author_2, user: john_doe) } let_it_be(:pending_3) { create(:on_commit_todo, project: project_1, author: author_2, user: john_doe) }
let!(:done) { create(:todo, :done, project: project_1, author: author_1, user: john_doe) } let_it_be(:done) { create(:todo, :done, project: project_1, author: author_1, user: john_doe) }
let!(:award_emoji_1) { create(:award_emoji, awardable: merge_request, user: author_1, name: 'thumbsup') } let_it_be(:award_emoji_1) { create(:award_emoji, awardable: merge_request, user: author_1, name: 'thumbsup') }
let!(:award_emoji_2) { create(:award_emoji, awardable: pending_1.target, user: author_1, name: 'thumbsup') } let_it_be(:award_emoji_2) { create(:award_emoji, awardable: pending_1.target, user: author_1, name: 'thumbsup') }
let!(:award_emoji_3) { create(:award_emoji, awardable: pending_2.target, user: author_2, name: 'thumbsdown') } let_it_be(:award_emoji_3) { create(:award_emoji, awardable: pending_2.target, user: author_2, name: 'thumbsdown') }
before do before_all do
project_1.add_developer(john_doe) project_1.add_developer(john_doe)
project_2.add_developer(john_doe) project_2.add_developer(john_doe)
end end
...@@ -29,7 +29,7 @@ describe API::Todos do ...@@ -29,7 +29,7 @@ describe API::Todos do
it 'returns authentication error' do it 'returns authentication error' do
get api('/todos') get api('/todos')
expect(response.status).to eq(401) expect(response).to have_gitlab_http_status(:unauthorized)
end end
end end
...@@ -37,7 +37,7 @@ describe API::Todos do ...@@ -37,7 +37,7 @@ describe API::Todos do
it 'returns an array of pending todos for current user' do it 'returns an array of pending todos for current user' do
get api('/todos', john_doe) get api('/todos', john_doe)
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(4) expect(json_response.length).to eq(4)
...@@ -74,7 +74,7 @@ describe API::Todos do ...@@ -74,7 +74,7 @@ describe API::Todos do
it 'filters based on author_id param' do it 'filters based on author_id param' do
get api('/todos', john_doe), params: { author_id: author_2.id } get api('/todos', john_doe), params: { author_id: author_2.id }
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(3) expect(json_response.length).to eq(3)
...@@ -87,7 +87,7 @@ describe API::Todos do ...@@ -87,7 +87,7 @@ describe API::Todos do
get api('/todos', john_doe), params: { type: 'MergeRequest' } get api('/todos', john_doe), params: { type: 'MergeRequest' }
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(2) expect(json_response.length).to eq(2)
...@@ -98,7 +98,7 @@ describe API::Todos do ...@@ -98,7 +98,7 @@ describe API::Todos do
it 'filters based on state param' do it 'filters based on state param' do
get api('/todos', john_doe), params: { state: 'done' } get api('/todos', john_doe), params: { state: 'done' }
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(1) expect(json_response.length).to eq(1)
...@@ -109,7 +109,7 @@ describe API::Todos do ...@@ -109,7 +109,7 @@ describe API::Todos do
it 'filters based on project_id param' do it 'filters based on project_id param' do
get api('/todos', john_doe), params: { project_id: project_2.id } get api('/todos', john_doe), params: { project_id: project_2.id }
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(1) expect(json_response.length).to eq(1)
...@@ -120,7 +120,7 @@ describe API::Todos do ...@@ -120,7 +120,7 @@ describe API::Todos do
it 'filters based on project_id param' do it 'filters based on project_id param' do
get api('/todos', john_doe), params: { group_id: group.id, sort: :target_id } get api('/todos', john_doe), params: { group_id: group.id, sort: :target_id }
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(3) expect(json_response.length).to eq(3)
...@@ -131,7 +131,7 @@ describe API::Todos do ...@@ -131,7 +131,7 @@ describe API::Todos do
it 'filters based on action param' do it 'filters based on action param' do
get api('/todos', john_doe), params: { action: 'mentioned' } get api('/todos', john_doe), params: { action: 'mentioned' }
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(1) expect(json_response.length).to eq(1)
...@@ -157,7 +157,7 @@ describe API::Todos do ...@@ -157,7 +157,7 @@ describe API::Todos do
create(:on_commit_todo, project: project_3, author: author_1, user: john_doe) create(:on_commit_todo, project: project_3, author: author_1, user: john_doe)
expect { get api('/todos', john_doe) }.not_to exceed_query_limit(control) expect { get api('/todos', john_doe) }.not_to exceed_query_limit(control)
expect(response.status).to eq(200) expect(response).to have_gitlab_http_status(:ok)
end end
end end
...@@ -189,7 +189,7 @@ describe API::Todos do ...@@ -189,7 +189,7 @@ describe API::Todos do
it 'returns 404 if the todo does not belong to the current user' do it 'returns 404 if the todo does not belong to the current user' do
post api("/todos/#{pending_1.id}/mark_as_done", author_1) post api("/todos/#{pending_1.id}/mark_as_done", author_1)
expect(response.status).to eq(404) expect(response).to have_gitlab_http_status(:not_found)
end end
end end
end end
...@@ -225,7 +225,7 @@ describe API::Todos do ...@@ -225,7 +225,7 @@ describe API::Todos do
it 'creates a todo on an issuable' do it 'creates a todo on an issuable' do
post api("/projects/#{project_1.id}/#{issuable_type}/#{issuable.iid}/todo", john_doe) post api("/projects/#{project_1.id}/#{issuable_type}/#{issuable.iid}/todo", john_doe)
expect(response.status).to eq(201) expect(response).to have_gitlab_http_status(:created)
expect(json_response['project']).to be_a Hash expect(json_response['project']).to be_a Hash
expect(json_response['author']).to be_a Hash expect(json_response['author']).to be_a Hash
expect(json_response['target_type']).to eq(issuable.class.name) expect(json_response['target_type']).to eq(issuable.class.name)
...@@ -242,13 +242,15 @@ describe API::Todos do ...@@ -242,13 +242,15 @@ describe API::Todos do
post api("/projects/#{project_1.id}/#{issuable_type}/#{issuable.iid}/todo", john_doe) post api("/projects/#{project_1.id}/#{issuable_type}/#{issuable.iid}/todo", john_doe)
expect(response.status).to eq(304) expect(response).to have_gitlab_http_status(:not_modified)
end end
it 'returns 404 if the issuable is not found' do it 'returns 404 if the issuable is not found' do
post api("/projects/#{project_1.id}/#{issuable_type}/123/todo", john_doe) unknown_id = 0
post api("/projects/#{project_1.id}/#{issuable_type}/#{unknown_id}/todo", john_doe)
expect(response.status).to eq(404) expect(response).to have_gitlab_http_status(:not_found)
end end
it 'returns an error if the issuable is not accessible' do it 'returns an error if the issuable is not accessible' do
...@@ -268,13 +270,17 @@ describe API::Todos do ...@@ -268,13 +270,17 @@ describe API::Todos do
describe 'POST :id/issuable_type/:issueable_id/todo' do describe 'POST :id/issuable_type/:issueable_id/todo' do
context 'for an issue' do context 'for an issue' do
it_behaves_like 'an issuable', 'issues' do it_behaves_like 'an issuable', 'issues' do
let(:issuable) { create(:issue, :confidential, author: author_1, project: project_1) } let_it_be(:issuable) do
create(:issue, :confidential, author: author_1, project: project_1)
end
end end
end end
context 'for a merge request' do context 'for a merge request' do
it_behaves_like 'an issuable', 'merge_requests' do it_behaves_like 'an issuable', 'merge_requests' do
let(:issuable) { create(:merge_request, :simple, source_project: project_1) } let_it_be(:issuable) do
create(:merge_request, :simple, source_project: project_1)
end
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment