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!
# Subscribe user to changeset comments
cs.subscribers << current_user
cs.subscribe(current_user)
render :plain => cs.id.to_s
end
@ -233,10 +233,10 @@ module Api
# Find the changeset and check it is valid
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
changeset.subscribers << current_user
changeset.subscribe(current_user)
# Return a copy of the updated changeset
@changeset = changeset
@ -259,10 +259,10 @@ module Api
# Find the changeset and check it is valid
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
changeset.subscribers.delete(current_user)
changeset.unsubscribe(current_user)
# Return a copy of the updated changeset
@changeset = changeset

View file

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

View file

@ -71,4 +71,17 @@ class ChangesetTest < ActiveSupport::TestCase
Changeset.from_xml(xml, :create => true)
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