diff options
Diffstat (limited to 'spec/requests/api')
-rw-r--r-- | spec/requests/api/issues/post_projects_issues_spec.rb | 60 | ||||
-rw-r--r-- | spec/requests/api/issues/put_projects_issues_spec.rb | 61 | ||||
-rw-r--r-- | spec/requests/api/project_snippets_spec.rb | 6 | ||||
-rw-r--r-- | spec/requests/api/snippets_spec.rb | 7 |
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 |