From 06b6583f298e0688c27f10622be0fa8a8aa4ae43 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 2 Mar 2023 22:21:09 +0800 Subject: [PATCH] Mock cloud storage bucket --- packages/api/src/utils/uploads.ts | 2 +- packages/api/test/mock_storage.ts | 4 ++-- .../api/test/routers/integrations.test.ts | 19 ++++++++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/api/src/utils/uploads.ts b/packages/api/src/utils/uploads.ts index 5abee4dc1..4c73c8780 100644 --- a/packages/api/src/utils/uploads.ts +++ b/packages/api/src/utils/uploads.ts @@ -9,7 +9,7 @@ import { env } from '../env' * the default app engine service account on the IAM page. We also need to * enable IAM related APIs on the project. */ -export const storage = env.fileUpload?.gcsUploadSAKeyFilePath +const storage = env.fileUpload?.gcsUploadSAKeyFilePath ? new Storage({ keyFilename: env.fileUpload.gcsUploadSAKeyFilePath }) : new Storage() const bucketName = env.fileUpload.gcsUploadBucket diff --git a/packages/api/test/mock_storage.ts b/packages/api/test/mock_storage.ts index d0dad7340..00415ab6b 100644 --- a/packages/api/test/mock_storage.ts +++ b/packages/api/test/mock_storage.ts @@ -1,6 +1,6 @@ import { Writable } from 'stream' -export class MockStorage { +class MockStorage { buckets: { [name: string]: MockBucket } constructor() { @@ -12,7 +12,7 @@ export class MockStorage { } } -class MockBucket { +export class MockBucket { name: string files: { [path: string]: MockFile } diff --git a/packages/api/test/routers/integrations.test.ts b/packages/api/test/routers/integrations.test.ts index 847aa37aa..2947a1476 100644 --- a/packages/api/test/routers/integrations.test.ts +++ b/packages/api/test/routers/integrations.test.ts @@ -22,8 +22,8 @@ import { getHighlightUrl } from '../../src/services/highlights' import { deletePage } from '../../src/elastic/pages' import { READWISE_API_URL } from '../../src/services/integrations/readwise' import sinon from 'sinon' -import { MockStorage } from '../mock_storage' -import * as uploads from '../../src/utils/uploads' +import { Storage } from '@google-cloud/storage' +import { MockBucket } from '../mock_storage' describe('Integrations routers', () => { const baseUrl = '/svc/pubsub/integrations' @@ -346,9 +346,7 @@ describe('Integrations routers', () => { token, type: IntegrationType.Import, }) - // mock cloud storage bucket - // @ts-ignore - sinon.replace(uploads, 'storage', new MockStorage('test-bucket')) + // mock Pocket API nock('https://getpocket.com', { reqheaders: { @@ -385,7 +383,14 @@ describe('Integrations routers', () => { context('when integration is pocket', () => { it('returns 200 with OK', async () => { - const res = await request + // mock cloud storage + const mockBucket = new MockBucket('test') + sinon.replace( + Storage.prototype, + 'bucket', + sinon.fake.returns(mockBucket as never) + ) + await request .post(`${baseUrl}/import`) .send({ integrationId: integration.id, @@ -393,7 +398,7 @@ describe('Integrations routers', () => { .set('Cookie', `auth=${authToken}`) .expect(200) - expect(res.text).to.eql('OK') + sinon.restore() }) }) })