From 40b989ca6200083b31f1b311fd4206fecea09cd9 Mon Sep 17 00:00:00 2001
From: Anna Buianova
- You also get 5 new credits to use for community listings
- if you have anything you'd like to promote. 🎉
-
- More information about listings -
+ + <% unless @badge.credits_awarded.zero? %> +
+ You also get <%= @badge.credits_awarded %> new credits to use for community listings
+ if you have anything you'd like to promote. 🎉
+
+ More information about listings +
+ <% end %> diff --git a/app/views/mailers/notify_mailer/new_badge_email.text.erb b/app/views/mailers/notify_mailer/new_badge_email.text.erb index 998281ffb..2909df791 100644 --- a/app/views/mailers/notify_mailer/new_badge_email.text.erb +++ b/app/views/mailers/notify_mailer/new_badge_email.text.erb @@ -6,8 +6,10 @@ Congratulations, <%= @user.name %>! You got the <%= @badge.title %> badge! Be su <%= user_url(@user) %> -You also get 5 new credits to use for community listings if you have anything you'd like to promote: <%= listings_url %> +<% unless @badge.credits_awarded.zero? %> + You also get <%= @badge.credits_awarded %> new credits to use for community listings if you have anything you'd like to promote: <%= listings_url %> -To manage your credits: visit: <%= credits_url %> + To manage your credits visit: <%= credits_url %> -For more information about listings, visit: <%= app_url(about_listings_url) %> + For more information about listings, visit: <%= app_url(about_listings_url) %> +<% end %> diff --git a/app/views/notifications/_badgeachievement.html.erb b/app/views/notifications/_badgeachievement.html.erb index 153277ab3..5c7ccc080 100644 --- a/app/views/notifications/_badgeachievement.html.erb +++ b/app/views/notifications/_badgeachievement.html.erb @@ -9,10 +9,12 @@<%= json_data["badge_achievement"]["rewarding_context_message"].html_safe %>
+<%= json_data["badge_achievement"]["rewarding_context_message"].to_s.html_safe %>
" class="crayons-btn w-100 m:w-50">Visit your profile
-You also get 5 new credits to use for community listings if you have anything you'd like to promote. 🎉
-More information about listings
+ <% unless json_data["badge_achievement"]["badge"]["credits_awarded"].zero? %> +You also get <%= json_data["badge_achievement"]["badge"]["credits_awarded"] %> new credits to use for community listings if you have anything you'd like to promote. 🎉
+ + <% end %> diff --git a/spec/mailers/notify_mailer_spec.rb b/spec/mailers/notify_mailer_spec.rb index 273a05c49..7bfc62624 100644 --- a/spec/mailers/notify_mailer_spec.rb +++ b/spec/mailers/notify_mailer_spec.rb @@ -155,6 +155,10 @@ RSpec.describe NotifyMailer, type: :mailer do let(:badge_achievement) { create_badge_achievement(user, badge, user2) } let(:email) { described_class.with(badge_achievement: badge_achievement).new_badge_email } + let(:badge_with_credits) { create(:badge, credits_awarded: 7) } + let(:badge_achievement_with_credits) { create_badge_achievement(user, badge_with_credits, user2) } + let(:email_with_credits) { described_class.with(badge_achievement: badge_achievement_with_credits).new_badge_email } + def create_badge_achievement(user, badge, rewarder) BadgeAchievement.create( user: user, @@ -178,7 +182,47 @@ RSpec.describe NotifyMailer, type: :mailer do expect(email.to).to eq([user.email]) end - context "when rendering the HTML email" do + context "when rendering the HTML email for badge with credits" do + it "includes the listings URL" do + expect(email_with_credits.html_part.body).to include( + CGI.escape( + Rails.application.routes.url_helpers.listings_url(host: SiteConfig.app_domain), + ), + ) + end + + it "includes the about listings URL" do + expect(email_with_credits.html_part.body).to include( + CGI.escape(Rails.application.routes.url_helpers.about_listings_url(host: SiteConfig.app_domain)), + ) + end + + it "includes number of credits" do + expect(email_with_credits.html_part.body).to include("7 new credits") + end + end + + context "when rendering the text email for badge with credits" do + it "includes the listings URL" do + expect(email_with_credits.text_part.body).not_to include( + CGI.escape( + Rails.application.routes.url_helpers.listings_url(host: SiteConfig.app_domain), + ), + ) + end + + it "includes the about listings URL" do + expect(email_with_credits.text_part.body).not_to include( + CGI.escape(Rails.application.routes.url_helpers.about_listings_url(host: SiteConfig.app_domain)), + ) + end + + it "includes number of credits" do + expect(email_with_credits.text_part.body).to include("7 new credits") + end + end + + context "when rendering the HTML email for badge w/o credits" do it "includes the tracking pixel" do expect(email.html_part.body).to include("open.gif") end @@ -193,16 +237,16 @@ RSpec.describe NotifyMailer, type: :mailer do expect(email.html_part.body).to include(CGI.escape(URL.user(user))) end - it "includes the listings URL" do - expect(email.html_part.body).to include( + it "doesn't include the listings URL" do + expect(email.html_part.body).not_to include( CGI.escape( Rails.application.routes.url_helpers.listings_url(host: SiteConfig.app_domain), ), ) end - it "includes the about listings URL" do - expect(email.html_part.body).to include( + it "doesn't include the about listings URL" do + expect(email.html_part.body).not_to include( CGI.escape(Rails.application.routes.url_helpers.about_listings_url(host: SiteConfig.app_domain)), ) end @@ -232,14 +276,14 @@ RSpec.describe NotifyMailer, type: :mailer do expect(email.text_part.body).to include(URL.user(user)) end - it "includes the listings URL" do - expect(email.text_part.body).to include( + it "doesn't include the listings URL" do + expect(email.text_part.body).not_to include( Rails.application.routes.url_helpers.listings_url(host: SiteConfig.app_domain), ) end - it "includes the about listings URL" do - expect(email.text_part.body).to include( + it "doesn't include the about listings URL" do + expect(email.text_part.body).not_to include( Rails.application.routes.url_helpers.about_listings_url(host: SiteConfig.app_domain), ) end diff --git a/spec/models/badge_achievement_spec.rb b/spec/models/badge_achievement_spec.rb index b34130c85..9abbb886d 100644 --- a/spec/models/badge_achievement_spec.rb +++ b/spec/models/badge_achievement_spec.rb @@ -1,7 +1,10 @@ require "rails_helper" RSpec.describe BadgeAchievement, type: :model do - let(:achievement) { create(:badge_achievement) } + let(:badge_with_credits) { create(:badge, credits_awarded: 10) } + let(:badge) { create(:badge, credits_awarded: 0) } + let(:achievement) { create(:badge_achievement, badge: badge) } + let(:credits_achievement) { create(:badge_achievement, badge: badge_with_credits) } describe "validations" do describe "builtin validations" do @@ -18,8 +21,12 @@ RSpec.describe BadgeAchievement, type: :model do expect(achievement.rewarding_context_message).to include("") end - it "awards credits after create" do - expect(achievement.user.credits.size).to eq(5) + it "doesn't award credits if credits_awarded is zero" do + expect(achievement.user.credits.size).to eq(0) + end + + it "awards credits after create if credits_awarded exist" do + expect(credits_achievement.user.credits.size).to eq(10) end it "notifies recipients after commit" do diff --git a/spec/requests/admin/badges_spec.rb b/spec/requests/admin/badges_spec.rb index 30099187e..31688d386 100644 --- a/spec/requests/admin/badges_spec.rb +++ b/spec/requests/admin/badges_spec.rb @@ -10,6 +10,7 @@ RSpec.describe "/admin/badges", type: :request do title: "Hello, world!", slug: "greeting-badge", description: "Awarded to welcoming users", + credits_awarded: 10, badge_image: Rack::Test::UploadedFile.new("spec/support/fixtures/images/image1.jpeg", "image/jpeg") } } @@ -39,5 +40,11 @@ RSpec.describe "/admin/badges", type: :request do patch "/admin/badges/#{badge.id}", params: params end.to change { badge.reload.title }.to("Hello, world!") end + + it "successfully updates badge's credits_awarded" do + expect do + patch "/admin/badges/#{badge.id}", params: params + end.to change { badge.reload.credits_awarded }.to(10) + end end end diff --git a/spec/requests/notifications_spec.rb b/spec/requests/notifications_spec.rb index 617708f43..f2ae0ee78 100644 --- a/spec/requests/notifications_spec.rb +++ b/spec/requests/notifications_spec.rb @@ -590,10 +590,10 @@ RSpec.describe "NotificationsIndex", type: :request do end end - context "when a user has a new badge notification" do + context "when a user has a new badge notification w/o credits" do before do sign_in user - badge = create(:badge) + badge = create(:badge, credits_awarded: 0) badge_achievement = create(:badge_achievement, user: user, badge: badge) sidekiq_perform_enqueued_jobs do Notification.send_new_badge_achievement_notification(badge_achievement) @@ -623,6 +623,26 @@ RSpec.describe "NotificationsIndex", type: :request do def renders_visit_profile_button expect(response.body).to include "Visit your profile" end + + it "has no information about credits" do + expect(response.body).not_to include "new credits" + end + end + + context "when a user has a new badge notification with credits" do + before do + sign_in user + badge = create(:badge, credits_awarded: 11) + badge_achievement = create(:badge_achievement, user: user, badge: badge) + sidekiq_perform_enqueued_jobs do + Notification.send_new_badge_achievement_notification(badge_achievement) + end + get "/notifications" + end + + it "renders information about credits" do + expect(response.body).to include "11 new credits" + end end context "when a user has a new mention notification" do diff --git a/spec/services/notifications/new_badge_achievement/send_spec.rb b/spec/services/notifications/new_badge_achievement/send_spec.rb index 38071e404..3a80acc06 100644 --- a/spec/services/notifications/new_badge_achievement/send_spec.rb +++ b/spec/services/notifications/new_badge_achievement/send_spec.rb @@ -1,7 +1,8 @@ require "rails_helper" RSpec.describe Notifications::NewBadgeAchievement::Send, type: :service do - let(:badge_achievement) { create(:badge_achievement) } + let(:badge) { create(:badge, credits_awarded: 7) } + let(:badge_achievement) { create(:badge_achievement, badge: badge) } let(:blank_badge_achievement) { create(:badge_achievement, rewarding_context_message: nil) } def expected_json_data(badge_achievement) @@ -13,7 +14,8 @@ RSpec.describe Notifications::NewBadgeAchievement::Send, type: :service do badge: { title: badge_achievement.badge.title, description: badge_achievement.badge.description, - badge_image_url: badge_achievement.badge.badge_image_url + badge_image_url: badge_achievement.badge.badge_image_url, + credits_awarded: badge_achievement.badge.credits_awarded } } }.to_json