From c9c6f83e6566b04a440cb5418a0e23145a3f4b37 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 26 May 2022 10:51:30 +0800 Subject: [PATCH] Add tests for trigger endpoint --- packages/api/src/routers/svc/webhooks.ts | 6 +-- packages/api/test/routers/webhooks.test.ts | 51 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 packages/api/test/routers/webhooks.test.ts diff --git a/packages/api/src/routers/svc/webhooks.ts b/packages/api/src/routers/svc/webhooks.ts index c9b0697e0..eaa351be9 100644 --- a/packages/api/src/routers/svc/webhooks.ts +++ b/packages/api/src/routers/svc/webhooks.ts @@ -10,7 +10,7 @@ import axios, { Method } from 'axios' export function webhooksServiceRouter() { const router = express.Router() - router.post('/:action', async (req, res) => { + router.post('/trigger/:action', async (req, res) => { console.log('trigger webhook of action', req.params.action) const { message: msgStr, expired } = readPushSubscription(req) @@ -38,8 +38,8 @@ export function webhooksServiceRouter() { const eventType = `${type as string}_${req.params.action}`.toUpperCase() const webhooks = await getRepository(Webhook) .createQueryBuilder() - .where('userId = :userId', { userId }) - .andWhere(':eventType = ANY(eventTypes)', { eventType }) + .where('user_id = :userId', { userId }) + .andWhere(':eventType = ANY(event_types)', { eventType }) .andWhere('enabled = true') .getMany() diff --git a/packages/api/test/routers/webhooks.test.ts b/packages/api/test/routers/webhooks.test.ts new file mode 100644 index 000000000..b44beb201 --- /dev/null +++ b/packages/api/test/routers/webhooks.test.ts @@ -0,0 +1,51 @@ +import { createTestUser, deleteTestUser } from '../db' +import { request } from '../util' +import { User } from '../../src/entity/user' +import 'mocha' +import { getRepository } from '../../src/entity/utils' +import { Webhook } from '../../src/entity/webhook' + +describe('Webhooks Router', () => { + const username = 'fakeUser' + const token = process.env.PUBSUB_VERIFICATION_TOKEN || '' + + let user: User + let webhook: Webhook + + before(async () => { + // create test user and login + user = await createTestUser(username) + await request + .post('/local/debug/fake-user-login') + .send({ fakeEmail: user.email }) + + webhook = await getRepository(Webhook).save({ + url: 'https://example.com', + user: { id: user.id }, + eventTypes: ['PAGE_CREATED'], + }) + }) + + after(async () => { + // clean up + await deleteTestUser(username) + }) + + describe('trigger webhooks', () => { + it('should trigger webhooks', async () => { + const data = { + message: { + data: Buffer.from( + JSON.stringify({ userId: user.id, type: 'page' }) + ).toString('base64'), + publishTime: new Date().toISOString(), + }, + } + + await request + .post('/svc/pubsub/webhooks/trigger/created?token=' + token) + .send(data) + .expect(200) + }) + }) +})