🐛 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") (def nitrate-checkout-cancelled-token "nitrate-checkout-cancelled")
(defn build-nitrate-callback-urls (defn build-nitrate-callback-urls
"Build the success/error/cancel callback URLs from a base URL by appending "Build checkout callback URLs from base URLs by appending a `subscription`
a `subscription` query param identifying the outcome." query param identifying the outcome."
[base-url] [base-url base-error-url]
(let [build (fn [token] (let [build (fn [url token]
(dom/append-query-param base-url :subscription token))] (dom/append-query-param url :subscription token))]
{:success-callback (build "subscribed-to-penpot-nitrate") {:success-callback (build base-url "subscribed-to-penpot-nitrate")
:error-callback (build nitrate-checkout-error-token) :error-callback (build base-error-url nitrate-checkout-error-token)
:finish-error-callback (build nitrate-checkout-finish-error-token) :finish-error-callback (build base-error-url nitrate-checkout-finish-error-token)
:cancel-callback (build nitrate-checkout-cancelled-token)})) :cancel-callback (build base-url nitrate-checkout-cancelled-token)}))
(defn go-to-buy-nitrate-license (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]} (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 params {:subscription subscription
:callback success-callback :callback success-callback
:error_callback error-callback :error_callback error-callback

View File

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

View File

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

View File

@ -165,8 +165,8 @@
(t/deftest build-nitrate-callback-urls-preserves-hash-query (t/deftest build-nitrate-callback-urls-preserves-hash-query
(t/testing "appends subscription to an existing query inside the hash route" (t/testing "appends subscription to an existing query inside the hash route"
(let [callbacks (dnt/build-nitrate-callback-urls (let [base-url "https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f"
"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" (t/is (= "https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f&subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks))) (:success-callback callbacks)))
(t/is (= "https://localhost:3449/#/dashboard/recent?team-id=e6666530-0216-81c8-8007-f17d6087b74f&subscription=nitrate-checkout-error" (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/deftest build-nitrate-callback-urls-adds-hash-query-when-missing
(t/testing "adds a hash query when the route has no query string yet" (t/testing "adds a hash query when the route has no query string yet"
(let [callbacks (dnt/build-nitrate-callback-urls (let [base-url "https://localhost:3449/#/settings/subscriptions"
"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" (t/is (= "https://localhost:3449/#/settings/subscriptions?subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks)))))) (:success-callback callbacks))))))
(t/deftest build-nitrate-callback-urls-adds-regular-query-without-hash (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" (t/testing "falls back to the regular URL query when there is no hash route"
(let [callbacks (dnt/build-nitrate-callback-urls (let [base-url "https://localhost:3449/admin-console/licenses/billing?foo=bar"
"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" (t/is (= "https://localhost:3449/admin-console/licenses/billing?foo=bar&subscription=subscribed-to-penpot-nitrate"
(:success-callback callbacks)))))) (:success-callback callbacks))))))
(t/deftest build-nitrate-callback-urls-accepts-uri-object (t/deftest build-nitrate-callback-urls-accepts-uri-object
(t/testing "accepts a URI object as base url (used by the nitrate-form modal)" (t/testing "accepts a URI object as base url (used by the nitrate-form modal)"
(let [callbacks (dnt/build-nitrate-callback-urls (let [base-url (u/uri "https://localhost:3449/#/settings/subscriptions")
(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" (t/is (= "https://localhost:3449/#/settings/subscriptions?subscription=nitrate-checkout-error"
(:error-callback callbacks)))))) (: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/deftest go-to-subscription-url-is-a-string
(t/testing "must be a string so licenses/billing?callback=... survives query encoding" (t/testing "must be a string so licenses/billing?callback=... survives query encoding"
(t/is (string? dnt/go-to-subscription-url)) (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 #: src/app/main/ui/settings/subscription.cljs:427
msgid "subscription.error.nitrate.checkout-failed" msgid "subscription.error.nitrate.checkout-failed"
msgstr "" msgstr ""
"We couldn't start the checkout. Please try again. If the problem persists, " "The payment was not completed. Please try again. "
"contact us: support@penpot.app." "If the problem persists, contact us: support@penpot.app."
#: src/app/main/ui/settings/subscription.cljs:407 #: src/app/main/ui/settings/subscription.cljs:407
msgid "subscription.error.nitrate.checkout-finish-failed" msgid "subscription.error.nitrate.checkout-finish-failed"