Commit 96c2e225 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'disable-report-button-if-already-reported' into 'master'

Disable the "Report abuse" button if a user has already been reported

Hello,

I've implemented the feature request #2330. Here is what it looks like:

![report-abuse-button-disabled](https://gitlab.com/rymai/gitlab-ce/uploads/420d51906eac1c40c50701a0a340474f/report-abuse-button-disabled.png)

I hope that's an acceptable solution.

cc @DouweM

See merge request !1456
parents 11485306 ea72d53e
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
# #
class AbuseReport < ActiveRecord::Base class AbuseReport < ActiveRecord::Base
belongs_to :reporter, class_name: "User" belongs_to :reporter, class_name: 'User'
belongs_to :user belongs_to :user
validates :reporter, presence: true validates :reporter, presence: true
validates :user, presence: true validates :user, presence: true
validates :message, presence: true validates :message, presence: true
validates :user_id, uniqueness: { scope: :reporter_id } validates :user_id, uniqueness: true
end end
...@@ -129,6 +129,7 @@ class User < ActiveRecord::Base ...@@ -129,6 +129,7 @@ class User < ActiveRecord::Base
has_many :assigned_issues, dependent: :destroy, foreign_key: :assignee_id, class_name: "Issue" has_many :assigned_issues, dependent: :destroy, foreign_key: :assignee_id, class_name: "Issue"
has_many :assigned_merge_requests, dependent: :destroy, foreign_key: :assignee_id, class_name: "MergeRequest" has_many :assigned_merge_requests, dependent: :destroy, foreign_key: :assignee_id, class_name: "MergeRequest"
has_many :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner, dependent: :destroy has_many :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner, dependent: :destroy
has_one :abuse_report, dependent: :destroy
# #
......
...@@ -19,14 +19,13 @@ ...@@ -19,14 +19,13 @@
= icon('user') = icon('user')
Profile settings Profile settings
- elsif current_user - elsif current_user
.pull-right .report_abuse.pull-right
%span.dropdown - if @user.abuse_report
%a.light.dropdown-toggle.btn.btn-sm{href: '#', "data-toggle" => "dropdown"} %span#report_abuse_btn.light.btn.btn-sm.btn-close{title: 'Already reported for abuse', data: {toggle: 'tooltip', placement: 'right', container: 'body'}}
= icon('exclamation-circle')
- else
%a.light.btn.btn-sm{href: new_abuse_report_path(user_id: @user.id), title: 'Report abuse', data: {toggle: 'tooltip', placement: 'right', container: 'body'}}
= icon('exclamation-circle') = icon('exclamation-circle')
%ul.dropdown-menu.dropdown-menu-right
%li
= link_to new_abuse_report_path(user_id: @user.id) do
Report abuse
.username .username
@#{@user.username} @#{@user.username}
......
...@@ -8,3 +8,10 @@ Feature: Abuse reports ...@@ -8,3 +8,10 @@ Feature: Abuse reports
And I click "Report abuse" button And I click "Report abuse" button
When I fill and submit abuse form When I fill and submit abuse form
Then I should see success message Then I should see success message
Scenario: Report abuse available only once
Given I visit "Mike" user page
And I click "Report abuse" button
When I fill and submit abuse form
And I visit "Mike" user page
Then I should see a red "Report abuse" button
...@@ -22,6 +22,10 @@ class Spinach::Features::AbuseReports < Spinach::FeatureSteps ...@@ -22,6 +22,10 @@ class Spinach::Features::AbuseReports < Spinach::FeatureSteps
user_mike user_mike
end end
step 'I should see a red "Report abuse" button' do
expect(find(:css, '.report_abuse')).to have_selector(:css, 'span.btn-close')
end
def user_mike def user_mike
@user_mike ||= create(:user, name: 'Mike') @user_mike ||= create(:user, name: 'Mike')
end end
......
require 'spec_helper' require 'spec_helper'
feature 'Users', feature: true do feature 'Users', feature: true do
let(:user) { create(:user, username: 'user1', name: 'User 1', email: 'user1@gitlab.com') }
scenario 'GET /users/sign_in creates a new user account' do scenario 'GET /users/sign_in creates a new user account' do
visit new_user_session_path visit new_user_session_path
fill_in 'user_name', with: 'Name Surname' fill_in 'user_name', with: 'Name Surname'
...@@ -11,7 +13,6 @@ feature 'Users', feature: true do ...@@ -11,7 +13,6 @@ feature 'Users', feature: true do
end end
scenario 'Successful user signin invalidates password reset token' do scenario 'Successful user signin invalidates password reset token' do
user = create(:user)
expect(user.reset_password_token).to be_nil expect(user.reset_password_token).to be_nil
visit new_user_password_path visit new_user_password_path
...@@ -28,7 +29,6 @@ feature 'Users', feature: true do ...@@ -28,7 +29,6 @@ feature 'Users', feature: true do
expect(user.reset_password_token).to be_nil expect(user.reset_password_token).to be_nil
end end
let!(:user) { create(:user, username: 'user1', name: 'User 1', email: 'user1@gitlab.com') }
scenario 'Should show one error if email is already taken' do scenario 'Should show one error if email is already taken' do
visit new_user_session_path visit new_user_session_path
fill_in 'user_name', with: 'Another user name' fill_in 'user_name', with: 'Another user name'
......
...@@ -16,4 +16,16 @@ RSpec.describe AbuseReport, type: :model do ...@@ -16,4 +16,16 @@ RSpec.describe AbuseReport, type: :model do
subject { create(:abuse_report) } subject { create(:abuse_report) }
it { expect(subject).to be_valid } it { expect(subject).to be_valid }
describe 'associations' do
it { is_expected.to belong_to(:reporter).class_name('User') }
it { is_expected.to belong_to(:user) }
end
describe 'validations' do
it { is_expected.to validate_presence_of(:reporter) }
it { is_expected.to validate_presence_of(:user) }
it { is_expected.to validate_presence_of(:message) }
it { is_expected.to validate_uniqueness_of(:user_id) }
end
end end
...@@ -85,6 +85,7 @@ describe User do ...@@ -85,6 +85,7 @@ describe User do
it { is_expected.to have_many(:merge_requests).dependent(:destroy) } it { is_expected.to have_many(:merge_requests).dependent(:destroy) }
it { is_expected.to have_many(:assigned_merge_requests).dependent(:destroy) } it { is_expected.to have_many(:assigned_merge_requests).dependent(:destroy) }
it { is_expected.to have_many(:identities).dependent(:destroy) } it { is_expected.to have_many(:identities).dependent(:destroy) }
it { is_expected.to have_one(:abuse_report) }
end end
describe 'validations' do describe 'validations' do
......
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