fix mock cloud storage

This commit is contained in:
Hongbo Wu
2024-05-15 15:53:42 +08:00
parent a602cf3ad3
commit 950b42899d
9 changed files with 33 additions and 38 deletions

View File

@ -96,7 +96,6 @@ jobs:
PG_LOGGER: debug PG_LOGGER: debug
REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }} REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }}
MQ_REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }} MQ_REDIS_URL: redis://localhost:${{ job.services.redis.ports[6379] }}
GCS_UPLOAD_BUCKET: omnivore-demo-files
build-docker-images: build-docker-images:
name: Build docker images name: Build docker images
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@ -8,7 +8,7 @@
], ],
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"scripts": { "scripts": {
"test": "lerna run test", "test": "lerna run --stream test",
"lint": "lerna run lint", "lint": "lerna run lint",
"build": "lerna run build", "build": "lerna run build",
"test:scoped:example": "lerna run test --scope={@omnivore/pdf-handler,@omnivore/web}", "test:scoped:example": "lerna run test --scope={@omnivore/pdf-handler,@omnivore/web}",

View File

@ -1,15 +1,10 @@
{ {
"extends": "@istanbuljs/nyc-config-typescript", "extends": "@istanbuljs/nyc-config-typescript",
"check-coverage": true,
"all": true, "all": true,
"include": [ "include": [
"src/**/*.ts" "src/**/*.ts"
], ],
"reporter": [ "reporter": [
"text-summary" "text-summary"
], ]
"branches": 0,
"lines": 0,
"functions": 0,
"statements": 60
} }

View File

@ -31,7 +31,7 @@ export const contentReaderForLibraryItem = (
* the default app engine service account on the IAM page. We also need to * the default app engine service account on the IAM page. We also need to
* enable IAM related APIs on the project. * enable IAM related APIs on the project.
*/ */
const storage = env.fileUpload?.gcsUploadSAKeyFilePath export const storage = env.fileUpload?.gcsUploadSAKeyFilePath
? new Storage({ keyFilename: env.fileUpload.gcsUploadSAKeyFilePath }) ? new Storage({ keyFilename: env.fileUpload.gcsUploadSAKeyFilePath })
: new Storage() : new Storage()
const bucketName = env.fileUpload.gcsUploadBucket const bucketName = env.fileUpload.gcsUploadBucket

View File

@ -120,7 +120,13 @@ export const createTestLibraryItem = async (
slug: 'test-with-omnivore', slug: 'test-with-omnivore',
} }
const createdItem = await createOrUpdateLibraryItem(item, userId) const createdItem = await createOrUpdateLibraryItem(
item,
userId,
undefined,
true,
true
)
if (labels) { if (labels) {
await saveLabelsInLibraryItem(labels, createdItem.id, userId) await saveLabelsInLibraryItem(labels, createdItem.id, userId)
} }

View File

@ -1,9 +1,6 @@
import { Storage } from '@google-cloud/storage'
import sinon from 'sinon'
import { env } from '../src/env' import { env } from '../src/env'
import { redisDataSource } from '../src/redis_data_source' import { redisDataSource } from '../src/redis_data_source'
import { createTestConnection } from './db' import { createTestConnection } from './db'
import { MockBucket } from './mock_storage'
import { startApolloServer, startWorker } from './util' import { startApolloServer, startWorker } from './util'
export const mochaGlobalSetup = async () => { export const mochaGlobalSetup = async () => {
@ -22,12 +19,4 @@ export const mochaGlobalSetup = async () => {
await startApolloServer() await startApolloServer()
console.log('apollo server started') console.log('apollo server started')
const mockBucket = new MockBucket('test')
sinon.replace(
Storage.prototype,
'bucket',
sinon.fake.returns(mockBucket as never)
)
console.log('mock cloud storage created')
} }

View File

@ -1,12 +1,9 @@
import sinon from 'sinon'
import { appDataSource } from '../src/data_source' import { appDataSource } from '../src/data_source'
import { env } from '../src/env' import { env } from '../src/env'
import { redisDataSource } from '../src/redis_data_source' import { redisDataSource } from '../src/redis_data_source'
import { stopApolloServer, stopWorker } from './util' import { stopApolloServer, stopWorker } from './util'
export const mochaGlobalTeardown = async () => { export const mochaGlobalTeardown = async () => {
sinon.restore()
await stopApolloServer() await stopApolloServer()
console.log('apollo server stopped') console.log('apollo server stopped')

View File

@ -1,10 +1,11 @@
import { Writable } from 'stream' import { Writable } from 'stream'
class MockStorage { export class MockStorage {
buckets: { [name: string]: MockBucket } buckets: { [name: string]: MockBucket }
constructor() { constructor() {
this.buckets = {} this.buckets = {}
console.log('MockStorage initialized')
} }
bucket(name: string) { bucket(name: string) {
@ -12,13 +13,14 @@ class MockStorage {
} }
} }
export class MockBucket { class MockBucket {
name: string name: string
files: { [path: string]: MockFile } files: { [path: string]: MockFile }
constructor(name: string) { constructor(name: string) {
this.name = name this.name = name
this.files = {} this.files = {}
console.log('MockBucket initialized')
} }
file(path: string) { file(path: string) {
@ -33,6 +35,7 @@ class MockFile {
constructor(path: string) { constructor(path: string) {
this.path = path this.path = path
this.contents = Buffer.alloc(0) this.contents = Buffer.alloc(0)
console.log('MockFile initialized')
} }
createWriteStream() { createWriteStream() {

View File

@ -435,7 +435,13 @@ describe('Article API', () => {
originalUrl: 'https://blog.omnivore.app/test-with-omnivore', originalUrl: 'https://blog.omnivore.app/test-with-omnivore',
directionality: DirectionalityType.RTL, directionality: DirectionalityType.RTL,
} }
const item = await createOrUpdateLibraryItem(itemToCreate, user.id) const item = await createOrUpdateLibraryItem(
itemToCreate,
user.id,
undefined,
true,
true
)
itemId = item.id itemId = item.id
// save highlights // save highlights
@ -528,11 +534,11 @@ describe('Article API', () => {
}) })
describe('SavePage', () => { describe('SavePage', () => {
let title = 'Example Title' const title = 'Example Title'
let url = 'https://blog.omnivore.app' let url = 'https://blog.omnivore.app'
let originalContent = const originalContent =
'<html dir="rtl"><body><div>Example Content</div></body></html>' '<html dir="rtl"><body><div>Example Content</div></body></html>'
let source = 'puppeteer-parse' const source = 'puppeteer-parse'
context('when we save a new item', () => { context('when we save a new item', () => {
after(async () => { after(async () => {
@ -668,7 +674,7 @@ describe('Article API', () => {
describe('SaveUrl', () => { describe('SaveUrl', () => {
let query = '' let query = ''
let url = 'https://blog.omnivore.app/new-url-1' const url = 'https://blog.omnivore.app/new-url-1'
before(() => { before(() => {
sinon.replace(createTask, 'enqueueParseRequest', sinon.fake.resolves('')) sinon.replace(createTask, 'enqueueParseRequest', sinon.fake.resolves(''))
@ -727,8 +733,8 @@ describe('Article API', () => {
describe('saveArticleReadingProgressResolver', () => { describe('saveArticleReadingProgressResolver', () => {
let query = '' let query = ''
let itemId = '' let itemId = ''
let progress = 0.5 const progress = 0.5
let topPercent: number | null = null const topPercent: number | null = null
before(async () => { before(async () => {
itemId = (await createTestLibraryItem(user.id)).id itemId = (await createTestLibraryItem(user.id)).id
@ -1976,7 +1982,7 @@ describe('Article API', () => {
const items: LibraryItem[] = [] const items: LibraryItem[] = []
let query = '' let query = ''
let keyword = 'typeahead' const keyword = 'typeahead'
before(async () => { before(async () => {
// Create some test items // Create some test items
@ -2049,8 +2055,8 @@ describe('Article API', () => {
} }
` `
let since: string let since: string
let items: LibraryItem[] = [] const items: LibraryItem[] = []
let deletedItems: LibraryItem[] = [] const deletedItems: LibraryItem[] = []
before(async () => { before(async () => {
// Create some test items // Create some test items
@ -2263,7 +2269,7 @@ describe('Article API', () => {
) )
context('when action is Delete and query contains item id', () => { context('when action is Delete and query contains item id', () => {
let items: LibraryItem[] = [] const items: LibraryItem[] = []
before(async () => { before(async () => {
// Create some test items // Create some test items
@ -2367,7 +2373,7 @@ describe('Article API', () => {
} }
}` }`
let items: LibraryItem[] = [] const items: LibraryItem[] = []
before(async () => { before(async () => {
// Create some test items // Create some test items