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