mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
add tests for upload
This commit is contained in:
parent
9460197132
commit
77ba7531f3
7 changed files with 94 additions and 33 deletions
|
|
@ -12,6 +12,7 @@ import { initModels } from '../../server'
|
|||
import { kx } from '../../datalayer/knex_config'
|
||||
import { analytics } from '../../utils/analytics'
|
||||
import normalizeUrl from 'normalize-url'
|
||||
import { getNewsletterEmail } from '../../services/newsletters'
|
||||
|
||||
export function pdfAttachmentsRouter() {
|
||||
const router = express.Router()
|
||||
|
|
@ -30,13 +31,13 @@ export function pdfAttachmentsRouter() {
|
|||
return res.status(401).send('UNAUTHORIZED')
|
||||
}
|
||||
|
||||
const models = initModels(kx, false)
|
||||
const user = await models.user.getWhere({ email })
|
||||
|
||||
if (!user) {
|
||||
const newsletterEmail = await getNewsletterEmail(email)
|
||||
if (!newsletterEmail || !newsletterEmail.user) {
|
||||
return res.status(401).send('UNAUTHORIZED')
|
||||
}
|
||||
|
||||
const user = newsletterEmail.user
|
||||
|
||||
analytics.track({
|
||||
userId: user.id,
|
||||
event: 'pdf-attachment-upload',
|
||||
|
|
@ -46,6 +47,7 @@ export function pdfAttachmentsRouter() {
|
|||
})
|
||||
|
||||
const contentType = 'application/pdf'
|
||||
const models = initModels(kx, false)
|
||||
const uploadFileData = await models.uploadFile.create({
|
||||
url: '',
|
||||
userId: user.id,
|
||||
|
|
@ -59,10 +61,10 @@ export function pdfAttachmentsRouter() {
|
|||
uploadFileData.id,
|
||||
fileName
|
||||
)
|
||||
const uploadSignedUrl = await generateUploadSignedUrl(
|
||||
uploadFilePathName,
|
||||
contentType
|
||||
)
|
||||
const uploadSignedUrl =
|
||||
env.server.apiEnv === 'prod'
|
||||
? await generateUploadSignedUrl(uploadFilePathName, contentType)
|
||||
: 'http://localhost:3000/uploads/' + uploadFilePathName
|
||||
res.send({
|
||||
id: uploadFileData.id,
|
||||
url: uploadSignedUrl,
|
||||
|
|
@ -86,13 +88,13 @@ export function pdfAttachmentsRouter() {
|
|||
return res.status(401).send('UNAUTHORIZED')
|
||||
}
|
||||
|
||||
const models = initModels(kx, false)
|
||||
const user = await models.user.getWhere({ email })
|
||||
|
||||
if (!user) {
|
||||
const newsletterEmail = await getNewsletterEmail(email)
|
||||
if (!newsletterEmail || !newsletterEmail.user) {
|
||||
return res.status(401).send('UNAUTHORIZED')
|
||||
}
|
||||
|
||||
const user = newsletterEmail.user
|
||||
|
||||
analytics.track({
|
||||
userId: user.id,
|
||||
event: 'pdf-attachment-create-article',
|
||||
|
|
@ -101,6 +103,7 @@ export function pdfAttachmentsRouter() {
|
|||
},
|
||||
})
|
||||
|
||||
const models = initModels(kx, false)
|
||||
const uploadFile = await models.uploadFile.getWhere({
|
||||
id: uploadFileId,
|
||||
userId: user.id,
|
||||
|
|
|
|||
49
packages/api/test/routers/pdf_attachments.test.ts
Normal file
49
packages/api/test/routers/pdf_attachments.test.ts
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
import {
|
||||
createTestNewsletterEmail,
|
||||
createTestUser,
|
||||
deleteTestUser,
|
||||
} from '../db'
|
||||
import { request } from '../util'
|
||||
import { User } from '../../src/entity/user'
|
||||
import 'mocha'
|
||||
import * as jwt from 'jsonwebtoken'
|
||||
import { expect } from 'chai'
|
||||
|
||||
describe('PDF attachments Router', () => {
|
||||
const username = 'fakeUser'
|
||||
const newsletterEmail = 'fakeEmail'
|
||||
|
||||
let user: User
|
||||
let authToken: string
|
||||
|
||||
before(async () => {
|
||||
// create test user and login
|
||||
user = await createTestUser(username)
|
||||
|
||||
await createTestNewsletterEmail(user, newsletterEmail)
|
||||
authToken = jwt.sign(newsletterEmail, process.env.JWT_SECRET || '')
|
||||
})
|
||||
|
||||
after(async () => {
|
||||
// clean up
|
||||
await deleteTestUser(username)
|
||||
})
|
||||
|
||||
describe('upload', () => {
|
||||
it('create upload file request and return id and url', async () => {
|
||||
const testFile = 'testFile.pdf'
|
||||
|
||||
const res = await request
|
||||
.post('/svc/pdf-attachments/upload')
|
||||
.send({
|
||||
email: newsletterEmail,
|
||||
fileName: testFile,
|
||||
})
|
||||
.set('Authorization', `${authToken}`)
|
||||
.expect(200)
|
||||
|
||||
expect(res.body.id).to.be.a('string')
|
||||
expect(res.body.url).to.be.a('string')
|
||||
})
|
||||
})
|
||||
})
|
||||
14
packages/db/migrations/0068.do.add_delete_cascade_on_upload_files.sql
Executable file
14
packages/db/migrations/0068.do.add_delete_cascade_on_upload_files.sql
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
-- Type: DO
|
||||
-- Name: add_delete_cascade_on_upload_files
|
||||
-- Description: Add delete cascade on user_id field on upload_files table
|
||||
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE omnivore.upload_files
|
||||
DROP CONSTRAINT upload_files_user_id_fkey,
|
||||
ADD CONSTRAINT upload_files_user_id_fkey
|
||||
FOREIGN KEY (user_id)
|
||||
REFERENCES omnivore.user(id)
|
||||
ON DELETE CASCADE;
|
||||
|
||||
COMMIT;
|
||||
13
packages/db/migrations/0068.undo.add_delete_cascade_on_upload_files.sql
Executable file
13
packages/db/migrations/0068.undo.add_delete_cascade_on_upload_files.sql
Executable file
|
|
@ -0,0 +1,13 @@
|
|||
-- Type: UNDO
|
||||
-- Name: add_delete_cascade_on_upload_files
|
||||
-- Description: Add delete cascade on user_id field on upload_files table
|
||||
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE omnivore.upload_files
|
||||
DROP CONSTRAINT upload_files_user_id_fkey,
|
||||
ADD CONSTRAINT upload_files_user_id_fkey
|
||||
FOREIGN KEY (user_id)
|
||||
REFERENCES omnivore.user(id);
|
||||
|
||||
COMMIT;
|
||||
|
|
@ -22,7 +22,6 @@
|
|||
"devDependencies": {
|
||||
"@types/json-bigint": "^1.0.1",
|
||||
"@types/node": "^14.11.2",
|
||||
"@types/quoted-printable": "^1.0.0",
|
||||
"eslint-plugin-prettier": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -31,8 +30,8 @@
|
|||
"@sendgrid/client": "^7.6.0",
|
||||
"@sentry/serverless": "^6.16.1",
|
||||
"axios": "^0.26.0",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"parse-headers": "^2.0.4",
|
||||
"parse-multipart-data": "^1.2.1",
|
||||
"quoted-printable": "^1.0.1"
|
||||
"parse-multipart-data": "^1.2.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ export const inboundEmailHandler = Sentry.GCPFunction.wrapHttpFunction(
|
|||
if (isConfirmationEmail(from)) {
|
||||
console.log('handleConfirmation', from, recipientAddress)
|
||||
await handleConfirmation(recipientAddress, subject)
|
||||
} else if (parsed['pdf-attachment']) {
|
||||
} else if (parsed['pdf-attachment-filename']) {
|
||||
console.log('handle PDF attachment', from, recipientAddress)
|
||||
await handlePdfAttachment(
|
||||
recipientAddress,
|
||||
|
|
|
|||
17
yarn.lock
17
yarn.lock
|
|
@ -4906,11 +4906,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
|
||||
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
|
||||
|
||||
"@types/quoted-printable@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/quoted-printable/-/quoted-printable-1.0.0.tgz#903f81f5d81698d361c176b5b52970cd2bc9868e"
|
||||
integrity sha512-hgFjmHmgT5M8SvDVe+tMhiUb3xViwqkEAM/sTpWCpO0B2Z7RGAgwiQaxPcLVk4KLiZmqj7BMXZvaQQdX6uPM6A==
|
||||
|
||||
"@types/range-parser@*":
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
|
||||
|
|
@ -14538,13 +14533,6 @@ quick-lru@^4.0.1:
|
|||
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
|
||||
integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
|
||||
|
||||
quoted-printable@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/quoted-printable/-/quoted-printable-1.0.1.tgz#9eebf5eb3d11eef022b264fd2d2b6b2bb3b84cc3"
|
||||
integrity sha1-nuv16z0R7vAismT9LStrK7O4TMM=
|
||||
dependencies:
|
||||
utf8 "^2.1.0"
|
||||
|
||||
randombytes@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
|
||||
|
|
@ -16991,11 +16979,6 @@ user-home@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
|
||||
integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA=
|
||||
|
||||
utf8@^2.1.0:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
|
||||
integrity sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=
|
||||
|
||||
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
|
|
|
|||
Loading…
Reference in a new issue