FIX: batch badge assigner was not including full info in notification
(missing drilldown link in notification)
This commit is contained in:
parent
8772ba2f80
commit
4099823efe
2 changed files with 25 additions and 4 deletions
|
@ -44,7 +44,11 @@ class BadgeGranter
|
||||||
I18n.with_locale(@user.effective_locale) do
|
I18n.with_locale(@user.effective_locale) do
|
||||||
notification = @user.notifications.create(
|
notification = @user.notifications.create(
|
||||||
notification_type: Notification.types[:granted_badge],
|
notification_type: Notification.types[:granted_badge],
|
||||||
data: { badge_id: @badge.id, badge_name: @badge.display_name, badge_slug: @badge.slug, username: @user.username}.to_json)
|
data: { badge_id: @badge.id,
|
||||||
|
badge_name: @badge.display_name,
|
||||||
|
badge_slug: @badge.slug,
|
||||||
|
username: @user.username}.to_json
|
||||||
|
)
|
||||||
user_badge.update_attributes notification_id: notification.id
|
user_badge.update_attributes notification_id: notification.id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -255,7 +259,8 @@ class BadgeGranter
|
||||||
multiple_grant: true # cheat here, cause we only run on backfill and are deleting
|
multiple_grant: true # cheat here, cause we only run on backfill and are deleting
|
||||||
) if badge.auto_revoke && full_backfill
|
) if badge.auto_revoke && full_backfill
|
||||||
|
|
||||||
sql = "INSERT INTO user_badges(badge_id, user_id, granted_at, granted_by_id, post_id)
|
sql = " WITH w as (
|
||||||
|
INSERT INTO user_badges(badge_id, user_id, granted_at, granted_by_id, post_id)
|
||||||
SELECT :id, q.user_id, q.granted_at, -1, #{post_id_field}
|
SELECT :id, q.user_id, q.granted_at, -1, #{post_id_field}
|
||||||
FROM ( #{badge.query} ) q
|
FROM ( #{badge.query} ) q
|
||||||
LEFT JOIN user_badges ub ON
|
LEFT JOIN user_badges ub ON
|
||||||
|
@ -263,6 +268,9 @@ class BadgeGranter
|
||||||
#{post_clause}
|
#{post_clause}
|
||||||
/*where*/
|
/*where*/
|
||||||
RETURNING id, user_id, granted_at
|
RETURNING id, user_id, granted_at
|
||||||
|
)
|
||||||
|
select w.*, username FROM w
|
||||||
|
JOIN users u on u.id = w.user_id
|
||||||
"
|
"
|
||||||
|
|
||||||
builder = SqlBuilder.new(sql)
|
builder = SqlBuilder.new(sql)
|
||||||
|
@ -295,7 +303,12 @@ class BadgeGranter
|
||||||
notification = Notification.create!(
|
notification = Notification.create!(
|
||||||
user_id: row.user_id,
|
user_id: row.user_id,
|
||||||
notification_type: Notification.types[:granted_badge],
|
notification_type: Notification.types[:granted_badge],
|
||||||
data: { badge_id: badge.id, badge_name: badge.name }.to_json )
|
data: {
|
||||||
|
badge_id: badge.id,
|
||||||
|
badge_name: badge.name,
|
||||||
|
badge_slug: badge.slug,
|
||||||
|
username: row.username
|
||||||
|
}.to_json )
|
||||||
|
|
||||||
Badge.exec_sql("UPDATE user_badges SET notification_id = :notification_id WHERE id = :id",
|
Badge.exec_sql("UPDATE user_badges SET notification_id = :notification_id WHERE id = :id",
|
||||||
notification_id: notification.id,
|
notification_id: notification.id,
|
||||||
|
|
|
@ -72,10 +72,12 @@ describe BadgeGranter do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should grant missing badges' do
|
it 'should grant missing badges' do
|
||||||
|
good_topic = Badge.find(Badge::GoodTopic)
|
||||||
|
|
||||||
post = Fabricate(:post, like_count: 30)
|
post = Fabricate(:post, like_count: 30)
|
||||||
2.times {
|
2.times {
|
||||||
BadgeGranter.backfill(Badge.find(Badge::NiceTopic), post_ids: [post.id])
|
BadgeGranter.backfill(Badge.find(Badge::NiceTopic), post_ids: [post.id])
|
||||||
BadgeGranter.backfill(Badge.find(Badge::GoodTopic))
|
BadgeGranter.backfill(good_topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO add welcome
|
# TODO add welcome
|
||||||
|
@ -83,6 +85,12 @@ describe BadgeGranter do
|
||||||
|
|
||||||
expect(post.user.notifications.count).to eq(2)
|
expect(post.user.notifications.count).to eq(2)
|
||||||
|
|
||||||
|
notification = post.user.notifications.last
|
||||||
|
data = notification.data_hash
|
||||||
|
expect(data["badge_id"]).to eq(good_topic.id)
|
||||||
|
expect(data["badge_slug"]).to eq(good_topic.slug)
|
||||||
|
expect(data["username"]).to eq(post.user.username)
|
||||||
|
|
||||||
expect(Badge.find(Badge::NiceTopic).grant_count).to eq(1)
|
expect(Badge.find(Badge::NiceTopic).grant_count).to eq(1)
|
||||||
expect(Badge.find(Badge::GoodTopic).grant_count).to eq(1)
|
expect(Badge.find(Badge::GoodTopic).grant_count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
Reference in a new issue