Add tests & factories for UserMute feature
This commit is contained in:
parent
efc61f1315
commit
d0ec5d1437
6 changed files with 158 additions and 0 deletions
60
test/controllers/user_mutes_controller_test.rb
Normal file
60
test/controllers/user_mutes_controller_test.rb
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class UserMutesControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
def test_routes
|
||||||
|
assert_routing(
|
||||||
|
{ :path => "/user/username/mute", :method => :post },
|
||||||
|
{ :controller => "user_mutes", :action => "create", :display_name => "username" }
|
||||||
|
)
|
||||||
|
assert_routing(
|
||||||
|
{ :path => "/user/username/mute", :method => :delete },
|
||||||
|
{ :controller => "user_mutes", :action => "destroy", :display_name => "username" }
|
||||||
|
)
|
||||||
|
assert_routing(
|
||||||
|
{ :path => "/user_mutes", :method => :get },
|
||||||
|
{ :controller => "user_mutes", :action => "index" }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_index
|
||||||
|
user = create(:user)
|
||||||
|
user.mutes.create(:subject => create(:user))
|
||||||
|
session_for(user)
|
||||||
|
|
||||||
|
get user_mutes_path
|
||||||
|
assert_match "You have muted 1 User", @response.body
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create
|
||||||
|
user = create(:user)
|
||||||
|
session_for(user)
|
||||||
|
|
||||||
|
assert_equal 0, user.muted_users.count
|
||||||
|
subject = create(:user, :display_name => "Bob")
|
||||||
|
post user_mute_path(subject)
|
||||||
|
assert_match "You muted Bob", flash[:notice]
|
||||||
|
|
||||||
|
assert_equal 1, user.muted_users.count
|
||||||
|
assert_equal subject, user.muted_users.first
|
||||||
|
|
||||||
|
post user_mute_path(subject)
|
||||||
|
assert_match "Bob could not be muted. Is already muted", flash[:error]
|
||||||
|
assert_equal 1, user.muted_users.count
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_destroy
|
||||||
|
user = create(:user)
|
||||||
|
session_for(user)
|
||||||
|
|
||||||
|
subject = create(:user, :display_name => "Bob")
|
||||||
|
user.mutes.create(:subject => subject)
|
||||||
|
assert_equal 1, user.muted_users.count
|
||||||
|
|
||||||
|
delete user_mute_path(subject)
|
||||||
|
assert_match "You unmuted Bob", flash[:notice]
|
||||||
|
assert_equal 0, user.muted_users.count
|
||||||
|
|
||||||
|
delete user_mute_path(subject)
|
||||||
|
assert_response :not_found
|
||||||
|
end
|
||||||
|
end
|
|
@ -14,5 +14,9 @@ FactoryBot.define do
|
||||||
trait :read do
|
trait :read do
|
||||||
message_read { true }
|
message_read { true }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trait :muted do
|
||||||
|
muted { true }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
6
test/factories/user_mute.rb
Normal file
6
test/factories/user_mute.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :user_mute do
|
||||||
|
owner :factory => :user
|
||||||
|
subject :factory => :user
|
||||||
|
end
|
||||||
|
end
|
|
@ -175,6 +175,26 @@ class MessageTest < ActiveSupport::TestCase
|
||||||
assert_equal "text", message.body_format
|
assert_equal "text", message.body_format
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_notify_recipient
|
||||||
|
message = create(:message)
|
||||||
|
assert_not_predicate message, :muted?
|
||||||
|
assert_predicate message, :notify_recipient?
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_notify_recipient_for_muted_messages
|
||||||
|
message = create(:message, :muted)
|
||||||
|
assert_predicate message, :muted?
|
||||||
|
assert_not_predicate message, :notify_recipient?
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_unmuting_a_muted_message
|
||||||
|
message = create(:message, :muted)
|
||||||
|
assert_predicate message, :muted?
|
||||||
|
|
||||||
|
message.unmute
|
||||||
|
assert_not_predicate message, :muted?
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def make_message(char, count)
|
def make_message(char, count)
|
||||||
|
|
24
test/models/user_mute_test.rb
Normal file
24
test/models/user_mute_test.rb
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class UserMuteTest < ActiveSupport::TestCase
|
||||||
|
def test_messages_by_muted_users_are_muted
|
||||||
|
user = create(:user)
|
||||||
|
muted_user = create(:user)
|
||||||
|
create(:user_mute, :owner => user, :subject => muted_user)
|
||||||
|
|
||||||
|
message = create(:message, :sender => muted_user, :recipient => user)
|
||||||
|
assert_predicate message, :muted?
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_messages_by_admins_or_moderators_are_never_muted
|
||||||
|
user = create(:user)
|
||||||
|
|
||||||
|
[create(:administrator_user), create(:moderator_user)].each do |admin_or_moderator|
|
||||||
|
create(:user_mute, :owner => user, :subject => admin_or_moderator)
|
||||||
|
|
||||||
|
message = create(:message, :sender => admin_or_moderator, :recipient => user)
|
||||||
|
|
||||||
|
assert_not_predicate message, :muted?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
44
test/system/user_muting_test.rb
Normal file
44
test/system/user_muting_test.rb
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
require "application_system_test_case"
|
||||||
|
|
||||||
|
class UserMutingTest < ApplicationSystemTestCase
|
||||||
|
# NB: loads helpers to verify mailer-related behaviour e.g. via assert_no_emails
|
||||||
|
include ActionMailer::TestHelper
|
||||||
|
|
||||||
|
test "users can mute and unmute other users" do
|
||||||
|
user = create(:user)
|
||||||
|
other_user = create(:user)
|
||||||
|
sign_in_as(user)
|
||||||
|
|
||||||
|
visit user_path(other_user)
|
||||||
|
click_link "Mute this User"
|
||||||
|
assert_content "You muted #{other_user.display_name}"
|
||||||
|
|
||||||
|
visit edit_account_path
|
||||||
|
assert_content "Muted Users"
|
||||||
|
click_link "Muted Users"
|
||||||
|
assert_content "You have muted 1 User"
|
||||||
|
click_link "Unmute"
|
||||||
|
|
||||||
|
assert_content "You unmuted #{other_user.display_name}"
|
||||||
|
refute_content "Muted Users"
|
||||||
|
assert_current_path edit_account_path
|
||||||
|
end
|
||||||
|
|
||||||
|
test "messages sent by muted users are set `muted` and do not cause notification emails" do
|
||||||
|
user = create(:user)
|
||||||
|
muted_user = create(:user)
|
||||||
|
create(:user_mute, :owner => user, :subject => muted_user)
|
||||||
|
sign_in_as(muted_user)
|
||||||
|
|
||||||
|
visit new_message_path(user)
|
||||||
|
fill_in "Subject", :with => "Hey Hey"
|
||||||
|
fill_in "Body", :with => "some message"
|
||||||
|
|
||||||
|
assert_no_emails do
|
||||||
|
click_button "Send"
|
||||||
|
end
|
||||||
|
|
||||||
|
message = Message.find_by(:sender => muted_user, :recipient => user)
|
||||||
|
assert_predicate message, :muted?
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue