Skip to content
Snippets Groups Projects
Commit ea72d53e authored by Rémy Coutable's avatar Rémy Coutable Committed by rymai
Browse files

Streamline the "Report button"

This simplifies the "Report button" to not use open a dropdown and
adds a tooltip on this button.
This also removes an extra spec and adds missing specs.
parent 5f95a5e0
No related branches found
No related tags found
No related merge requests found
module UserHelper
def abuse_report_button_title(user)
if user.abuse_report
"#{user.username} has already been reported for abuse."
else
"Report #{user.username} for abuse."
end
end
end
Loading
Loading
@@ -11,11 +11,11 @@
#
 
class AbuseReport < ActiveRecord::Base
belongs_to :reporter, class_name: "User"
belongs_to :reporter, class_name: 'User'
belongs_to :user
 
validates :reporter, presence: true
validates :user, presence: true
validates :message, presence: true
validates :user_id, uniqueness: { scope: :reporter_id }
validates :user_id, uniqueness: true
end
Loading
Loading
@@ -97,9 +97,7 @@ class User < ActiveRecord::Base
# Namespace for personal projects
has_one :namespace, -> { where type: nil }, dependent: :destroy, foreign_key: :owner_id, class_name: "Namespace"
 
# Profile
has_one :abuse_report, dependent: :destroy
has_many :keys, dependent: :destroy
has_many :emails, dependent: :destroy
has_many :identities, dependent: :destroy, autosave: true
Loading
Loading
@@ -131,6 +129,7 @@ class User < ActiveRecord::Base
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 :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner, dependent: :destroy
has_one :abuse_report, dependent: :destroy
 
 
#
Loading
Loading
Loading
Loading
@@ -19,18 +19,13 @@
= icon('user')
Profile settings
- elsif current_user
#report_abuse.pull-right
%span.dropdown
- if @user.abuse_report
%span.light.dropdown-toggle.btn.btn-sm.btn-close{title: abuse_report_button_title(@user)}
= icon('exclamation-circle')
- else
%a.light.dropdown-toggle.btn.btn-sm{href: '#', "data-toggle" => "dropdown"}
= icon('exclamation-circle')
%ul.dropdown-menu.dropdown-menu-right
%li
= link_to new_abuse_report_path(user_id: @user.id), title: abuse_report_button_title(@user) do
Report abuse
.report_abuse.pull-right
- if @user.abuse_report
%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')
 
.username
@#{@user.username}
Loading
Loading
Loading
Loading
@@ -14,4 +14,4 @@ Feature: Abuse reports
And I click "Report abuse" button
When I fill and submit abuse form
And I visit "Mike" user page
Then I should not see the "Remove abuse" dropdown / button
Then I should see a red "Report abuse" button
Loading
Loading
@@ -22,9 +22,8 @@ class Spinach::Features::AbuseReports < Spinach::FeatureSteps
user_mike
end
 
step 'I should not see the "Remove abuse" dropdown / button' do
expect(find(:css, '#report_abuse')).not_to have_selector(:css, 'ul.dropdown-menu')
expect(find(:css, '#report_abuse')).to have_selector(:css, '.btn-close')
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
Loading
Loading
require 'spec_helper'
 
feature 'Users', feature: true do
let(:user) { create(:user, username: 'user1', name: 'User 1', email: 'user1@gitlab.com') }
let(:user2) { create(:user, username: 'user2', name: 'User 2', email: 'user2@gitlab.com') }
let(:user) { create(:user, username: 'user1', name: 'User 1', email: 'user1@gitlab.com') }
 
scenario 'GET /users/sign_in creates a new user account' do
visit new_user_session_path
Loading
Loading
@@ -49,37 +48,4 @@ feature 'Users', feature: true do
page.find('#error_explanation').find('ul').all('li').count
end
 
context 'With a logged-in user' do
before do
login_as(user)
end
describe 'Abuse report button' do
context 'User has never been reported for abuse' do
it 'enables the "Report abuse" button / dropdown' do
visit user_path(user2)
expect(page.find('#report_abuse').find('ul.dropdown-menu').all('li').count).to be(1)
expect(page.find('#report_abuse').all('.btn-close').count).to be(0)
end
end
context 'User has already been reported for abuse' do
before do
@abuse_report = AbuseReport.new(user: user2, message: 'Foo bar')
@abuse_report.reporter = user
@abuse_report.save!
end
it 'disables the "Report abuse" button' do
visit user_path(user2)
expect(page.find('#report_abuse').all('ul.dropdown-menu').count).to be(0)
expect(page.find('#report_abuse').all('.btn-close').count).to be(1)
end
end
end
end
end
Loading
Loading
@@ -16,4 +16,16 @@ RSpec.describe AbuseReport, type: :model do
subject { create(:abuse_report) }
 
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
Loading
Loading
@@ -73,7 +73,6 @@ describe User do
 
describe 'associations' do
it { is_expected.to have_one(:namespace) }
it { is_expected.to have_one(:abuse_report) }
it { is_expected.to have_many(:snippets).class_name('Snippet').dependent(:destroy) }
it { is_expected.to have_many(:project_members).dependent(:destroy) }
it { is_expected.to have_many(:groups) }
Loading
Loading
@@ -86,6 +85,7 @@ describe User do
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(:identities).dependent(:destroy) }
it { is_expected.to have_one(:abuse_report) }
end
 
describe 'validations' do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment