mirror of
https://github.com/discourse/discourse.git
synced 2025-03-28 21:36:50 +08:00
FIX: simplify and improve choosing favorite badges (#13743)
* No need to return anything except a status code from the server * Switch a badge state before sending a request and then switch it back in case of an error
This commit is contained in:
parent
444e21b12d
commit
1cadae3879
@ -22,12 +22,14 @@ const UserBadge = EmberObject.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
favorite() {
|
favorite() {
|
||||||
return ajax(`/user_badges/${this.id}/toggle_favorite`, { type: "PUT" })
|
this.toggleProperty("is_favorite");
|
||||||
.then((json) => {
|
return ajax(`/user_badges/${this.id}/toggle_favorite`, {
|
||||||
this.set("is_favorite", json.user_badge.is_favorite);
|
type: "PUT",
|
||||||
return this;
|
}).catch((e) => {
|
||||||
})
|
// something went wrong, switch the UI back:
|
||||||
.catch(popupAjaxError);
|
this.toggleProperty("is_favorite");
|
||||||
|
popupAjaxError(e);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -109,14 +109,10 @@ class UserBadgesController < ApplicationController
|
|||||||
return render json: failed_json, status: 400
|
return render json: failed_json, status: 400
|
||||||
end
|
end
|
||||||
|
|
||||||
new_is_favorite_value = !user_badge.is_favorite
|
|
||||||
UserBadge
|
UserBadge
|
||||||
.where(user_id: user_badge.user_id, badge_id: user_badge.badge_id)
|
.where(user_id: user_badge.user_id, badge_id: user_badge.badge_id)
|
||||||
.update_all(is_favorite: new_is_favorite_value)
|
.update_all(is_favorite: !user_badge.is_favorite)
|
||||||
UserBadge.update_featured_ranks!(user_badge.user_id)
|
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
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -288,17 +288,14 @@ describe UserBadgesController do
|
|||||||
SiteSetting.max_favorite_badges = 3
|
SiteSetting.max_favorite_badges = 3
|
||||||
|
|
||||||
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(204)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "favorites a badge" do
|
it "favorites a badge" do
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
||||||
|
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(204)
|
||||||
parsed = response.parsed_body
|
|
||||||
expect(parsed["user_badge"]["is_favorite"]).to eq(true)
|
|
||||||
|
|
||||||
user_badge = UserBadge.find_by(user: user, badge: badge)
|
user_badge = UserBadge.find_by(user: user, badge: badge)
|
||||||
expect(user_badge.is_favorite).to eq(true)
|
expect(user_badge.is_favorite).to eq(true)
|
||||||
end
|
end
|
||||||
@ -308,10 +305,7 @@ describe UserBadgesController do
|
|||||||
user_badge.toggle!(:is_favorite)
|
user_badge.toggle!(:is_favorite)
|
||||||
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
||||||
|
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(204)
|
||||||
parsed = response.parsed_body
|
|
||||||
expect(parsed["user_badge"]["is_favorite"]).to eq(false)
|
|
||||||
|
|
||||||
user_badge = UserBadge.find_by(user: user, badge: badge)
|
user_badge = UserBadge.find_by(user: user, badge: badge)
|
||||||
expect(user_badge.is_favorite).to eq(false)
|
expect(user_badge.is_favorite).to eq(false)
|
||||||
end
|
end
|
||||||
@ -328,23 +322,17 @@ describe UserBadgesController do
|
|||||||
other_user_badge = UserBadge.create(badge: other_badge, user: user, granted_by: Discourse.system_user, granted_at: Time.now)
|
other_user_badge = UserBadge.create(badge: other_badge, user: user, granted_by: Discourse.system_user, granted_at: Time.now)
|
||||||
|
|
||||||
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(204)
|
||||||
parsed = response.parsed_body
|
|
||||||
expect(parsed["user_badge"]["is_favorite"]).to eq(false)
|
|
||||||
expect(user_badge.reload.is_favorite).to eq(false)
|
expect(user_badge.reload.is_favorite).to eq(false)
|
||||||
expect(user_badge2.reload.is_favorite).to eq(false)
|
expect(user_badge2.reload.is_favorite).to eq(false)
|
||||||
|
|
||||||
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
put "/user_badges/#{user_badge.id}/toggle_favorite.json"
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(204)
|
||||||
parsed = response.parsed_body
|
|
||||||
expect(parsed["user_badge"]["is_favorite"]).to eq(true)
|
|
||||||
expect(user_badge.reload.is_favorite).to eq(true)
|
expect(user_badge.reload.is_favorite).to eq(true)
|
||||||
expect(user_badge2.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"
|
put "/user_badges/#{other_user_badge.id}/toggle_favorite.json"
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(204)
|
||||||
parsed = response.parsed_body
|
|
||||||
expect(parsed["user_badge"]["is_favorite"]).to eq(true)
|
|
||||||
expect(other_user_badge.reload.is_favorite).to eq(true)
|
expect(other_user_badge.reload.is_favorite).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user