🐛 Fix bad error callback on nitrate checkout (#10886)

This commit is contained in:
Pablo Alba 2026-07-30 16:50:47 +02:00 committed by GitHub
parent 31ccfa546f
commit 370e91c3e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 37 additions and 21 deletions

View File

@ -112,20 +112,20 @@
(def nitrate-checkout-cancelled-token "nitrate-checkout-cancelled")
(defn build-nitrate-callback-urls
"Build the success/error/cancel callback URLs from a base URL by appending
a `subscription` query param identifying the outcome."
[base-url]
(let [build (fn [token]
(dom/append-query-param base-url :subscription token))]
{:success-callback (build "subscribed-to-penpot-nitrate")
:error-callback (build nitrate-checkout-error-token)
:finish-error-callback (build nitrate-checkout-finish-error-token)
:cancel-callback (build nitrate-checkout-cancelled-token)}))
"Build checkout callback URLs from base URLs by appending a `subscription`
query param identifying the outcome."
[base-url base-error-url]
(let [build (fn [url token]
(dom/append-query-param url :subscription token))]
{:success-callback (build base-url "subscribed-to-penpot-nitrate")
:error-callback (build base-error-url nitrate-checkout-error-token)
:finish-error-callback (build base-error-url nitrate-checkout-finish-error-token)
:cancel-callback (build base-url nitrate-checkout-cancelled-token)}))
(defn go-to-buy-nitrate-license
[subscription base-url event-origin subscription-mode subscription-start-origin]
[subscription base-url base-error-url event-origin subscription-mode subscription-start-origin]
(let [{:keys [success-callback error-callback finish-error-callback cancel-callback]}
(build-nitrate-callback-urls base-url)
(build-nitrate-callback-urls base-url base-error-url)
params {:subscription subscription
:callback success-callback
:error_callback error-callback

View File

@ -35,6 +35,7 @@
(dnt/go-to-buy-nitrate-license
"monthly"
dnt/go-to-ac-url
dnt/go-to-subscription-url
"dashboard:plan-confirmation-modal"
(if (:subscription profile) "paid" "trial")
subscription-start-origin)))

View File

@ -807,6 +807,7 @@
(dnt/go-to-buy-nitrate-license
"monthly"
(rt/get-current-href)
dnt/go-to-subscription-url
event-origin
(if nitrate-license "paid" "trial")
subscription-start-origin)))]

View File

@ -165,8 +165,8 @@
(t/deftest build-nitrate-callback-urls-preserves-hash-query
(t/testing "appends subscription to an existing query inside the hash route"
(let [callbacks (dnt/build-nitrate-callback-urls
"https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f")]
(let [base-url "https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f"
callbacks (dnt/build-nitrate-callback-urls base-url base-url)]
(t/is (= "https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f&subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks)))
(t/is (= "https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f&subscription=nitrate-checkout-error"
@ -178,25 +178,39 @@
(t/deftest build-nitrate-callback-urls-adds-hash-query-when-missing
(t/testing "adds a hash query when the route has no query string yet"
(let [callbacks (dnt/build-nitrate-callback-urls
"https://localhost:3449/#/settings/subscriptions")]
(let [base-url "https://localhost:3449/#/settings/subscriptions"
callbacks (dnt/build-nitrate-callback-urls base-url base-url)]
(t/is (= "https://localhost:3449/#/settings/subscriptions?subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks))))))
(t/deftest build-nitrate-callback-urls-adds-regular-query-without-hash
(t/testing "falls back to the regular URL query when there is no hash route"
(let [callbacks (dnt/build-nitrate-callback-urls
"https://localhost:3449/admin-console/licenses/billing?foo=bar")]
(let [base-url "https://localhost:3449/admin-console/licenses/billing?foo=bar"
callbacks (dnt/build-nitrate-callback-urls base-url base-url)]
(t/is (= "https://localhost:3449/admin-console/licenses/billing?foo=bar&subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks))))))
(t/deftest build-nitrate-callback-urls-accepts-uri-object
(t/testing "accepts a URI object as base url (used by the nitrate-form modal)"
(let [callbacks (dnt/build-nitrate-callback-urls
(u/uri "https://localhost:3449/#/settings/subscriptions"))]
(let [base-url (u/uri "https://localhost:3449/#/settings/subscriptions")
callbacks (dnt/build-nitrate-callback-urls base-url base-url)]
(t/is (= "https://localhost:3449/#/settings/subscriptions?subscription=nitrate-checkout-error"
(:error-callback callbacks))))))
(t/deftest build-nitrate-callback-urls-uses-separate-error-base
(t/testing "error callbacks use base-error-url while success/cancel use base-url"
(let [callbacks (dnt/build-nitrate-callback-urls
"https://localhost:3449/#/dashboard/recent"
"https://localhost:3449/#/settings/subscriptions")]
(t/is (= "https://localhost:3449/#/dashboard/recent?subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks)))
(t/is (= "https://localhost:3449/#/settings/subscriptions?subscription=nitrate-checkout-error"
(:error-callback callbacks)))
(t/is (= "https://localhost:3449/#/settings/subscriptions?subscription=nitrate-checkout-finish-error"
(:finish-error-callback callbacks)))
(t/is (= "https://localhost:3449/#/dashboard/recent?subscription=nitrate-checkout-cancelled"
(:cancel-callback callbacks))))))
(t/deftest go-to-subscription-url-is-a-string
(t/testing "must be a string so licenses/billing?callback=... survives query encoding"
(t/is (string? dnt/go-to-subscription-url))

View File

@ -6026,8 +6026,8 @@ msgstr "Payment was not completed. Try again whenever you're ready."
#: src/app/main/ui/settings/subscription.cljs:427
msgid "subscription.error.nitrate.checkout-failed"
msgstr ""
"We couldn't start the checkout. Please try again. If the problem persists, "
"contact us: support@penpot.app."
"The payment was not completed. Please try again. "
"If the problem persists, contact us: support@penpot.app."
#: src/app/main/ui/settings/subscription.cljs:407
msgid "subscription.error.nitrate.checkout-finish-failed"