Skip to content
Snippets Groups Projects
Commit 188f7940 authored by Jure's avatar Jure
Browse files

feat: working job roundtrip and test

parent 6f7a0cc4
No related branches found
No related tags found
No related merge requests found
......@@ -4,32 +4,21 @@ const logger = require('@pubsweet/logger')
const db = require('../db')
const alphabet = stringNumber => {
const number = Number(stringNumber)
if (number > 25) {
throw new Error('Number too big to be converted to alphabet')
}
return 'abcdefghijklmnopqrstuvwxyz'.split('')[Number(stringNumber)]
}
const dbAdapter = {
executeSql: (sql, parameters = []) => {
try {
// This is needed to replace pg-boss' $1, $2 arguments
// into knex's :val, :val2 style.
const replacedSql = sql.replace(
/\$(\d+)\b/g,
(_, number) => `:${alphabet(number)}`,
)
const replacedSql = sql.replace(/\$(\d+)\b/g, (_, number) => `:${number}`)
const parametersObject = {}
parameters.forEach(
(value, index) => (parametersObject[`${alphabet(index + 1)}`] = value),
(value, index) => (parametersObject[`${index + 1}`] = value),
)
return db.raw(replacedSql, parametersObject)
} catch (err) {
return logger.error('Error querying database', err.message)
return logger.error('Error querying database:', err.message)
}
},
}
......
const jobs = require('../../src/jobs')
const someHandler = async job =>
// console.log('HERE I AM WITH', job)
'victory'
const someHandler = async job => {
expect(job.data.param).toEqual('aThing')
return Promise.resolve({ thing: 'someOtherThing' })
}
describe('jobs', () => {
it('should connect', async () => {
const jobthing = await jobs()
let jobQueue
await jobthing.publish('some-queue', { param1: '1' })
// console.log(`created ${jobId}`)
beforeAll(async () => {
jobQueue = await jobs()
})
it('submits a job, runs it, and notifies on completion', async done => {
const queueName = 'aJobQueue'
// Subscribe to the job queue with an async handler
await jobQueue.subscribe(queueName, someHandler)
await jobthing.subscribe('some-queue', someHandler)
// Add a job to the queue
await jobQueue.publish(queueName, { param: 'aThing' })
// Be notified on job completion with job result
await jobQueue.onComplete(queueName, job => {
try {
expect(job.data.response).toEqual({ thing: 'someOtherThing' })
done()
} catch (e) {
done.fail(e)
}
})
})
afterAll(async () => jobQueue.stop())
})
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment