diff --git a/app/controllers/user_upgrades_controller.rb b/app/controllers/user_upgrades_controller.rb
index e0e86e566..0a25e49fc 100644
--- a/app/controllers/user_upgrades_controller.rb
+++ b/app/controllers/user_upgrades_controller.rb
@@ -4,7 +4,8 @@ class UserUpgradesController < ApplicationController
def create
@user_upgrade = authorize UserUpgrade.create(recipient: recipient, purchaser: CurrentUser.user, status: "pending", upgrade_type: params[:upgrade_type])
@country = params[:country] || CurrentUser.country || "US"
- @checkout = @user_upgrade.create_checkout!(country: @country)
+ @allow_promotion_codes = params[:promo].to_s.truthy?
+ @checkout = @user_upgrade.create_checkout!(country: @country, allow_promotion_codes: @allow_promotion_codes)
respond_with(@user_upgrade)
end
diff --git a/app/models/user_upgrade.rb b/app/models/user_upgrade.rb
index 48083c6d4..de81fa214 100644
--- a/app/models/user_upgrade.rb
+++ b/app/models/user_upgrade.rb
@@ -148,7 +148,7 @@ class UserUpgrade < ApplicationRecord
end
concerning :StripeMethods do
- def create_checkout!(country: "US")
+ def create_checkout!(country: "US", allow_promotion_codes: false)
methods = payment_method_types(country)
currency = preferred_currency(country)
price_id = upgrade_price_id(currency)
@@ -160,6 +160,7 @@ class UserUpgrade < ApplicationRecord
client_reference_id: "user_upgrade_#{id}",
customer_email: purchaser.email_address&.address,
payment_method_types: methods,
+ allow_promotion_codes: allow_promotion_codes,
line_items: [{
price: price_id,
quantity: 1,
diff --git a/app/views/user_upgrades/new.html.erb b/app/views/user_upgrades/new.html.erb
index 8766dfc83..3bdb26876 100644
--- a/app/views/user_upgrades/new.html.erb
+++ b/app/views/user_upgrades/new.html.erb
@@ -102,12 +102,12 @@
<%= link_to "Get #{Danbooru.config.canonical_app_name} Platinum", login_path(url: new_user_upgrade_path), class: "login-button" %> |
<% elsif @recipient.level == User::Levels::MEMBER %>
|
- <%= button_to "Get #{Danbooru.config.canonical_app_name} Gold", user_upgrades_path(user_id: @recipient.id, upgrade_type: "gold", country: params[:country]), remote: true, disable_with: "Redirecting..." %> |
- <%= button_to "Get #{Danbooru.config.canonical_app_name} Platinum", user_upgrades_path(user_id: @recipient.id, upgrade_type: "platinum", country: params[:country]), remote: true, disable_with: "Redirecting..." %> |
+ <%= button_to "Get #{Danbooru.config.canonical_app_name} Gold", user_upgrades_path(user_id: @recipient.id, upgrade_type: "gold", country: params[:country], promo: params[:promo]), remote: true, disable_with: "Redirecting..." %> |
+ <%= button_to "Get #{Danbooru.config.canonical_app_name} Platinum", user_upgrades_path(user_id: @recipient.id, upgrade_type: "platinum", country: params[:country], promo: params[:promo]), remote: true, disable_with: "Redirecting..." %> |
<% elsif @recipient.level == User::Levels::GOLD %>
|
<%= button_to "Get #{Danbooru.config.canonical_app_name} Gold", nil, disabled: true %> |
- <%= button_to "Get #{Danbooru.config.canonical_app_name} Platinum", user_upgrades_path(user_id: @recipient.id, upgrade_type: "gold_to_platinum", country: params[:country]), remote: true, disable_with: "Redirecting..." %> |
+ <%= button_to "Get #{Danbooru.config.canonical_app_name} Platinum", user_upgrades_path(user_id: @recipient.id, upgrade_type: "gold_to_platinum", country: params[:country], promo: params[:promo]), remote: true, disable_with: "Redirecting..." %> |
<% else %>
|
<%= button_to "Get #{Danbooru.config.canonical_app_name} Gold", nil, disabled: true %> |
diff --git a/test/functional/user_upgrades_controller_test.rb b/test/functional/user_upgrades_controller_test.rb
index 8075eb7e0..d396c0d1c 100644
--- a/test/functional/user_upgrades_controller_test.rb
+++ b/test/functional/user_upgrades_controller_test.rb
@@ -38,6 +38,18 @@ class UserUpgradesControllerTest < ActionDispatch::IntegrationTest
assert_response :success
end
+ should "render for the country param" do
+ get new_user_upgrade_path(country: "DE")
+
+ assert_response :success
+ end
+
+ should "render for the promo param" do
+ get new_user_upgrade_path(promo: "true")
+
+ assert_response :success
+ end
+
should "render for an anonymous user" do
get new_user_upgrade_path