diff options
author | Sean McGivern <sean@gitlab.com> | 2016-08-17 16:55:28 +0100 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2016-08-17 16:55:28 +0100 |
commit | e6f3461c0bb1cc5bb5501f1e451fff97268d87d6 (patch) | |
tree | e8bc4946c3b3354aac11814a7e12408eec1fd52d /spec/controllers | |
parent | 2257fda38e37f5aa59a9ef83c6c6cff36bbcb182 (diff) | |
parent | fa576d38bb23e0f2804e3feba959e0c6191dbbb0 (diff) | |
download | gitlab-ce-e6f3461c0bb1cc5bb5501f1e451fff97268d87d6.tar.gz |
Merge remote-tracking branch 'origin/master' into mc-ui
Diffstat (limited to 'spec/controllers')
-rw-r--r-- | spec/controllers/admin/spam_logs_controller_spec.rb | 12 | ||||
-rw-r--r-- | spec/controllers/autocomplete_controller_spec.rb | 292 | ||||
-rw-r--r-- | spec/controllers/projects/issues_controller_spec.rb | 50 | ||||
-rw-r--r-- | spec/controllers/projects/templates_controller_spec.rb | 48 |
4 files changed, 296 insertions, 106 deletions
diff --git a/spec/controllers/admin/spam_logs_controller_spec.rb b/spec/controllers/admin/spam_logs_controller_spec.rb index 520a4f6f9c5..585ca31389d 100644 --- a/spec/controllers/admin/spam_logs_controller_spec.rb +++ b/spec/controllers/admin/spam_logs_controller_spec.rb @@ -34,4 +34,16 @@ describe Admin::SpamLogsController do expect { User.find(user.id) }.to raise_error(ActiveRecord::RecordNotFound) end end + + describe '#mark_as_ham' do + before do + allow_any_instance_of(AkismetService).to receive(:submit_ham).and_return(true) + end + it 'submits the log as ham' do + post :mark_as_ham, id: first_spam.id + + expect(response).to have_http_status(302) + expect(SpamLog.find(first_spam.id).submitted_as_ham).to be_truthy + end + end end diff --git a/spec/controllers/autocomplete_controller_spec.rb b/spec/controllers/autocomplete_controller_spec.rb index ed0b7f9e240..44128a43362 100644 --- a/spec/controllers/autocomplete_controller_spec.rb +++ b/spec/controllers/autocomplete_controller_spec.rb @@ -2,178 +2,262 @@ require 'spec_helper' describe AutocompleteController do let!(:project) { create(:project) } - let!(:user) { create(:user) } - let!(:user2) { create(:user) } - let!(:non_member) { create(:user) } + let!(:user) { create(:user) } - context 'project members' do - before do - sign_in(user) - project.team << [user, :master] - end + context 'users and members' do + let!(:user2) { create(:user) } + let!(:non_member) { create(:user) } - describe 'GET #users with project ID' do + context 'project members' do before do - get(:users, project_id: project.id) + sign_in(user) + project.team << [user, :master] end - let(:body) { JSON.parse(response.body) } + describe 'GET #users with project ID' do + before do + get(:users, project_id: project.id) + end - it { expect(body).to be_kind_of(Array) } - it { expect(body.size).to eq 1 } - it { expect(body.map { |u| u["username"] }).to include(user.username) } - end + let(:body) { JSON.parse(response.body) } - describe 'GET #users with unknown project' do - before do - get(:users, project_id: 'unknown') + it { expect(body).to be_kind_of(Array) } + it { expect(body.size).to eq 1 } + it { expect(body.map { |u| u["username"] }).to include(user.username) } end - it { expect(response).to have_http_status(404) } - end - end - - context 'group members' do - let(:group) { create(:group) } + describe 'GET #users with unknown project' do + before do + get(:users, project_id: 'unknown') + end - before do - sign_in(user) - group.add_owner(user) + it { expect(response).to have_http_status(404) } + end end - let(:body) { JSON.parse(response.body) } + context 'group members' do + let(:group) { create(:group) } - describe 'GET #users with group ID' do before do - get(:users, group_id: group.id) + sign_in(user) + group.add_owner(user) end - it { expect(body).to be_kind_of(Array) } - it { expect(body.size).to eq 1 } - it { expect(body.first["username"]).to eq user.username } + let(:body) { JSON.parse(response.body) } + + describe 'GET #users with group ID' do + before do + get(:users, group_id: group.id) + end + + it { expect(body).to be_kind_of(Array) } + it { expect(body.size).to eq 1 } + it { expect(body.first["username"]).to eq user.username } + end + + describe 'GET #users with unknown group ID' do + before do + get(:users, group_id: 'unknown') + end + + it { expect(response).to have_http_status(404) } + end end - describe 'GET #users with unknown group ID' do + context 'non-member login for public project' do + let!(:project) { create(:project, :public) } + before do - get(:users, group_id: 'unknown') + sign_in(non_member) + project.team << [user, :master] end - it { expect(response).to have_http_status(404) } - end - end + let(:body) { JSON.parse(response.body) } - context 'non-member login for public project' do - let!(:project) { create(:project, :public) } + describe 'GET #users with project ID' do + before do + get(:users, project_id: project.id, current_user: true) + end - before do - sign_in(non_member) - project.team << [user, :master] + it { expect(body).to be_kind_of(Array) } + it { expect(body.size).to eq 2 } + it { expect(body.map { |u| u['username'] }).to match_array([user.username, non_member.username]) } + end end - let(:body) { JSON.parse(response.body) } - - describe 'GET #users with project ID' do + context 'all users' do before do - get(:users, project_id: project.id, current_user: true) + sign_in(user) + get(:users) end + let(:body) { JSON.parse(response.body) } + it { expect(body).to be_kind_of(Array) } - it { expect(body.size).to eq 2 } - it { expect(body.map { |u| u['username'] }).to match_array([user.username, non_member.username]) } + it { expect(body.size).to eq User.count } end - end - context 'all users' do - before do - sign_in(user) - get(:users) - end + context 'unauthenticated user' do + let(:public_project) { create(:project, :public) } + let(:body) { JSON.parse(response.body) } - let(:body) { JSON.parse(response.body) } + describe 'GET #users with public project' do + before do + public_project.team << [user, :guest] + get(:users, project_id: public_project.id) + end - it { expect(body).to be_kind_of(Array) } - it { expect(body.size).to eq User.count } - end + it { expect(body).to be_kind_of(Array) } + it { expect(body.size).to eq 1 } + end - context 'unauthenticated user' do - let(:public_project) { create(:project, :public) } - let(:body) { JSON.parse(response.body) } + describe 'GET #users with project' do + before do + get(:users, project_id: project.id) + end - describe 'GET #users with public project' do - before do - public_project.team << [user, :guest] - get(:users, project_id: public_project.id) + it { expect(response).to have_http_status(404) } end - it { expect(body).to be_kind_of(Array) } - it { expect(body.size).to eq 1 } - end + describe 'GET #users with unknown project' do + before do + get(:users, project_id: 'unknown') + end - describe 'GET #users with project' do - before do - get(:users, project_id: project.id) + it { expect(response).to have_http_status(404) } end - it { expect(response).to have_http_status(404) } - end + describe 'GET #users with inaccessible group' do + before do + project.team << [user, :guest] + get(:users, group_id: user.namespace.id) + end - describe 'GET #users with unknown project' do - before do - get(:users, project_id: 'unknown') + it { expect(response).to have_http_status(404) } end - it { expect(response).to have_http_status(404) } + describe 'GET #users with no project' do + before do + get(:users) + end + + it { expect(body).to be_kind_of(Array) } + it { expect(body.size).to eq 0 } + end end - describe 'GET #users with inaccessible group' do + context 'author of issuable included' do before do - project.team << [user, :guest] - get(:users, group_id: user.namespace.id) + sign_in(user) end - it { expect(response).to have_http_status(404) } - end + let(:body) { JSON.parse(response.body) } - describe 'GET #users with no project' do - before do - get(:users) + it 'includes the author' do + get(:users, author_id: non_member.id) + + expect(body.first["username"]).to eq non_member.username end - it { expect(body).to be_kind_of(Array) } - it { expect(body.size).to eq 0 } + it 'rejects non existent user ids' do + get(:users, author_id: 99999) + + expect(body.collect { |u| u['id'] }).not_to include(99999) + end + end + + context 'skip_users parameter included' do + before { sign_in(user) } + + it 'skips the user IDs passed' do + get(:users, skip_users: [user, user2].map(&:id)) + + other_user_ids = [non_member, project.owner, project.creator].map(&:id) + response_user_ids = JSON.parse(response.body).map { |user| user['id'] } + + expect(response_user_ids).to contain_exactly(*other_user_ids) + end end end - context 'author of issuable included' do + context 'projects' do + let(:authorized_project) { create(:project) } + let(:authorized_search_project) { create(:project, name: 'rugged') } + before do sign_in(user) + project.team << [user, :master] end - let(:body) { JSON.parse(response.body) } + context 'authorized projects' do + before do + authorized_project.team << [user, :master] + end + + describe 'GET #projects with project ID' do + before do + get(:projects, project_id: project.id) + end + + let(:body) { JSON.parse(response.body) } + + it do + expect(body).to be_kind_of(Array) + expect(body.size).to eq 2 - it 'includes the author' do - get(:users, author_id: non_member.id) + expect(body.first['id']).to eq 0 + expect(body.first['name_with_namespace']).to eq 'No project' - expect(body.first["username"]).to eq non_member.username + expect(body.last['id']).to eq authorized_project.id + expect(body.last['name_with_namespace']).to eq authorized_project.name_with_namespace + end + end end - it 'rejects non existent user ids' do - get(:users, author_id: 99999) + context 'authorized projects and search' do + before do + authorized_project.team << [user, :master] + authorized_search_project.team << [user, :master] + end + + describe 'GET #projects with project ID and search' do + before do + get(:projects, project_id: project.id, search: 'rugged') + end + + let(:body) { JSON.parse(response.body) } - expect(body.collect { |u| u['id'] }).not_to include(99999) + it do + expect(body).to be_kind_of(Array) + expect(body.size).to eq 2 + + expect(body.last['id']).to eq authorized_search_project.id + expect(body.last['name_with_namespace']).to eq authorized_search_project.name_with_namespace + end + end end - end - context 'skip_users parameter included' do - before { sign_in(user) } + context 'authorized projects without admin_issue ability' do + before(:each) do + authorized_project.team << [user, :guest] + + expect(user.can?(:admin_issue, authorized_project)).to eq(false) + end - it 'skips the user IDs passed' do - get(:users, skip_users: [user, user2].map(&:id)) + describe 'GET #projects with project ID' do + before do + get(:projects, project_id: project.id) + end - other_user_ids = [non_member, project.owner, project.creator].map(&:id) - response_user_ids = JSON.parse(response.body).map { |user| user['id'] } + let(:body) { JSON.parse(response.body) } - expect(response_user_ids).to contain_exactly(*other_user_ids) + it do + expect(body).to be_kind_of(Array) + expect(body.size).to eq 1 # 'No project' + + expect(body.first['id']).to eq 0 + end + end end end end diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb index b6a0276846c..0836b71056c 100644 --- a/spec/controllers/projects/issues_controller_spec.rb +++ b/spec/controllers/projects/issues_controller_spec.rb @@ -274,8 +274,8 @@ describe Projects::IssuesController do describe 'POST #create' do context 'Akismet is enabled' do before do - allow_any_instance_of(Gitlab::AkismetHelper).to receive(:check_for_spam?).and_return(true) - allow_any_instance_of(Gitlab::AkismetHelper).to receive(:is_spam?).and_return(true) + allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true) + allow_any_instance_of(AkismetService).to receive(:is_spam?).and_return(true) end def post_spam_issue @@ -300,6 +300,52 @@ describe Projects::IssuesController do expect(spam_logs[0].title).to eq('Spam Title') end end + + context 'user agent details are saved' do + before do + request.env['action_dispatch.remote_ip'] = '127.0.0.1' + end + + def post_new_issue + sign_in(user) + project = create(:empty_project, :public) + post :create, { + namespace_id: project.namespace.to_param, + project_id: project.to_param, + issue: { title: 'Title', description: 'Description' } + } + end + + it 'creates a user agent detail' do + expect{ post_new_issue }.to change(UserAgentDetail, :count).by(1) + end + end + end + + describe 'POST #mark_as_spam' do + context 'properly submits to Akismet' do + before do + allow_any_instance_of(AkismetService).to receive_messages(submit_spam: true) + allow_any_instance_of(ApplicationSetting).to receive_messages(akismet_enabled: true) + end + + def post_spam + admin = create(:admin) + create(:user_agent_detail, subject: issue) + project.team << [admin, :master] + sign_in(admin) + post :mark_as_spam, { + namespace_id: project.namespace.path, + project_id: project.path, + id: issue.iid + } + end + + it 'updates issue' do + post_spam + expect(issue.submittable_as_spam?).to be_falsey + end + end end describe "DELETE #destroy" do diff --git a/spec/controllers/projects/templates_controller_spec.rb b/spec/controllers/projects/templates_controller_spec.rb new file mode 100644 index 00000000000..7b3a26d7ca7 --- /dev/null +++ b/spec/controllers/projects/templates_controller_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe Projects::TemplatesController do + let(:project) { create(:project) } + let(:user) { create(:user) } + let(:user2) { create(:user) } + let(:file_path_1) { '.gitlab/issue_templates/bug.md' } + let(:body) { JSON.parse(response.body) } + + before do + project.team << [user, :developer] + sign_in(user) + end + + before do + project.team.add_user(user, Gitlab::Access::MASTER) + project.repository.commit_file(user, file_path_1, "something valid", "test 3", "master", false) + end + + describe '#show' do + it 'renders template name and content as json' do + get(:show, namespace_id: project.namespace.to_param, template_type: "issue", key: "bug", project_id: project.path, format: :json) + + expect(response.status).to eq(200) + expect(body["name"]).to eq("bug") + expect(body["content"]).to eq("something valid") + end + + it 'renders 404 when unauthorized' do + sign_in(user2) + get(:show, namespace_id: project.namespace.to_param, template_type: "issue", key: "bug", project_id: project.path, format: :json) + + expect(response.status).to eq(404) + end + + it 'renders 404 when template type is not found' do + sign_in(user) + get(:show, namespace_id: project.namespace.to_param, template_type: "dont_exist", key: "bug", project_id: project.path, format: :json) + + expect(response.status).to eq(404) + end + + it 'renders 404 without errors' do + sign_in(user) + expect { get(:show, namespace_id: project.namespace.to_param, template_type: "dont_exist", key: "bug", project_id: project.path, format: :json) }.not_to raise_error + end + end +end |