Skip to content

Commit 0b83623

Browse files
Merge pull request #33 from topcoder-platform/hotfix/patch-1.5.3.1
[DEV] Patch 1.5.3.1
2 parents 9f90675 + 70dc182 commit 0b83623

11 files changed

+419
-31
lines changed

config/test.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* The default configuration file.
3+
*/
4+
5+
module.exports = {
6+
zapier: {
7+
ZAPIER_SWITCH: process.env.ZAPIER_SWITCH || 'ON',
8+
ZAPIER_JOB_CANDIDATE_SWITCH: process.env.ZAPIER_JOB_CANDIDATE_SWITCH || 'ON'
9+
}
10+
}

package-lock.json

+181
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+6-4
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,21 @@
1010
"create-index": "node src/scripts/createIndex.js",
1111
"delete-index": "node src/scripts/deleteIndex.js",
1212
"view-data": "node src/scripts/view-data.js",
13-
"test": "mocha test/unit/test.js --require test/unit/prepare.js --timeout 20000 --exit",
14-
"test:cov": "nyc --reporter=html --reporter=text mocha test/unit/test.js --require test/unit/prepare.js --timeout 20000 --exit",
15-
"e2e": "mocha test/e2e/test.js --timeout 20000 --exit",
16-
"e2e:cov": "nyc --reporter=html --reporter=text mocha test/e2e/test.js --timeout 20000 --exit"
13+
"test": "cross-env NODE_ENV=test mocha test/unit/test.js --require test/unit/prepare.js --timeout 20000 --exit",
14+
"test:cov": "cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha test/unit/test.js --require test/unit/prepare.js --timeout 20000 --exit",
15+
"e2e": "cross-env NODE_ENV=test mocha test/e2e/test.js --timeout 20000 --exit",
16+
"e2e:cov": "cross-env NODE_ENV=test nyc --reporter=html --reporter=text mocha test/e2e/test.js --timeout 20000 --exit"
1717
},
1818
"author": "TCSCODER",
1919
"license": "none",
2020
"devDependencies": {
21+
"cross-env": "^7.0.3",
2122
"mocha": "^7.1.2",
2223
"mocha-prepare": "^0.1.0",
2324
"nock": "^12.0.3",
2425
"nyc": "^14.1.1",
2526
"should": "^13.2.3",
27+
"sinon": "^10.0.1",
2628
"standard": "^12.0.1",
2729
"stringcase": "^4.3.1",
2830
"superagent": "^5.1.0"

src/common/helper.js

+16
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,22 @@ function getESClient () {
109109
}
110110
}
111111

112+
// get document or catch not found error
113+
esClient.getExtra = async function (data) {
114+
let doc
115+
116+
try {
117+
doc = await esClient.getSource(data)
118+
} catch (err) {
119+
if (err.statusCode === 404) {
120+
throw new Error(`id: ${data.id} "${data.index}" not found`)
121+
}
122+
throw err
123+
}
124+
125+
return doc
126+
}
127+
112128
// delete document or catch not found error
113129
esClient.deleteExtra = async function (data) {
114130
try {

src/services/JobCandidateProcessorService.js

+13-6
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ const localLogger = {
2020
* @param {Object} message the message object
2121
* @returns {undefined}
2222
*/
23-
async function updateCandidateStatus ({ type, payload }) {
24-
if (!payload.status) {
25-
localLogger.debug({ context: 'updateCandidateStatus', message: 'status not updated' })
23+
async function updateCandidateStatus ({ type, payload, previousData }) {
24+
if (previousData.status === payload.status) {
25+
localLogger.debug({ context: 'updateCandidateStatus', message: `jobCandidate is already in status: ${payload.status}` })
2626
return
2727
}
2828
if (!['rejected', 'shortlist'].includes(payload.status)) {
@@ -56,13 +56,13 @@ async function updateCandidateStatus ({ type, payload }) {
5656
* @param {Object} message the message object
5757
* @returns {undefined}
5858
*/
59-
async function postMessageToZapier ({ type, payload }) {
59+
async function postMessageToZapier ({ type, payload, previousData }) {
6060
if (config.zapier.ZAPIER_JOB_CANDIDATE_SWITCH === constants.Zapier.Switch.OFF) {
6161
localLogger.debug({ context: 'postMessageToZapier', message: 'Zapier Switch off via config, no messages sent' })
6262
return
6363
}
6464
if (type === constants.Zapier.MessageType.JobCandidateUpdate) {
65-
await updateCandidateStatus({ type, payload })
65+
await updateCandidateStatus({ type, payload, previousData })
6666
return
6767
}
6868
throw new Error(`unrecognized message type: ${type}`)
@@ -113,6 +113,12 @@ processCreate.schema = {
113113
*/
114114
async function processUpdate (message, transactionId) {
115115
const data = message.payload
116+
// save previous data for Zapier logic
117+
// NOTE: ideally if we update Kafka event message to have both: pervious and updated value so we don't have to request it again
118+
const { body: previousData } = await esClient.getExtra({
119+
index: config.get('esConfig.ES_INDEX_JOB_CANDIDATE'),
120+
id: data.id
121+
})
116122
await esClient.updateExtra({
117123
index: config.get('esConfig.ES_INDEX_JOB_CANDIDATE'),
118124
id: data.id,
@@ -124,7 +130,8 @@ async function processUpdate (message, transactionId) {
124130
})
125131
await postMessageToZapier({
126132
type: constants.Zapier.MessageType.JobCandidateUpdate,
127-
payload: data
133+
payload: data,
134+
previousData
128135
})
129136
}
130137

test/e2e/test.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
*/
44

55
const config = require('config')
6-
const _ = require('lodash')
76
const stringcase = require('stringcase')
87
const app = require('../../src/app')
98
const request = require('superagent')
@@ -89,14 +88,14 @@ describe('Taas ES Processor E2E Test', () => {
8988
index,
9089
id: testData.messages[model].create.message.payload.id
9190
})
92-
should.deepEqual(doc.body._source, _.omit(testData.messages[model].create.message.payload, ['id']))
91+
should.deepEqual(doc.body._source, testData.messages[model].create.message.payload, ['id'])
9392
})
9493

9594
it(`Should handle ${modelInSpaceCase} updating message`, async () => {
9695
await testHelper.esClient.create({
9796
index,
9897
id: testData.messages[model].create.message.payload.id,
99-
body: _.omit(testData.messages[model].create.message.payload, ['id']),
98+
body: testData.messages[model].create.message.payload,
10099
refresh: 'true'
101100
})
102101
await testHelper.sendMessage(testData.messages[model].update.message)
@@ -105,14 +104,14 @@ describe('Taas ES Processor E2E Test', () => {
105104
index,
106105
id: testData.messages[model].update.message.payload.id
107106
})
108-
should.deepEqual(_.omit(doc.body._source, ['createdAt', 'createdBy']), _.omit(testData.messages[model].update.message.payload, ['id']))
107+
should.deepEqual(doc.body._source, testData.messages[model].update.message.payload)
109108
})
110109

111110
it(`Should handle ${modelInSpaceCase} deletion message`, async () => {
112111
await testHelper.esClient.create({
113112
index,
114113
id: testData.messages[model].create.message.payload.id,
115-
body: _.omit(testData.messages[model].create.message.payload, ['id']),
114+
body: testData.messages[model].create.message.payload,
116115
refresh: 'true'
117116
})
118117
await testHelper.sendMessage(testData.messages[model].delete.message)
@@ -133,7 +132,7 @@ describe('Taas ES Processor E2E Test', () => {
133132
await testHelper.esClient.create({
134133
index,
135134
id: testData.messages[model].create.message.payload.id,
136-
body: _.omit(testData.messages[model].create.message.payload, ['id']),
135+
body: testData.messages[model].create.message.payload,
137136
refresh: 'true'
138137
})
139138
await testHelper.sendMessage(testData.messages[model].create.message)
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"topic":"taas.job.create","originator":"taas-api","timestamp":"2020-11-05T19:00:17.563Z","mime-type":"application/json","payload":{"projectId":21,"externalId":"1212","description":"Dummy Description","startDate":"2020-09-27T04:17:23.131Z","endDate":"2020-09-27T04:17:23.131Z","numPositions":13,"resourceType":"Dummy Resource Type","rateType":"hourly","skills":["56fdc405-eccc-4189-9e83-c78abf844f50","f91ae184-aba2-4485-a8cb-9336988c05ab","edfc7b4f-636f-44bd-96fc-949ffc58e38b","4ca63bb6-f515-4ab0-a6bc-c2d8531e084f","ee03c041-d53b-4c08-b7d9-80d7461da3e4"],"id":"ffbc24f7-301e-48d3-bf01-c056916056a2","createdAt":"2020-11-05T19:00:16.268Z","createdBy":"a55fe1bc-1754-45fa-9adc-cf3d6d7c377a","status":"sourcing"}}
1+
{"topic":"taas.job.create","originator":"taas-api","timestamp":"2020-11-05T19:00:17.563Z","mime-type":"application/json","payload":{"title":"Job Title","projectId":21,"externalId":"1212","description":"Dummy Description","startDate":"2020-09-27T04:17:23.131Z","duration":17,"numPositions":13,"resourceType":"Dummy Resource Type","rateType":"hourly","skills":["56fdc405-eccc-4189-9e83-c78abf844f50","f91ae184-aba2-4485-a8cb-9336988c05ab","edfc7b4f-636f-44bd-96fc-949ffc58e38b","4ca63bb6-f515-4ab0-a6bc-c2d8531e084f","ee03c041-d53b-4c08-b7d9-80d7461da3e4"],"id":"ffbc24f7-301e-48d3-bf01-c056916056a2","createdAt":"2020-11-05T19:00:16.268Z","createdBy":"a55fe1bc-1754-45fa-9adc-cf3d6d7c377a","status":"sourcing","isApplicationPageActive":false}}

0 commit comments

Comments
 (0)