FIX: problems with choosing favorite badges (#13731)

FIX: problems with choosing favorite badges (#13731)

diff --git a/app/controllers/user_badges_controller.rb b/app/controllers/user_badges_controller.rb
index ae67a4c..60b1275 100644
--- a/app/controllers/user_badges_controller.rb
+++ b/app/controllers/user_badges_controller.rb
@@ -109,10 +109,13 @@ class UserBadgesController < ApplicationController
       return render json: failed_json, status: 400
     end
 
+    new_is_favorite_value = !user_badge.is_favorite
     UserBadge
       .where(user_id: user_badge.user_id, badge_id: user_badge.badge_id)
-      .update(is_favorite: !user_badge.is_favorite)
+      .update_all(is_favorite: new_is_favorite_value)
     UserBadge.update_featured_ranks!(user_badge.user_id)
+
+    user_badge.is_favorite = new_is_favorite_value
     render_serialized(user_badge, DetailedUserBadgeSerializer, root: :user_badge)
   end
 
diff --git a/spec/requests/user_badges_controller_spec.rb b/spec/requests/user_badges_controller_spec.rb
index 42ea307..4c17ac2 100644
--- a/spec/requests/user_badges_controller_spec.rb
+++ b/spec/requests/user_badges_controller_spec.rb
@@ -294,20 +294,26 @@ describe UserBadgesController do
     it "favorites a badge" do
       sign_in(user)
       put "/user_badges/#{user_badge.id}/toggle_favorite.json"
+
       expect(response.status).to eq(200)
+      parsed = response.parsed_body
+      expect(parsed["user_badge"]["is_favorite"]).to eq(true)
 
       user_badge = UserBadge.find_by(user: user, badge: badge)
-      expect(user_badge.is_favorite).to be true
+      expect(user_badge.is_favorite).to eq(true)
     end
 
     it "unfavorites a badge" do
       sign_in(user)
       user_badge.toggle!(:is_favorite)
       put "/user_badges/#{user_badge.id}/toggle_favorite.json"
+
       expect(response.status).to eq(200)
+      parsed = response.parsed_body
+      expect(parsed["user_badge"]["is_favorite"]).to eq(false)
 
       user_badge = UserBadge.find_by(user: user, badge: badge)
-      expect(user_badge.is_favorite).to be false
+      expect(user_badge.is_favorite).to eq(false)
     end
 
     it "works with multiple grants" do
@@ -323,16 +329,22 @@ describe UserBadgesController do
 
       put "/user_badges/#{user_badge.id}/toggle_favorite.json"
       expect(response.status).to eq(200)
+      parsed = response.parsed_body
+      expect(parsed["user_badge"]["is_favorite"]).to eq(false)
       expect(user_badge.reload.is_favorite).to eq(false)
       expect(user_badge2.reload.is_favorite).to eq(false)
 
       put "/user_badges/#{user_badge.id}/toggle_favorite.json"
       expect(response.status).to eq(200)
+      parsed = response.parsed_body
+      expect(parsed["user_badge"]["is_favorite"]).to eq(true)
       expect(user_badge.reload.is_favorite).to eq(true)
       expect(user_badge2.reload.is_favorite).to eq(true)
 
       put "/user_badges/#{other_user_badge.id}/toggle_favorite.json"
       expect(response.status).to eq(200)
+      parsed = response.parsed_body
+      expect(parsed["user_badge"]["is_favorite"]).to eq(true)
       expect(other_user_badge.reload.is_favorite).to eq(true)
     end
   end

GitHub sha: 5cd447695e014d68ce3da58d45f42c8059b5438b

This commit appears in #13731 which was approved by eviltrout and tgxworld. It was merged by AndrewPrigorshnev.