+
+ def test_destroy
+ user = create(:user)
+ auth_header = bearer_authorization_header user
+ other_user = create(:user)
+ note = create(:note_with_comments)
+ other_note = create(:note_with_comments)
+ create(:note_subscription, :user => user, :note => note)
+ create(:note_subscription, :user => other_user, :note => note)
+ create(:note_subscription, :user => user, :note => other_note)
+
+ assert_difference "NoteSubscription.count", -1 do
+ assert_difference "note.subscribers.count", -1 do
+ delete api_note_subscription_path(note), :headers => auth_header
+ assert_response :success
+ end
+ end
+ note.reload
+ assert_equal [other_user], note.subscribers
+ assert_equal [user], other_note.subscribers
+ end
+
+ def test_destroy_fail_anonymous
+ note = create(:note_with_comments)
+
+ delete api_note_subscription_path(note)
+ assert_response :unauthorized
+ end
+
+ def test_destroy_fail_no_scope
+ user = create(:user)
+ auth_header = bearer_authorization_header user, :scopes => %w[read_prefs]
+ note = create(:note_with_comments)
+ create(:note_subscription, :user => user, :note => note)
+
+ assert_no_difference "NoteSubscription.count" do
+ assert_no_difference "note.subscribers.count" do
+ delete api_note_subscription_path(note), :headers => auth_header
+ assert_response :forbidden
+ end
+ end
+ end
+
+ def test_destroy_fail_note_not_found
+ user = create(:user)
+ auth_header = bearer_authorization_header user
+
+ delete api_note_subscription_path(999111), :headers => auth_header
+ assert_response :not_found
+ assert_match "not found", @response.body
+ end
+
+ def test_destroy_fail_not_subscribed
+ user = create(:user)
+ auth_header = bearer_authorization_header user
+ note = create(:note_with_comments)
+
+ delete api_note_subscription_path(note), :headers => auth_header
+ assert_response :not_found
+ assert_match "not subscribed", @response.body
+ end