Merge branch 'stable' into develop
This commit is contained in:
commit
176b32c815
15 changed files with 266 additions and 132 deletions
|
|
@ -78,6 +78,7 @@ With the port to Bootstrap 3, app/views/terms/default.haml has a new structure.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
* Show spinner on initial stream load [#6384](https://github.com/diaspora/diaspora/pull/6384)
|
* Show spinner on initial stream load [#6384](https://github.com/diaspora/diaspora/pull/6384)
|
||||||
|
* Add new moderator role. Moderators can view and act on reported posts [#6351](https://github.com/diaspora/diaspora/pull/6351)
|
||||||
|
|
||||||
# 0.5.3.0
|
# 0.5.3.0
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,8 @@
|
||||||
<li><a href="/help">{{t "header.help"}}</a></li>
|
<li><a href="/help">{{t "header.help"}}</a></li>
|
||||||
{{#if current_user.admin}}
|
{{#if current_user.admin}}
|
||||||
<li><a href="/admins/dashboard">{{t "header.admin"}}</a></li>
|
<li><a href="/admins/dashboard">{{t "header.admin"}}</a></li>
|
||||||
|
{{else if current_user.moderator}}
|
||||||
|
<li><a href="/report">{{t "header.moderator"}}</a></li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<li><a href="/users/sign_out" data-method="delete">{{t "header.log_out"}}</a></li>
|
<li><a href="/users/sign_out" data-method="delete">{{t "header.log_out"}}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -116,4 +118,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
class ApplicationController < ActionController::Base
|
class ApplicationController < ActionController::Base
|
||||||
before_action :force_tablet_html
|
before_action :force_tablet_html
|
||||||
has_mobile_fu
|
has_mobile_fu
|
||||||
protect_from_forgery :except => :receive
|
protect_from_forgery except: :receive
|
||||||
|
|
||||||
before_action :ensure_http_referer_is_set
|
before_action :ensure_http_referer_is_set
|
||||||
before_action :set_locale
|
before_action :set_locale
|
||||||
|
|
@ -16,7 +16,7 @@ class ApplicationController < ActionController::Base
|
||||||
before_action :gon_set_appconfig
|
before_action :gon_set_appconfig
|
||||||
before_action :gon_set_preloads
|
before_action :gon_set_preloads
|
||||||
|
|
||||||
inflection_method :grammatical_gender => :gender
|
inflection_method grammatical_gender: :gender
|
||||||
|
|
||||||
helper_method :all_aspects,
|
helper_method :all_aspects,
|
||||||
:all_contacts_count,
|
:all_contacts_count,
|
||||||
|
|
@ -35,7 +35,7 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_http_referer_is_set
|
def ensure_http_referer_is_set
|
||||||
request.env['HTTP_REFERER'] ||= '/'
|
request.env["HTTP_REFERER"] ||= "/"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Overwriting the sign_out redirect path method
|
# Overwriting the sign_out redirect path method
|
||||||
|
|
@ -68,11 +68,11 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_diaspora_header
|
def set_diaspora_header
|
||||||
headers['X-Diaspora-Version'] = AppConfig.version_string
|
headers["X-Diaspora-Version"] = AppConfig.version_string
|
||||||
|
|
||||||
if AppConfig.git_available?
|
if AppConfig.git_available?
|
||||||
headers['X-Git-Update'] = AppConfig.git_update if AppConfig.git_update.present?
|
headers["X-Git-Update"] = AppConfig.git_update if AppConfig.git_update.present?
|
||||||
headers['X-Git-Revision'] = AppConfig.git_revision if AppConfig.git_revision.present?
|
headers["X-Git-Revision"] = AppConfig.git_revision if AppConfig.git_revision.present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -87,10 +87,13 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def redirect_unless_admin
|
def redirect_unless_admin
|
||||||
unless current_user.admin?
|
return if current_user.admin?
|
||||||
redirect_to stream_url, :notice => 'you need to be an admin to do that'
|
redirect_to stream_url, notice: "you need to be an admin to do that"
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def redirect_unless_moderator
|
||||||
|
return if current_user.moderator?
|
||||||
|
redirect_to stream_url, notice: "you need to be an admin or moderator to do that"
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_grammatical_gender
|
def set_grammatical_gender
|
||||||
|
|
@ -150,7 +153,7 @@ class ApplicationController < ActionController::Base
|
||||||
return unless user_signed_in?
|
return unless user_signed_in?
|
||||||
a_ids = session[:a_ids] || []
|
a_ids = session[:a_ids] || []
|
||||||
user = UserPresenter.new(current_user, a_ids)
|
user = UserPresenter.new(current_user, a_ids)
|
||||||
gon.push({:user => user})
|
gon.push(user: user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def gon_set_preloads
|
def gon_set_preloads
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
# the COPYRIGHT file.
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
class ReportController < ApplicationController
|
class ReportController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_filter :redirect_unless_admin, :except => [:create]
|
before_action :redirect_unless_moderator, except: [:create]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@reports = Report.where(reviewed: false)
|
@reports = Report.where(reviewed: false)
|
||||||
|
|
@ -19,19 +19,19 @@ class ReportController < ApplicationController
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
if (report = Report.where(id: params[:id]).first) && report.destroy_reported_item
|
if (report = Report.where(id: params[:id]).first) && report.destroy_reported_item
|
||||||
flash[:notice] = I18n.t 'report.status.destroyed'
|
flash[:notice] = I18n.t "report.status.destroyed"
|
||||||
else
|
else
|
||||||
flash[:error] = I18n.t 'report.status.failed'
|
flash[:error] = I18n.t "report.status.failed"
|
||||||
end
|
end
|
||||||
redirect_to :action => :index
|
redirect_to action: :index
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
report = current_user.reports.new(report_params)
|
report = current_user.reports.new(report_params)
|
||||||
if report.save
|
if report.save
|
||||||
render :json => true, :status => 200
|
render json: true, status: 200
|
||||||
else
|
else
|
||||||
render :nothing => true, :status => 409
|
render nothing: true, status: 409
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,32 @@
|
||||||
class ReportMailer < ActionMailer::Base
|
class ReportMailer < ActionMailer::Base
|
||||||
default :from => AppConfig.mail.sender_address
|
default from: AppConfig.mail.sender_address
|
||||||
|
|
||||||
def new_report(type, id)
|
def self.new_report(type, id)
|
||||||
|
Role.moderators.map {|role| super(type, id, role) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def new_report(type, id, role)
|
||||||
resource = {
|
resource = {
|
||||||
:url => report_index_url,
|
url: report_index_url,
|
||||||
:type => I18n.t('notifier.report_email.type.' + type),
|
type: I18n.t("notifier.report_email.type." + type),
|
||||||
:id => id
|
id: id
|
||||||
}
|
}
|
||||||
|
|
||||||
Role.admins.each do |role|
|
|
||||||
person = Person.find(role.person_id)
|
person = Person.find(role.person_id)
|
||||||
if person.local?
|
return unless person.local?
|
||||||
user = User.find_by_id(person.owner_id)
|
user = User.find_by_id(person.owner_id)
|
||||||
unless user.user_preferences.exists?(:email_type => :someone_reported)
|
return if user.user_preferences.exists?(email_type: :someone_reported)
|
||||||
|
I18n.with_locale(user.language) do
|
||||||
resource[:email] = user.email
|
resource[:email] = user.email
|
||||||
format(resource)
|
format(resource)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def format(resource)
|
def format(resource)
|
||||||
mail(to: resource[:email], subject: I18n.t('notifier.report_email.subject', :type => resource[:type])) do |format|
|
mail(to: resource[:email], subject: I18n.t("notifier.report_email.subject", type: resource[:type])) do |format|
|
||||||
format.html { render 'report/report_email', :locals => { :resource => resource } }
|
format.html { render "report/report_email", locals: {resource: resource} }
|
||||||
format.text { render 'report/report_email', :locals => { :resource => resource } }
|
format.text { render "report/report_email", locals: {resource: resource} }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ class Role < ActiveRecord::Base
|
||||||
|
|
||||||
validates :person, presence: true
|
validates :person, presence: true
|
||||||
validates :name, uniqueness: {scope: :person_id}
|
validates :name, uniqueness: {scope: :person_id}
|
||||||
validates :name, inclusion: {in: %w(admin spotlight)}
|
validates :name, inclusion: {in: %w(admin moderator spotlight)}
|
||||||
|
|
||||||
scope :admins, -> { where(name: "admin") }
|
scope :admins, -> { where(name: "admin") }
|
||||||
|
scope :moderators, -> { where(name: %w(moderator admin)) }
|
||||||
|
|
||||||
def self.is_admin?(person)
|
def self.is_admin?(person)
|
||||||
exists?(person_id: person.id, name: "admin")
|
exists?(person_id: person.id, name: "admin")
|
||||||
|
|
@ -17,6 +18,14 @@ class Role < ActiveRecord::Base
|
||||||
find_or_create_by(person_id: person.id, name: "admin")
|
find_or_create_by(person_id: person.id, name: "admin")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.moderator?(person)
|
||||||
|
moderators.exists?(person_id: person.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.add_moderator(person)
|
||||||
|
find_or_create_by(person_id: person.id, name: "moderator")
|
||||||
|
end
|
||||||
|
|
||||||
def self.add_spotlight(person)
|
def self.add_spotlight(person)
|
||||||
find_or_create_by(person_id: person.id, name: "spotlight")
|
find_or_create_by(person_id: person.id, name: "spotlight")
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -489,6 +489,10 @@ class User < ActiveRecord::Base
|
||||||
Role.is_admin?(self.person)
|
Role.is_admin?(self.person)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def moderator?
|
||||||
|
Role.moderator?(person)
|
||||||
|
end
|
||||||
|
|
||||||
def podmin_account?
|
def podmin_account?
|
||||||
username == AppConfig.admins.account
|
username == AppConfig.admins.account
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,15 @@ class UserPresenter
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_json(options={})
|
def to_json(options={})
|
||||||
self.user.person.as_api_response(:backbone).update(
|
user.person.as_api_response(:backbone).update(
|
||||||
{ :notifications_count => notifications_count,
|
notifications_count: notifications_count,
|
||||||
:unread_messages_count => unread_messages_count,
|
unread_messages_count: unread_messages_count,
|
||||||
:admin => admin,
|
admin: admin,
|
||||||
:aspects => aspects,
|
moderator: moderator,
|
||||||
:services => services,
|
aspects: aspects,
|
||||||
:following_count => self.user.contacts.receiving.count,
|
services: services,
|
||||||
:configured_services => self.configured_services,
|
following_count: user.contacts.receiving.count,
|
||||||
}
|
configured_services: configured_services
|
||||||
).to_json(options)
|
).to_json(options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -24,14 +24,14 @@ class UserPresenter
|
||||||
end
|
end
|
||||||
|
|
||||||
def configured_services
|
def configured_services
|
||||||
user.services.map{|service| service.provider }
|
user.services.map(&:provider)
|
||||||
end
|
end
|
||||||
|
|
||||||
def aspects
|
def aspects
|
||||||
@aspects ||= begin
|
@aspects ||= begin
|
||||||
aspects = AspectPresenter.as_collection(user.aspects)
|
aspects = AspectPresenter.as_collection(user.aspects)
|
||||||
no_aspects = self.aspects_ids.empty?
|
no_aspects = aspects_ids.empty?
|
||||||
aspects.each{ |a| a[:selected] = no_aspects || self.aspects_ids.include?(a[:id].to_s) }
|
aspects.each {|a| a[:selected] = no_aspects || aspects_ids.include?(a[:id].to_s) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -46,4 +46,8 @@ class UserPresenter
|
||||||
def admin
|
def admin
|
||||||
user.admin?
|
user.admin?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def moderator
|
||||||
|
user.moderator?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
|
- content_for :head do
|
||||||
|
= stylesheet_link_tag :admin
|
||||||
|
|
||||||
.container
|
.container
|
||||||
.row
|
.row
|
||||||
.col-md-3
|
.col-md-3
|
||||||
|
- if current_user.admin?
|
||||||
= render partial: "admins/admin_bar"
|
= render partial: "admins/admin_bar"
|
||||||
.col-md-9
|
.col-md-9
|
||||||
%h1
|
%h1
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,8 @@ module Workers
|
||||||
sidekiq_options queue: :mail
|
sidekiq_options queue: :mail
|
||||||
|
|
||||||
def perform(type, id)
|
def perform(type, id)
|
||||||
ReportMailer.new_report(type, id).deliver_now
|
ReportMailer.new_report(type, id).each(&:deliver_now)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -266,6 +266,7 @@ en:
|
||||||
settings: "Settings"
|
settings: "Settings"
|
||||||
help: "Help"
|
help: "Help"
|
||||||
admin: "Admin"
|
admin: "Admin"
|
||||||
|
moderator: "Moderator"
|
||||||
log_out: "Log out"
|
log_out: "Log out"
|
||||||
toggle_navigation: "Toggle navigation"
|
toggle_navigation: "Toggle navigation"
|
||||||
toggle_mobile: "Toggle mobile"
|
toggle_mobile: "Toggle mobile"
|
||||||
|
|
|
||||||
|
|
@ -1,129 +1,184 @@
|
||||||
|
|
||||||
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
||||||
# licensed under the Affero General Public License version 3 or later. See
|
# licensed under the Affero General Public License version 3 or later. See
|
||||||
# the COPYRIGHT file.
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
require 'spec_helper'
|
require "spec_helper"
|
||||||
|
|
||||||
describe ReportController, :type => :controller do
|
describe ReportController, type: :controller do
|
||||||
before do
|
before do
|
||||||
sign_in alice
|
sign_in alice
|
||||||
@message = alice.post(:status_message, :text => "hey", :to => alice.aspects.first.id)
|
@message = alice.post(:status_message, text: "hey", to: alice.aspects.first.id)
|
||||||
@comment = alice.comment!(@message, "flying pigs, everywhere")
|
@comment = alice.comment!(@message, "flying pigs, everywhere")
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#index' do
|
describe "#index" do
|
||||||
context 'admin not signed in' do
|
context "admin not signed in" do
|
||||||
it 'is behind redirect_unless_admin' do
|
it "is behind redirect_unless_admin" do
|
||||||
get :index
|
get :index
|
||||||
expect(response).to redirect_to stream_path
|
expect(response).to redirect_to stream_path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'admin signed in' do
|
context "admin signed in" do
|
||||||
before do
|
before do
|
||||||
Role.add_admin(alice.person)
|
Role.add_admin(alice.person)
|
||||||
end
|
end
|
||||||
it 'succeeds and renders index' do
|
it "succeeds and renders index" do
|
||||||
get :index
|
get :index
|
||||||
expect(response).to render_template('index')
|
expect(response).to render_template("index")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "moderator signed in" do
|
||||||
|
before do
|
||||||
|
Role.add_moderator(alice.person)
|
||||||
|
end
|
||||||
|
it "succeeds and renders index" do
|
||||||
|
get :index
|
||||||
|
expect(response).to render_template("index")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#create' do
|
describe "#create" do
|
||||||
let(:comment_hash) {
|
let(:comment_hash) {
|
||||||
{:text =>"facebook, is that you?",
|
{text: "facebook, is that you?",
|
||||||
:item_id =>"#{@post.id}"}
|
item_id: "#{@post.id}"}
|
||||||
}
|
}
|
||||||
|
|
||||||
context 'report offensive post' do
|
context "report offensive post" do
|
||||||
it 'succeeds' do
|
it "succeeds" do
|
||||||
put :create, :report => { :item_id => @message.id, :item_type => 'post', :text => 'offensive content' }
|
put :create, report: {item_id: @message.id, item_type: "post", text: "offensive content"}
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
expect(Report.exists?(:item_id => @message.id, :item_type => 'post')).to be true
|
expect(Report.exists?(item_id: @message.id, item_type: "post")).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'report offensive comment' do
|
context "report offensive comment" do
|
||||||
it 'succeeds' do
|
it "succeeds" do
|
||||||
put :create, :report => { :item_id => @comment.id, :item_type => 'comment', :text => 'offensive content' }
|
put :create, report: {item_id: @comment.id, item_type: "comment", text: "offensive content"}
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
expect(Report.exists?(:item_id => @comment.id, :item_type => 'comment')).to be true
|
expect(Report.exists?(item_id: @comment.id, item_type: "comment")).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#update' do
|
describe "#update" do
|
||||||
context 'mark post report as user' do
|
context "mark post report as user" do
|
||||||
it 'is behind redirect_unless_admin' do
|
it "is behind redirect_unless_admin_or_moderator" do
|
||||||
put :update, :id => @message.id, :type => 'post'
|
put :update, id: @message.id, type: "post"
|
||||||
expect(response).to redirect_to stream_path
|
expect(response).to redirect_to stream_path
|
||||||
expect(Report.where(:reviewed => false, :item_id => @message.id, :item_type => 'post')).to be_truthy
|
expect(Report.where(reviewed: false, item_id: @message.id, item_type: "post")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'mark comment report as user' do
|
context "mark comment report as user" do
|
||||||
it 'is behind redirect_unless_admin' do
|
it "is behind redirect_unless_admin_or_moderator" do
|
||||||
put :update, :id => @comment.id, :type => 'comment'
|
put :update, id: @comment.id, type: "comment"
|
||||||
expect(response).to redirect_to stream_path
|
expect(response).to redirect_to stream_path
|
||||||
expect(Report.where(:reviewed => false, :item_id => @comment.id, :item_type => 'comment')).to be_truthy
|
expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "comment")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'mark post report as admin' do
|
context "mark post report as admin" do
|
||||||
before do
|
before do
|
||||||
Role.add_admin(alice.person)
|
Role.add_admin(alice.person)
|
||||||
end
|
end
|
||||||
it 'succeeds' do
|
it "succeeds" do
|
||||||
put :update, :id => @message.id, :type => 'post'
|
put :update, id: @message.id, type: "post"
|
||||||
expect(response.status).to eq(302)
|
expect(response.status).to eq(302)
|
||||||
expect(Report.where(:reviewed => true, :item_id => @message.id, :item_type => 'post')).to be_truthy
|
expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'mark comment report as admin' do
|
context "mark comment report as admin" do
|
||||||
before do
|
before do
|
||||||
Role.add_admin(alice.person)
|
Role.add_admin(alice.person)
|
||||||
end
|
end
|
||||||
it 'succeeds' do
|
it "succeeds" do
|
||||||
put :update, :id => @comment.id, :type => 'comment'
|
put :update, id: @comment.id, type: "comment"
|
||||||
expect(response.status).to eq(302)
|
expect(response.status).to eq(302)
|
||||||
expect(Report.where(:reviewed => true, :item_id => @comment.id, :item_type => 'comment')).to be_truthy
|
expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "mark post report as moderator" do
|
||||||
|
before do
|
||||||
|
Role.add_moderator(alice.person)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "succeeds" do
|
||||||
|
put :update, id: @message.id, type: "post"
|
||||||
|
expect(response.status).to eq(302)
|
||||||
|
expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "mark comment report as moderator" do
|
||||||
|
before do
|
||||||
|
Role.add_moderator(alice.person)
|
||||||
|
end
|
||||||
|
it "succeeds" do
|
||||||
|
put :update, id: @comment.id, type: "comment"
|
||||||
|
expect(response.status).to eq(302)
|
||||||
|
expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#destroy' do
|
describe "#destroy" do
|
||||||
context 'destroy post as user' do
|
context "destroy post as user" do
|
||||||
it 'is behind redirect_unless_admin' do
|
it "is behind redirect_unless_admin_or_moderator" do
|
||||||
delete :destroy, :id => @message.id, :type => 'post'
|
delete :destroy, id: @message.id, type: "post"
|
||||||
expect(response).to redirect_to stream_path
|
expect(response).to redirect_to stream_path
|
||||||
expect(Report.where(:reviewed => false, :item_id => @message.id, :item_type => 'post')).to be_truthy
|
expect(Report.where(reviewed: false, item_id: @message.id, item_type: "post")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'destroy comment as user' do
|
context "destroy comment as user" do
|
||||||
it 'is behind redirect_unless_admin' do
|
it "is behind redirect_unless_admin_or_moderator" do
|
||||||
delete :destroy, :id => @comment.id, :type => 'comment'
|
delete :destroy, id: @comment.id, type: "comment"
|
||||||
expect(response).to redirect_to stream_path
|
expect(response).to redirect_to stream_path
|
||||||
expect(Report.where(:reviewed => false, :item_id => @comment.id, :item_type => 'comment')).to be_truthy
|
expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "comment")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'destroy post as admin' do
|
context "destroy post as admin" do
|
||||||
before do
|
before do
|
||||||
Role.add_admin(alice.person)
|
Role.add_admin(alice.person)
|
||||||
end
|
end
|
||||||
it 'succeeds' do
|
it "succeeds" do
|
||||||
delete :destroy, :id => @message.id, :type => 'post'
|
delete :destroy, id: @message.id, type: "post"
|
||||||
expect(response.status).to eq(302)
|
expect(response.status).to eq(302)
|
||||||
expect(Report.where(:reviewed => true, :item_id => @message.id, :item_type => 'post')).to be_truthy
|
expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'destroy comment as admin' do
|
context "destroy comment as admin" do
|
||||||
before do
|
before do
|
||||||
Role.add_admin(alice.person)
|
Role.add_admin(alice.person)
|
||||||
end
|
end
|
||||||
it 'succeeds' do
|
it "succeeds" do
|
||||||
delete :destroy, :id => @comment.id, :type => 'comment'
|
delete :destroy, id: @comment.id, type: "comment"
|
||||||
expect(response.status).to eq(302)
|
expect(response.status).to eq(302)
|
||||||
expect(Report.where(:reviewed => true, :item_id => @comment.id, :item_type => 'comment')).to be_truthy
|
expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "destroy post as moderator" do
|
||||||
|
before do
|
||||||
|
Role.add_moderator(alice.person)
|
||||||
|
end
|
||||||
|
it "succeeds" do
|
||||||
|
delete :destroy, id: @message.id, type: "post"
|
||||||
|
expect(response.status).to eq(302)
|
||||||
|
expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
context "destroy comment as moderator" do
|
||||||
|
before do
|
||||||
|
Role.add_moderator(alice.person)
|
||||||
|
end
|
||||||
|
it "succeeds" do
|
||||||
|
delete :destroy, id: @comment.id, type: "comment"
|
||||||
|
expect(response.status).to eq(302)
|
||||||
|
expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2,31 +2,40 @@
|
||||||
# licensed under the Affero General Public License version 3 or later. See
|
# licensed under the Affero General Public License version 3 or later. See
|
||||||
# the COPYRIGHT file.
|
# the COPYRIGHT file.
|
||||||
|
|
||||||
require 'spec_helper'
|
require "spec_helper"
|
||||||
|
|
||||||
describe Report, :type => :mailer do
|
describe Report, type: :mailer do
|
||||||
describe '#make_notification' do
|
describe "#make_notification" do
|
||||||
before do
|
before do
|
||||||
@remote = FactoryGirl.create(:person, :diaspora_handle => "remote@remote.net")
|
@remote = FactoryGirl.create(:person, diaspora_handle: "remote@remote.net")
|
||||||
@user = FactoryGirl.create(:user_with_aspect, :username => "local")
|
@user = FactoryGirl.create(:user_with_aspect, username: "local", language: "de")
|
||||||
|
@user2 = FactoryGirl.create(:user_with_aspect, username: "locally")
|
||||||
Role.add_admin(@user.person)
|
Role.add_admin(@user.person)
|
||||||
|
Role.add_moderator(@user2.person)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should deliver successfully" do
|
it "should deliver successfully" do
|
||||||
expect {
|
expect {
|
||||||
ReportMailer.new_report('post', 666).deliver_now
|
ReportMailer.new_report("post", 666).each(&:deliver_now)
|
||||||
}.to_not raise_error
|
}.to_not raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should be added to the delivery queue" do
|
it "should be added to the delivery queue" do
|
||||||
expect {
|
expect {
|
||||||
ReportMailer.new_report('post', 666).deliver_now
|
ReportMailer.new_report("post", 666).each(&:deliver_now)
|
||||||
}.to change(ActionMailer::Base.deliveries, :size).by(1)
|
}.to change(ActionMailer::Base.deliveries, :size).by(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should include correct recipient" do
|
it "should include correct recipient" do
|
||||||
ReportMailer.new_report('post', 666).deliver_now
|
ReportMailer.new_report("post", 666).each(&:deliver_now)
|
||||||
expect(ActionMailer::Base.deliveries[0].to[0]).to include(@user.email)
|
expect(ActionMailer::Base.deliveries[0].to[0]).to include(@user.email)
|
||||||
|
expect(ActionMailer::Base.deliveries[1].to[0]).to include(@user2.email)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should send mail in recipent's prefered language" do
|
||||||
|
ReportMailer.new_report("post", 666).each(&:deliver_now)
|
||||||
|
expect(ActionMailer::Base.deliveries[0].subject).to match("Ein neuer post wurde als anstößig markiert")
|
||||||
|
expect(ActionMailer::Base.deliveries[1].subject).to match("A new post was marked as offensive")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
require "spec_helper"
|
require "spec_helper"
|
||||||
|
|
||||||
describe Role do
|
describe Role do
|
||||||
let(:person) { create(:person) }
|
let!(:person) { create(:person) }
|
||||||
|
let!(:admin) { create(:person) }
|
||||||
|
let!(:admin_role) { admin.roles.create(name: "admin") }
|
||||||
|
let!(:moderator) { create(:person) }
|
||||||
|
let!(:moderator_role) { moderator.roles.create(name: "moderator") }
|
||||||
|
|
||||||
describe "validations" do
|
describe "validations" do
|
||||||
it { should validate_presence_of(:person) }
|
it { should validate_presence_of(:person) }
|
||||||
it { should validate_uniqueness_of(:name).scoped_to(:person_id) }
|
it { should validate_uniqueness_of(:name).scoped_to(:person_id) }
|
||||||
it { should validate_inclusion_of(:name).in_array(%w(admin spotlight)) }
|
it { should validate_inclusion_of(:name).in_array(%w(admin spotlight moderator)) }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "associations" do
|
describe "associations" do
|
||||||
|
|
@ -14,14 +18,21 @@ describe Role do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "scopes" do
|
describe "scopes" do
|
||||||
let!(:admin_role) { person.roles.create(name: "admin") }
|
|
||||||
let!(:spotlight_role) { person.roles.create(name: "spotlight") }
|
|
||||||
|
|
||||||
describe ".admins" do
|
describe ".admins" do
|
||||||
it "includes admin roles" do
|
it "includes admin roles" do
|
||||||
expect(Role.admins).to match_array([admin_role])
|
expect(Role.admins).to match_array([admin_role])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".moderators" do
|
||||||
|
it "should include admins" do
|
||||||
|
expect(Role.moderators).to include(admin_role)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should include moderators" do
|
||||||
|
expect(Role.moderators).to include(moderator_role)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ".is_admin?" do
|
describe ".is_admin?" do
|
||||||
|
|
@ -30,10 +41,32 @@ describe Role do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the person is an admin" do
|
context "when the person is an admin" do
|
||||||
before { person.roles.create(name: "admin") }
|
|
||||||
|
|
||||||
it "is true" do
|
it "is true" do
|
||||||
expect(Role.is_admin?(person)).to be true
|
expect(Role.is_admin?(admin)).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the person is a moderator" do
|
||||||
|
it "is false" do
|
||||||
|
expect(Role.is_admin?(moderator)).to be false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe ".moderator?" do
|
||||||
|
it "defaults to false" do
|
||||||
|
expect(Role.moderator?(person)).to be false
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the person is a moderator" do
|
||||||
|
it "is true" do
|
||||||
|
expect(Role.moderator?(moderator)).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the person is an admin" do
|
||||||
|
it "is true" do
|
||||||
|
expect(Role.moderator?(admin)).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -45,6 +78,13 @@ describe Role do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".add_moderator" do
|
||||||
|
it "creates the moderator role" do
|
||||||
|
Role.add_moderator(person)
|
||||||
|
expect(person.roles.where(name: "moderator")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe ".add_spotlight" do
|
describe ".add_spotlight" do
|
||||||
it "creates the spotlight role" do
|
it "creates the spotlight role" do
|
||||||
Role.add_spotlight(person)
|
Role.add_spotlight(person)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue