150 lines
4.5 KiB
Ruby
150 lines
4.5 KiB
Ruby
require "test_helper"
|
|
|
|
class ChangesetSubscriptionsControllerTest < ActionDispatch::IntegrationTest
|
|
##
|
|
# test all routes which lead to this controller
|
|
def test_routes
|
|
assert_routing(
|
|
{ :path => "/changeset/1/subscription", :method => :get },
|
|
{ :controller => "changeset_subscriptions", :action => "show", :changeset_id => "1" }
|
|
)
|
|
assert_routing(
|
|
{ :path => "/changeset/1/subscription", :method => :post },
|
|
{ :controller => "changeset_subscriptions", :action => "create", :changeset_id => "1" }
|
|
)
|
|
assert_routing(
|
|
{ :path => "/changeset/1/subscription", :method => :delete },
|
|
{ :controller => "changeset_subscriptions", :action => "destroy", :changeset_id => "1" }
|
|
)
|
|
|
|
get "/changeset/1/subscribe"
|
|
assert_redirected_to "/changeset/1/subscription"
|
|
|
|
get "/changeset/1/unsubscribe"
|
|
assert_redirected_to "/changeset/1/subscription"
|
|
end
|
|
|
|
def test_show_as_anonymous
|
|
changeset = create(:changeset)
|
|
|
|
get changeset_subscription_path(changeset)
|
|
assert_redirected_to login_path(:referer => changeset_subscription_path(changeset))
|
|
end
|
|
|
|
def test_show_when_not_subscribed
|
|
user = create(:user)
|
|
other_user = create(:user)
|
|
changeset = create(:changeset, :user => user)
|
|
|
|
session_for(other_user)
|
|
get changeset_subscription_path(changeset)
|
|
|
|
assert_response :success
|
|
assert_dom ".content-body" do
|
|
assert_dom "a[href='#{changeset_path(changeset)}']", :text => "Changeset #{changeset.id}"
|
|
assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
|
|
assert_dom "form" do
|
|
assert_dom "> @action", changeset_subscription_path(changeset)
|
|
assert_dom "input[type=submit]" do
|
|
assert_dom "> @value", "Subscribe to discussion"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_show_when_subscribed
|
|
user = create(:user)
|
|
other_user = create(:user)
|
|
changeset = create(:changeset, :user => user)
|
|
changeset.subscribers << other_user
|
|
|
|
session_for(other_user)
|
|
get changeset_subscription_path(changeset)
|
|
|
|
assert_response :success
|
|
assert_dom ".content-body" do
|
|
assert_dom "a[href='#{changeset_path(changeset)}']", :text => "Changeset #{changeset.id}"
|
|
assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
|
|
assert_dom "form" do
|
|
assert_dom "> @action", changeset_subscription_path(changeset)
|
|
assert_dom "input[type=submit]" do
|
|
assert_dom "> @value", "Unsubscribe from discussion"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_create_success
|
|
user = create(:user)
|
|
other_user = create(:user)
|
|
changeset = create(:changeset, :user => user)
|
|
|
|
session_for(other_user)
|
|
assert_difference "changeset.subscribers.count", 1 do
|
|
post changeset_subscription_path(changeset)
|
|
end
|
|
assert_redirected_to changeset_path(changeset)
|
|
assert changeset.reload.subscribed?(other_user)
|
|
end
|
|
|
|
def test_create_fail
|
|
user = create(:user)
|
|
other_user = create(:user)
|
|
changeset = create(:changeset, :user => user)
|
|
changeset.subscribers << other_user
|
|
|
|
# not signed in
|
|
assert_no_difference "changeset.subscribers.count" do
|
|
post changeset_subscription_path(changeset)
|
|
end
|
|
assert_response :forbidden
|
|
|
|
session_for(other_user)
|
|
|
|
# bad diary id
|
|
post changeset_subscription_path(999111)
|
|
assert_response :not_found
|
|
|
|
# trying to subscribe when already subscribed
|
|
assert_no_difference "changeset.subscribers.count" do
|
|
post changeset_subscription_path(changeset)
|
|
end
|
|
end
|
|
|
|
def test_destroy_success
|
|
user = create(:user)
|
|
other_user = create(:user)
|
|
changeset = create(:changeset, :user => user)
|
|
changeset.subscribers << other_user
|
|
|
|
session_for(other_user)
|
|
assert_difference "changeset.subscribers.count", -1 do
|
|
delete changeset_subscription_path(changeset)
|
|
end
|
|
assert_redirected_to changeset_path(changeset)
|
|
assert_not changeset.reload.subscribed?(other_user)
|
|
end
|
|
|
|
def test_unsubscribe_fail
|
|
user = create(:user)
|
|
other_user = create(:user)
|
|
changeset = create(:changeset, :user => user)
|
|
|
|
# not signed in
|
|
assert_no_difference "changeset.subscribers.count" do
|
|
delete changeset_subscription_path(changeset)
|
|
end
|
|
assert_response :forbidden
|
|
|
|
session_for(other_user)
|
|
|
|
# bad diary id
|
|
delete changeset_subscription_path(999111)
|
|
assert_response :not_found
|
|
|
|
# trying to unsubscribe when not subscribed
|
|
assert_no_difference "changeset.subscribers.count" do
|
|
delete changeset_subscription_path(changeset)
|
|
end
|
|
end
|
|
end
|