From 6fe1ffe6652c6b0f4107ac7eb565ef4354dea5fa Mon Sep 17 00:00:00 2001 From: Darren Ackers Date: Wed, 30 Aug 2023 20:34:30 +0100 Subject: [PATCH] chore: run webhook cleanup --- .../functions/__tests__/helpers/utils.ts | 38 +++++++++++++------ .../functions/__tests__/helpers/webhooks.ts | 12 ++++-- .../functions/__tests__/run-script.ts | 3 ++ 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/firestore-stripe-payments/functions/__tests__/helpers/utils.ts b/firestore-stripe-payments/functions/__tests__/helpers/utils.ts index bf2ef4d4..53c76210 100644 --- a/firestore-stripe-payments/functions/__tests__/helpers/utils.ts +++ b/firestore-stripe-payments/functions/__tests__/helpers/utils.ts @@ -78,12 +78,15 @@ export const waitForDocumentUpdate = ( export const waitForDocumentToExistInCollection = ( query: Query, - field: string | number, + field: string, value: any, - timeout: number = 20_000 + timeout: number = 120000 ): Promise => { return new Promise((resolve, reject) => { let timedOut = false; + + let unsubscribe: () => void; // Declare unsubscribe here + const timer = setTimeout(() => { timedOut = true; reject( @@ -91,21 +94,32 @@ export const waitForDocumentToExistInCollection = ( `Timeout waiting for firestore document to exist with field ${field} in collection` ) ); + if (unsubscribe) { + unsubscribe(); // Unsubscribe when timed out + } }, timeout); - const unsubscribe = query.onSnapshot(async (snapshot) => { - const docs = snapshot.docChanges(); + unsubscribe = query.onSnapshot(async (snapshot) => { + try { + const docs = snapshot.docChanges(); - const record: DocumentData = docs.filter( - ($) => $.doc.data()[field] === value - )[0]; + const record: DocumentData = docs.filter( + ($) => $.doc.data()[field] === value + )[0]; - if (record) { - unsubscribe(); - if (!timedOut) { - clearTimeout(timer); - resolve(record); + if (record) { + unsubscribe(); + if (!timedOut) { + clearTimeout(timer); + resolve(record); + } + } + } catch (error) { + if (unsubscribe) { + unsubscribe(); // Unsubscribe on error } + console.log('Error: ', error); + reject(error); } }); }); diff --git a/firestore-stripe-payments/functions/__tests__/helpers/webhooks.ts b/firestore-stripe-payments/functions/__tests__/helpers/webhooks.ts index 1c77bd11..e59facad 100644 --- a/firestore-stripe-payments/functions/__tests__/helpers/webhooks.ts +++ b/firestore-stripe-payments/functions/__tests__/helpers/webhooks.ts @@ -39,14 +39,20 @@ export const clearWebhooks = async (id) => { }; export const clearAllWebhooks = async () => { + console.log('Step 1 >>>>>'); const stripe = require('stripe')(process.env.STRIPE_API_KEY); + console.log('Step 2 >>>>>'); const webhooks = await stripe.webhookEndpoints.list(); + console.log('Step 3 >>>>>'); + + /** Log how weekbhooks have been found */ + console.log('Found webhooks: ', webhooks.data.length); + for await (const webhook of webhooks.data) { - if (webhook.url.includes('ngrok.io')) { - await stripe.webhookEndpoints.del(webhook.id); - } + console.log('Deleting webhook: ', webhook.id); + await stripe.webhookEndpoints.del(webhook.id); } return Promise.resolve(); diff --git a/firestore-stripe-payments/functions/__tests__/run-script.ts b/firestore-stripe-payments/functions/__tests__/run-script.ts index f311ff0a..408efc83 100644 --- a/firestore-stripe-payments/functions/__tests__/run-script.ts +++ b/firestore-stripe-payments/functions/__tests__/run-script.ts @@ -7,9 +7,12 @@ import { } from './helpers/setupProxy'; (async () => { + console.log('Starting tests...'); + /** Clear all webhooks with ngrok.io, * useful for clearing any failed ci testing */ + console.log('Clearing webhooks...'); await cleanupAllWebhooks(); const proxyId = await setupProxy();