+ def test_comment_spammy
+ # Find the entry to comment on
+ entry = diary_entries(:normal_user_entry_1)
+
+ # Generate some spammy content
+ spammy_text = 1.upto(50).map { |n| "http://example.com/spam#{n}" }.join(" ")
+
+ # Try creating a spammy comment
+ assert_difference "ActionMailer::Base.deliveries.size", 1 do
+ assert_difference "DiaryComment.count", 1 do
+ post :comment, { :display_name => entry.user.display_name, :id => entry.id, :diary_comment => { :body => spammy_text } }, { :user => users(:public_user).id }
+ end
+ end
+ assert_response :redirect
+ assert_redirected_to :action => :view, :display_name => entry.user.display_name, :id => entry.id
+ email = ActionMailer::Base.deliveries.first
+ assert_equal [users(:normal_user).email], email.to
+ assert_equal "[OpenStreetMap] #{users(:public_user).display_name} commented on your diary entry", email.subject
+ assert_match %r{http://example.com/spam}, email.text_part.decoded
+ assert_match %r{http://example.com/spam}, email.html_part.decoded
+ ActionMailer::Base.deliveries.clear
+ comment = DiaryComment.order(:id).last
+ assert_equal entry.id, comment.diary_entry_id
+ assert_equal users(:public_user).id, comment.user_id
+ assert_equal spammy_text, comment.body
+ assert_equal "suspended", User.find(users(:public_user).id).status
+
+ # Follow the redirect
+ get :list, { :display_name => users(:normal_user).display_name }, { :user => users(:public_user).id }
+ assert_response :redirect
+ assert_redirected_to :controller => :user, :action => :suspended
+
+ # Now view the diary entry, and check the new comment is not present
+ get :view, :display_name => entry.user.display_name, :id => entry.id
+ assert_response :success
+ assert_select ".diary-comment", :count => 0
+ end
+
+ def test_list_all
+ # Try a list of all diary entries
+ get :list
+ check_diary_list :normal_user_entry_1, :normal_user_geo_entry, :public_user_entry_1
+ end
+
+ def test_list_user
+ # Try a list of diary entries for a valid user
+ get :list, :display_name => users(:normal_user).display_name
+ check_diary_list :normal_user_entry_1, :normal_user_geo_entry
+
+ # Try a list of diary entries for an invalid user
+ get :list, :display_name => "No Such User"
+ assert_response :not_found
+ assert_template "user/no_such_user"
+ end
+
+ def test_list_friends
+ # Try a list of diary entries for your friends when not logged in
+ get :list, :friends => true
+ assert_response :redirect
+ assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/friends"
+
+ # Try a list of diary entries for your friends when logged in
+ get :list, { :friends => true }, { :user => users(:normal_user).id }
+ check_diary_list :public_user_entry_1
+ get :list, { :friends => true }, { :user => users(:public_user).id }
+ check_diary_list
+ end
+
+ def test_list_nearby
+ # Try a list of diary entries for nearby users when not logged in
+ get :list, :nearby => true
+ assert_response :redirect
+ assert_redirected_to :controller => :user, :action => :login, :referer => "/diary/nearby"
+
+ # Try a list of diary entries for nearby users when logged in
+ get :list, { :nearby => true }, { :user => users(:german_user).id }
+ check_diary_list :public_user_entry_1
+ get :list, { :nearby => true }, { :user => users(:public_user).id }
+ check_diary_list
+ end
+
+ def test_list_language
+ # Try a list of diary entries in english
+ get :list, :language => "en"
+ check_diary_list :normal_user_entry_1, :public_user_entry_1
+
+ # Try a list of diary entries in german
+ get :list, :language => "de"
+ check_diary_list :normal_user_geo_entry
+
+ # Try a list of diary entries in slovenian
+ get :list, :language => "sl"
+ check_diary_list