fix mock cloud storage
This commit is contained in:
1
.github/workflows/run-tests.yaml
vendored
1
.github/workflows/run-tests.yaml
vendored
@ -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
|
||||||
|
|||||||
@ -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}",
|
||||||
|
|||||||
@ -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
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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')
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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')
|
||||||
|
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user