Move changeset subscribe/unsubscribe to resourceful routes

This commit is contained in:
Anton Khorev 2024-03-16 06:11:07 +03:00
parent 065e9d217f
commit 3a5f0c4845
4 changed files with 31 additions and 16 deletions

View file

@ -177,7 +177,7 @@ class UserMailer < ApplicationMailer
@changeset_comment = comment.changeset.tags["comment"].presence
@time = comment.created_at
@changeset_author = comment.changeset.user.display_name
@unsubscribe_url = changeset_unsubscribe_url(comment.changeset)
@unsubscribe_url = unsubscribe_changeset_url(comment.changeset)
@author = @commenter
subject = if @owner
@ -193,7 +193,7 @@ class UserMailer < ApplicationMailer
set_list_headers(
"#{comment.changeset.id}.changeset.www.openstreetmap.org",
t(".description", :id => comment.changeset.id),
:subscribe => changeset_subscribe_url(comment.changeset),
:subscribe => subscribe_changeset_url(comment.changeset),
:unsubscribe => @unsubscribe_url,
:archive => @changeset_url
)

View file

@ -118,7 +118,9 @@ OpenStreetMap::Application.routes.draw do
get "/relation/:id" => "relations#show", :id => /\d+/, :as => :relation
get "/relation/:id/history" => "old_relations#index", :id => /\d+/, :as => :relation_history
resources :old_relations, :path => "/relation/:id/history", :id => /\d+/, :version => /\d+/, :param => :version, :only => :show
resources :changesets, :path => "changeset", :id => /\d+/, :only => :show
resources :changesets, :path => "changeset", :id => /\d+/, :only => :show do
match :subscribe, :unsubscribe, :on => :member, :via => [:get, :post]
end
get "/changeset/:id/comments/feed" => "changeset_comments#index", :as => :changeset_comments_feed, :id => /\d*/, :defaults => { :format => "rss" }
resources :notes, :path => "note", :only => [:show, :new]
@ -127,8 +129,6 @@ OpenStreetMap::Application.routes.draw do
get "/user/:display_name/notes" => "notes#index", :as => :user_notes
get "/history/friends" => "changesets#index", :friends => true, :as => "friend_changesets", :defaults => { :format => :html }
get "/history/nearby" => "changesets#index", :nearby => true, :as => "nearby_changesets", :defaults => { :format => :html }
match "/changeset/:id/subscribe" => "changesets#subscribe", :via => [:get, :post], :as => "changeset_subscribe"
match "/changeset/:id/unsubscribe" => "changesets#unsubscribe", :via => [:get, :post], :as => "changeset_unsubscribe"
get "/browse/way/:id", :to => redirect(:path => "/way/%{id}")
get "/browse/way/:id/history", :to => redirect(:path => "/way/%{id}/history")

View file

@ -402,7 +402,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
user = create(:user)
other_user = create(:user)
changeset = create(:changeset, :user => user)
path = changeset_subscribe_path(changeset)
path = subscribe_changeset_path(changeset)
get path
assert_redirected_to login_path(:referer => path)
@ -423,7 +423,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
session_for(other_user)
assert_difference "changeset.subscribers.count", 1 do
post changeset_subscribe_path(changeset)
post subscribe_changeset_path(changeset)
end
assert_redirected_to changeset_path(changeset)
assert changeset.reload.subscribed?(other_user)
@ -437,20 +437,20 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
# not signed in
assert_no_difference "changeset.subscribers.count" do
post changeset_subscribe_path(changeset)
post subscribe_changeset_path(changeset)
end
assert_response :forbidden
session_for(other_user)
# bad diary id
post changeset_subscribe_path(999111)
post subscribe_changeset_path(999111)
assert_response :not_found
# trying to subscribe when already subscribed
post changeset_subscribe_path(changeset)
post subscribe_changeset_path(changeset)
assert_no_difference "changeset.subscribers.count" do
post changeset_subscribe_path(changeset)
post subscribe_changeset_path(changeset)
end
end
@ -458,7 +458,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
user = create(:user)
other_user = create(:user)
changeset = create(:changeset, :user => user)
path = changeset_unsubscribe_path(changeset)
path = unsubscribe_changeset_path(changeset)
get path
assert_redirected_to login_path(:referer => path)
@ -481,7 +481,7 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
session_for(other_user)
assert_difference "changeset.subscribers.count", -1 do
post changeset_unsubscribe_path(changeset)
post unsubscribe_changeset_path(changeset)
end
assert_redirected_to changeset_path(changeset)
assert_not changeset.reload.subscribed?(other_user)
@ -495,19 +495,19 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
# not signed in
assert_no_difference "changeset.subscribers.count" do
post changeset_unsubscribe_path(changeset)
post unsubscribe_changeset_path(changeset)
end
assert_response :forbidden
session_for(other_user)
# bad diary id
post changeset_unsubscribe_path(999111)
post unsubscribe_changeset_path(999111)
assert_response :not_found
# trying to unsubscribe when not subscribed
assert_no_difference "changeset.subscribers.count" do
post changeset_unsubscribe_path(changeset)
post unsubscribe_changeset_path(changeset)
end
end

View file

@ -68,4 +68,19 @@ class UserMailerTest < ActionMailer::TestCase
assert_select body, "a[href^='#{url}']"
assert_select body, "a[href='#{unsubscribe_url}']", :count => 1
end
def test_changeset_comment_notification
create(:language, :code => "en")
user = create(:user)
other_user = create(:user)
changeset = create(:changeset, :user => user)
changeset_comment = create(:changeset_comment, :changeset => changeset)
email = UserMailer.changeset_comment_notification(changeset_comment, other_user)
body = Rails::Dom::Testing.html_document_fragment.parse(email.html_part.body)
url = Rails.application.routes.url_helpers.changeset_url(changeset, :host => Settings.server_url, :protocol => Settings.server_protocol)
unsubscribe_url = Rails.application.routes.url_helpers.unsubscribe_changeset_url(changeset, :host => Settings.server_url, :protocol => Settings.server_protocol)
assert_select body, "a[href^='#{url}']"
assert_select body, "a[href='#{unsubscribe_url}']", :count => 1
end
end