Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider c43f4cd3 rédigé par ThibG's avatar ThibG Validation de GitHub
Parcourir les fichiers

Fix not being able to unfavorite toots one has lost access to (#15192)

Fixes #15191
parent 8b8004a9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -5,7 +5,7 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController ...@@ -5,7 +5,7 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController
before_action -> { doorkeeper_authorize! :write, :'write:favourites' } before_action -> { doorkeeper_authorize! :write, :'write:favourites' }
before_action :require_user! before_action :require_user!
before_action :set_status before_action :set_status, only: [:create]
def create def create
FavouriteService.new.call(current_account, @status) FavouriteService.new.call(current_account, @status)
...@@ -13,8 +13,19 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController ...@@ -13,8 +13,19 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController
end end
def destroy def destroy
UnfavouriteWorker.perform_async(current_account.id, @status.id) fav = current_account.favourites.find_by(status_id: params[:status_id])
if fav
@status = fav.status
UnfavouriteWorker.perform_async(current_account.id, @status.id)
else
@status = Status.find(params[:status_id])
authorize @status, :show?
end
render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new([@status], current_account.id, favourites_map: { @status.id => false }) render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new([@status], current_account.id, favourites_map: { @status.id => false })
rescue Mastodon::NotPermittedError
not_found
end end
private private
......
...@@ -82,6 +82,31 @@ describe Api::V1::Statuses::FavouritesController do ...@@ -82,6 +82,31 @@ describe Api::V1::Statuses::FavouritesController do
end end
end end
context 'with public status when blocked by its author' do
let(:status) { Fabricate(:status) }
before do
FavouriteService.new.call(user.account, status)
status.account.block!(user.account)
post :destroy, params: { status_id: status.id }
end
it 'returns http success' do
expect(response).to have_http_status(200)
end
it 'updates the favourite attribute' do
expect(user.account.favourited?(status)).to be false
end
it 'returns json with updated attributes' do
hash_body = body_as_json
expect(hash_body[:id]).to eq status.id.to_s
expect(hash_body[:favourited]).to be false
end
end
context 'with private status that was not favourited' do context 'with private status that was not favourited' do
let(:status) { Fabricate(:status, visibility: :private) } let(:status) { Fabricate(:status, visibility: :private) }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter