Prevent duplicate Stripe invoice queue submissions

This commit is contained in:
Jeppe B
2026-06-02 00:29:53 +02:00
parent 222237ab34
commit 7ab12a3fff
2 changed files with 15 additions and 1 deletions
@@ -34,6 +34,7 @@ const showStripeStatusSummary = computed(() => isPaid.value && (isDraft.value ||
const isStripeTransferBusy = computed(() => stripeTransferQueue.disableSubmit.value);
const isStripeTransferQueuedOrProcessing = computed(() => stripeTransferQueue.isQueuedOrProcessing.value);
const isStripeTransferCompleted = computed(() => stripeTransferQueue.isCompleted.value);
const canBookStripeInvoice = computed(() => !isStripeTransferBusy.value && !isStripeTransferCompleted.value);
const isStripeTransferFailed = computed(() => stripeTransferQueue.isFailed.value);
const stripeTransferProgressPercent = computed(() => stripeTransferQueue.progressPercent.value);
const stripeTransferProgressMessage = computed(() => stripeTransferQueue.progressMessage.value);
@@ -61,6 +62,10 @@ const stripeTransferResultMessage = computed(() => {
});
const onBookStripeInvoice = async () => {
if (!canBookStripeInvoice.value) {
return;
}
try {
await stripeTransferQueue.enqueue({});
} catch (error) {
@@ -324,7 +329,7 @@ const stripePayment = computed(() => {
<div class="buttons">
<button
class="button is-small is-light"
:disabled="isStripeTransferBusy"
:disabled="!canBookStripeInvoice"
data-testid="collected-stripe-book-invoice"
@click="onBookStripeInvoice"
>
@@ -24,8 +24,17 @@ describe("collected invoice stripe queue wiring", () => {
it("renders progress and retry states for queued transfers", () => {
expect(stripeManageSource).toContain("isStripeTransferQueuedOrProcessing");
expect(stripeManageSource).toContain("isStripeTransferFailed");
expect(stripeManageSource).toContain(
"const canBookStripeInvoice = computed(() => !isStripeTransferBusy.value && !isStripeTransferCompleted.value);"
);
expect(stripeManageSource).toContain('data-testid="collected-stripe-progress"');
expect(stripeManageSource).toContain('data-testid="collected-stripe-retry"');
expect(stripeManageSource).toContain('data-testid="collected-stripe-book-invoice"');
});
it("prevents duplicate queue submissions after a completed Stripe transfer", () => {
expect(stripeManageSource).toContain("if (!canBookStripeInvoice.value)");
expect(stripeManageSource).toContain(':disabled="!canBookStripeInvoice"');
expect(stripeManageSource).toContain("isStripeTransferCompleted.value");
});
});