summaryrefslogtreecommitdiff
path: root/spec/requests/api
diff options
context:
space:
mode:
Diffstat (limited to 'spec/requests/api')
-rw-r--r--spec/requests/api/issues/post_projects_issues_spec.rb60
-rw-r--r--spec/requests/api/issues/put_projects_issues_spec.rb61
-rw-r--r--spec/requests/api/project_snippets_spec.rb6
-rw-r--r--spec/requests/api/snippets_spec.rb7
4 files changed, 101 insertions, 33 deletions
diff --git a/spec/requests/api/issues/post_projects_issues_spec.rb b/spec/requests/api/issues/post_projects_issues_spec.rb
index b74e8867310..3a55b437ead 100644
--- a/spec/requests/api/issues/post_projects_issues_spec.rb
+++ b/spec/requests/api/issues/post_projects_issues_spec.rb
@@ -374,9 +374,17 @@ describe API::Issues do
end
describe 'POST /projects/:id/issues with spam filtering' do
+ def post_issue
+ post api("/projects/#{project.id}/issues", user), params: params
+ end
+
before do
- allow_any_instance_of(SpamService).to receive(:check_for_spam?).and_return(true)
- allow_any_instance_of(AkismetService).to receive_messages(spam?: true)
+ expect_next_instance_of(SpamService) do |spam_service|
+ expect(spam_service).to receive_messages(check_for_spam?: true)
+ end
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
end
let(:params) do
@@ -387,17 +395,43 @@ describe API::Issues do
}
end
- it 'does not create a new project issue' do
- expect { post api("/projects/#{project.id}/issues", user), params: params }.not_to change(Issue, :count)
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']).to eq({ 'error' => 'Spam detected' })
-
- spam_logs = SpamLog.all
- expect(spam_logs.count).to eq(1)
- expect(spam_logs[0].title).to eq('new issue')
- expect(spam_logs[0].description).to eq('content here')
- expect(spam_logs[0].user).to eq(user)
- expect(spam_logs[0].noteable_type).to eq('Issue')
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
+
+ it 'does not create a new project issue' do
+ expect { post_issue }.not_to change(Issue, :count)
+ end
+
+ it 'returns correct status and message' do
+ post_issue
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response['message']).to eq({ 'error' => 'Spam detected' })
+ end
+
+ it 'creates a new spam log entry' do
+ expect { post_issue }
+ .to log_spam(title: 'new issue', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ it 'does creates a new project issue' do
+ expect { post_issue }.to change(Issue, :count).by(1)
+ end
+
+ it 'returns correct status' do
+ post_issue
+
+ expect(response).to have_gitlab_http_status(201)
+ end
+
+ it 'creates a new spam log entry' do
+ expect { post_issue }
+ .to log_spam(title: 'new issue', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
end
end
diff --git a/spec/requests/api/issues/put_projects_issues_spec.rb b/spec/requests/api/issues/put_projects_issues_spec.rb
index 267cba93713..43f302ed194 100644
--- a/spec/requests/api/issues/put_projects_issues_spec.rb
+++ b/spec/requests/api/issues/put_projects_issues_spec.rb
@@ -181,6 +181,10 @@ describe API::Issues do
end
describe 'PUT /projects/:id/issues/:issue_iid with spam filtering' do
+ def update_issue
+ put api("/projects/#{project.id}/issues/#{issue.iid}", user), params: params
+ end
+
let(:params) do
{
title: 'updated title',
@@ -189,21 +193,52 @@ describe API::Issues do
}
end
- it 'does not create a new project issue' do
- allow_any_instance_of(SpamService).to receive_messages(check_for_spam?: true)
- allow_any_instance_of(AkismetService).to receive_messages(spam?: true)
+ before do
+ expect_next_instance_of(SpamService) do |spam_service|
+ expect(spam_service).to receive_messages(check_for_spam?: true)
+ end
+ expect_next_instance_of(AkismetService) do |akismet_service|
+ expect(akismet_service).to receive_messages(spam?: true)
+ end
+ end
- put api("/projects/#{project.id}/issues/#{issue.iid}", user), params: params
+ context 'when allow_possible_spam feature flag is false' do
+ before do
+ stub_feature_flags(allow_possible_spam: false)
+ end
- expect(response).to have_gitlab_http_status(400)
- expect(json_response['message']).to eq({ 'error' => 'Spam detected' })
-
- spam_logs = SpamLog.all
- expect(spam_logs.count).to eq(1)
- expect(spam_logs[0].title).to eq('updated title')
- expect(spam_logs[0].description).to eq('content here')
- expect(spam_logs[0].user).to eq(user)
- expect(spam_logs[0].noteable_type).to eq('Issue')
+ it 'does not update a project issue' do
+ expect { update_issue }.not_to change { issue.reload.title }
+ end
+
+ it 'returns correct status and message' do
+ update_issue
+
+ expect(response).to have_gitlab_http_status(400)
+ expect(json_response).to include('message' => { 'error' => 'Spam detected' })
+ end
+
+ it 'creates a new spam log entry' do
+ expect { update_issue }
+ .to log_spam(title: 'updated title', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
+ end
+
+ context 'when allow_possible_spam feature flag is true' do
+ it 'updates a project issue' do
+ expect { update_issue }.to change { issue.reload.title }
+ end
+
+ it 'returns correct status and message' do
+ update_issue
+
+ expect(response).to have_gitlab_http_status(200)
+ end
+
+ it 'creates a new spam log entry' do
+ expect { update_issue }
+ .to log_spam(title: 'updated title', description: 'content here', user_id: user.id, noteable_type: 'Issue')
+ end
end
end
diff --git a/spec/requests/api/project_snippets_spec.rb b/spec/requests/api/project_snippets_spec.rb
index 2e6e13aa927..ef0cabad4b0 100644
--- a/spec/requests/api/project_snippets_spec.rb
+++ b/spec/requests/api/project_snippets_spec.rb
@@ -198,7 +198,7 @@ describe API::ProjectSnippets do
it 'creates a spam log' do
expect { create_snippet(project, visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Test Title', user_id: user.id, noteable_type: 'ProjectSnippet')
end
end
end
@@ -289,7 +289,7 @@ describe API::ProjectSnippets do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: admin.id, noteable_type: 'ProjectSnippet')
end
end
@@ -306,7 +306,7 @@ describe API::ProjectSnippets do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo', visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: admin.id, noteable_type: 'ProjectSnippet')
end
end
end
diff --git a/spec/requests/api/snippets_spec.rb b/spec/requests/api/snippets_spec.rb
index 515912cb305..e7eaaea2418 100644
--- a/spec/requests/api/snippets_spec.rb
+++ b/spec/requests/api/snippets_spec.rb
@@ -254,7 +254,7 @@ describe API::Snippets do
it 'creates a spam log' do
expect { create_snippet(visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Test Title', user_id: user.id, noteable_type: 'PersonalSnippet')
end
end
end
@@ -344,8 +344,7 @@ describe API::Snippets do
end
it 'creates a spam log' do
- expect { update_snippet(title: 'Foo') }
- .to change { SpamLog.count }.by(1)
+ expect { update_snippet(title: 'Foo') }.to log_spam(title: 'Foo', user_id: user.id, noteable_type: 'PersonalSnippet')
end
end
@@ -359,7 +358,7 @@ describe API::Snippets do
it 'creates a spam log' do
expect { update_snippet(title: 'Foo', visibility: 'public') }
- .to change { SpamLog.count }.by(1)
+ .to log_spam(title: 'Foo', user_id: user.id, noteable_type: 'PersonalSnippet')
end
end
end