Move mechanics of changeset subscriptions into the model

This commit is contained in:
Tom Hughes 2024-02-24 10:11:57 +00:00
parent f5aa031b58
commit 8e21e4e801
3 changed files with 30 additions and 5 deletions

View file

@ -44,7 +44,7 @@ module Api
cs.save_with_tags! cs.save_with_tags!
# Subscribe user to changeset comments # Subscribe user to changeset comments
cs.subscribers << current_user cs.subscribe(current_user)
render :plain => cs.id.to_s render :plain => cs.id.to_s
end end
@ -233,10 +233,10 @@ module Api
# Find the changeset and check it is valid # Find the changeset and check it is valid
changeset = Changeset.find(id) changeset = Changeset.find(id)
raise OSM::APIChangesetAlreadySubscribedError, changeset if changeset.subscribers.exists?(current_user.id) raise OSM::APIChangesetAlreadySubscribedError, changeset if changeset.subscribed?(current_user)
# Add the subscriber # Add the subscriber
changeset.subscribers << current_user changeset.subscribe(current_user)
# Return a copy of the updated changeset # Return a copy of the updated changeset
@changeset = changeset @changeset = changeset
@ -259,10 +259,10 @@ module Api
# Find the changeset and check it is valid # Find the changeset and check it is valid
changeset = Changeset.find(id) changeset = Changeset.find(id)
raise OSM::APIChangesetNotSubscribedError, changeset unless changeset.subscribers.exists?(current_user.id) raise OSM::APIChangesetNotSubscribedError, changeset unless changeset.subscribed?(current_user)
# Remove the subscriber # Remove the subscriber
changeset.subscribers.delete(current_user) changeset.unsubscribe(current_user)
# Return a copy of the updated changeset # Return a copy of the updated changeset
@changeset = changeset @changeset = changeset

View file

@ -213,4 +213,16 @@ class Changeset < ApplicationRecord
save_with_tags! save_with_tags!
end end
def subscribe(user)
subscribers << user
end
def unsubscribe(user)
subscribers.delete(user)
end
def subscribed?(user)
subscribers.exists?(user.id)
end
end end

View file

@ -71,4 +71,17 @@ class ChangesetTest < ActiveSupport::TestCase
Changeset.from_xml(xml, :create => true) Changeset.from_xml(xml, :create => true)
end end
end end
def test_subscription
changeset = create(:changeset)
user = create(:user)
assert_not changeset.subscribed?(user)
changeset.subscribe(user)
assert changeset.subscribed?(user)
changeset.unsubscribe(changeset.subscribers.first)
assert_not changeset.subscribed?(user)
end
end end