Merge pull request #2916 from omnivore-app/fix/email-attachment

fix email attachment not being saved as item
This commit is contained in:
Hongbo Wu
2023-10-12 12:09:01 +08:00
committed by GitHub
3 changed files with 55 additions and 20 deletions

View File

@ -61,10 +61,10 @@ export function emailAttachmentRouter() {
(tx) =>
tx.getRepository(UploadFile).save({
url: '',
userId: user.id,
fileName: fileName,
fileName,
status: UploadFileStatus.Initialized,
contentType: contentType,
contentType,
user: { id: user.id },
}),
undefined,
user.id
@ -150,7 +150,7 @@ export function emailAttachmentRouter() {
? PageType.File
: PageType.Book
const title = subject || uploadFileData.fileName
const articleToSave: DeepPartial<LibraryItem> = {
const itemToCreate: DeepPartial<LibraryItem> = {
originalUrl: uploadFileUrlOverride,
itemType,
textContentHash: uploadFileHash,
@ -159,14 +159,15 @@ export function emailAttachmentRouter() {
readableContent: '',
slug: generateSlug(title),
state: LibraryItemState.Succeeded,
user: { id: user.id },
}
const pageId = await createLibraryItem(articleToSave, user.id)
const item = await createLibraryItem(itemToCreate, user.id)
// update received email type
await updateReceivedEmail(receivedEmailId, 'article', user.id)
res.send({ id: pageId })
res.send({ id: item.id })
} catch (err) {
logger.info(err)
res.status(500).send(err)

View File

@ -38,6 +38,22 @@ class MockFile {
createWriteStream() {
return new MockWriteStream(this)
}
getSignedUrl() {
return ['https://signed-url.upload.omnivore.app']
}
getMetadata() {
return [{ md5Hash: 'md5Hash' }]
}
publicUrl() {
return 'https://public-url.upload.omnivore.app'
}
makePublic() {
return
}
}
class MockWriteStream extends Writable {

View File

@ -1,15 +1,19 @@
import { Storage } from '@google-cloud/storage'
import { expect } from 'chai'
import * as jwt from 'jsonwebtoken'
import 'mocha'
import sinon from 'sinon'
import { NewsletterEmail } from '../../src/entity/newsletter_email'
import { User } from '../../src/entity/user'
import { getRepository } from '../../src/repository'
import { findLibraryItemById } from '../../src/services/library_item'
import { createNewsletterEmail } from '../../src/services/newsletters'
import { deleteUser } from '../../src/services/user'
import { createTestUser } from '../db'
import { MockBucket } from '../mock_storage'
import { request } from '../util'
describe('PDF attachments Router', () => {
const newsletterEmail = 'fakeEmail@omnivore.app'
describe('Email attachments Router', () => {
const newsletterEmailAddress = 'fakeEmail@omnivore.app'
let user: User
let authToken: string
@ -18,25 +22,38 @@ describe('PDF attachments Router', () => {
// create test user and login
user = await createTestUser('fakeUser')
await createNewsletterEmail(user.id, newsletterEmail)
authToken = jwt.sign(newsletterEmail, process.env.JWT_SECRET || '')
await getRepository(NewsletterEmail).save({
address: newsletterEmailAddress,
user: { id: user.id },
})
authToken = jwt.sign(newsletterEmailAddress, process.env.JWT_SECRET || '')
// mock cloud storage
const mockBucket = new MockBucket('test')
sinon.replace(
Storage.prototype,
'bucket',
sinon.fake.returns(mockBucket as never)
)
})
after(async () => {
// clean up
await deleteUser(user.id)
sinon.restore()
})
describe('upload', () => {
xit('create upload file request and return id and url', async () => {
it('create upload file request and return id and url', async () => {
const testFile = 'testFile.pdf'
const res = await request
.post('/svc/pdf-attachments/upload')
.post('/svc/email-attachment/upload')
.set('Authorization', `${authToken}`)
.send({
email: newsletterEmail,
email: newsletterEmailAddress,
fileName: testFile,
contentType: 'application/pdf',
})
.expect(200)
@ -52,22 +69,23 @@ describe('PDF attachments Router', () => {
// upload file first
const testFile = 'testFile.pdf'
const res = await request
.post('/svc/pdf-attachments/upload')
.post('/svc/email-attachment/upload')
.set('Authorization', `${authToken}`)
.send({
email: newsletterEmail,
email: newsletterEmailAddress,
fileName: testFile,
contentType: 'application/pdf',
})
uploadFileId = res.body.id
})
xit('create article with uploaded file id and url', async () => {
it('create article with uploaded file id and url', async () => {
// create article
const res2 = await request
.post('/svc/pdf-attachments/create-article')
.post('/svc/email-attachment/create-article')
.send({
email: newsletterEmail,
uploadFileId: uploadFileId,
email: newsletterEmailAddress,
uploadFileId,
})
.set('Authorization', `${authToken}`)
.expect(200)