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