@natlibfi/melinda-rest-api-commons 4.2.4-alpha.6 → 4.2.4-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/mongo.js CHANGED
@@ -47,7 +47,7 @@ var _debug = _interopRequireDefault(require("debug"));
47
47
  }
48
48
  */
49
49
 
50
- async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
50
+ async function _default(MONGO_URI, collection, db = 'rest-api') {
51
51
  const logger = (0, _melindaBackendCommons.createLogger)();
52
52
  const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons/mongo');
53
53
  const debugDev = debug.extend(':dev');
@@ -59,40 +59,16 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
59
59
  bucketName: collection
60
60
  });
61
61
  const operator = dbConnection.collection(collection);
62
- debugDev(`mongo: ${MONGO_URI}, db: ${db}, collection: ${collection}, test: ${test}`);
63
- if (test) {
64
- // return also internal functions if testing
65
- return {
66
- createPrio,
67
- createBulk,
68
- checkAndSetState,
69
- checkAndSetImportJobState,
70
- query,
71
- createProjection,
72
- queryById,
73
- checkTimeOut,
74
- remove,
75
- readContent,
76
- removeContent,
77
- getOne,
78
- getStream,
79
- setState,
80
- setImportJobState,
81
- pushIds,
82
- pushMessages,
83
- setOperation,
84
- setOperations,
85
- addBlobSize,
86
- setBlobSize
87
- };
88
- }
62
+ debugDev(`mongo: ${MONGO_URI}, db: ${db}, collection: ${collection}`);
89
63
  return {
90
64
  createPrio,
91
65
  createBulk,
92
66
  checkAndSetState,
93
67
  checkAndSetImportJobState,
94
68
  query,
69
+ createProjection,
95
70
  queryById,
71
+ checkTimeOut,
96
72
  remove,
97
73
  readContent,
98
74
  removeContent,
@@ -328,7 +304,10 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
328
304
  logger.debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);
329
305
  debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);
330
306
  debug(`${JSON.stringify(combinedShowParams)}`);
331
- if (showAll === true || showAll === '1' || showAll === 1) {
307
+
308
+ // NOTE: parseBoolean parses any non-empty, non-"false" string as true!
309
+ if ((0, _melindaCommons.parseBoolean)(showAll)) {
310
+ //if (showAll === true || showAll === '1' || showAll === 1) {
332
311
  debug(`ShowAll: ${showAll}`);
333
312
  return {
334
313
  _id: 0
@@ -340,7 +319,9 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
340
319
  'showRecordLoadParams': 'recordLoadParams',
341
320
  'showImportJobState': 'importJobState'
342
321
  };
343
- const result = Object.keys(combinedShowParams).filter(param => param !== 'showAll' && combinedShowParams[param] !== true && combinedShowParams[param] !== 1 && combinedShowParams[param] !== '1').filter(param => showParamToField[param]).map(param => showParamToField[param]);
322
+ const result = Object.keys(combinedShowParams)
323
+ //.filter(param => param !== 'showAll' && combinedShowParams[param] !== true && combinedShowParams[param] !== 1 && combinedShowParams[param] !== '1')
324
+ .filter(param => param !== 'showAll' && !(0, _melindaCommons.parseBoolean)(combinedShowParams[param])).filter(param => showParamToField[param]).map(param => showParamToField[param]);
344
325
  logger.silly(`We want to exclude from projection: ${JSON.stringify(result)}`);
345
326
  debug(`We want to exclude from projection: ${JSON.stringify(result)}`);
346
327
  const excludeObject = Object.fromEntries(result.map(param => [param, 0]));
@@ -398,7 +379,6 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
398
379
  logger.silly(`${correlationId} has already state: ${oldState}`);
399
380
  return false;
400
381
  }
401
- debug(`test: ${test}`);
402
382
  const timeoutTime = (0, _moment.default)(modificationTime).add(1, 'm');
403
383
  logger.silly(`${correlationId} timeOut @ ${timeoutTime}`);
404
384
  if (timeoutTime.isBefore()) {
@@ -450,7 +430,9 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
450
430
  try {
451
431
  //const metadataResult = await getFileMetadata({filename: clean});
452
432
  //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);
453
- const noContent = await removeContent(params.correlationId);
433
+ const noContent = await removeContent({
434
+ correlationId: params.correlationId
435
+ });
454
436
  debug(`noContent (removeContent result): ${JSON.stringify(noContent)}`);
455
437
  if (noContent) {
456
438
  const deleteResult = await operator.deleteOne({
@@ -462,7 +444,7 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
462
444
  } catch (err) {
463
445
  // TEST-COVERAGE: this error is not (currently) tested
464
446
  if (err instanceof _mongodb.MongoDriverError) {
465
- debug();
447
+ debug(err);
466
448
  if (err.message.indexOf('File not found for id') !== -1) {
467
449
  logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);
468
450
  debug(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);
@@ -509,16 +491,20 @@ async function _default(MONGO_URI, collection, db = 'rest-api', test = false) {
509
491
  }
510
492
  async function removeContent(params) {
511
493
  logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);
494
+ debug(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);
512
495
  const clean = (0, _mongoSanitize.default)(params.correlationId);
513
- const result = await operator.findOne({
514
- correlationId: clean
515
- }); // njsscan-ignore: node_nosqli_injection
516
- logger.silly(`mongo/removeContent: result ${JSON.stringify(result)}`);
517
- if (result) {
518
- // TEST-COVERAGE: next two lines are not (currently) tested
519
- await gridFSBucket.delete(clean);
496
+ const result = await gridFSBucket.find({
497
+ filename: clean
498
+ }).toArray();
499
+ debug(`mongo/removeContent: find bucket result ${JSON.stringify(result)}`);
500
+ if (result.length > 0) {
501
+ // Note: we assume and handle just one file for filename!
502
+ const [firstBucketResult] = result;
503
+ const fileId = firstBucketResult._id;
504
+ await gridFSBucket.delete(fileId);
520
505
  return true;
521
506
  }
507
+ logger.debug(`No files for ${params.correlationId} to delete`);
522
508
  return true;
523
509
  }
524
510
  function getOne({
package/dist/mongo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mongo.js","names":["_mongodb","require","_melindaBackendCommons","_melindaCommons","_constants","_utils","_moment","_interopRequireDefault","_httpStatus","_mongoSanitize","_debug","_default","MONGO_URI","collection","db","test","logger","createLogger","debug","createDebugLogger","debugDev","extend","client","MongoClient","connect","dbConnection","gridFSBucket","GridFSBucket","bucketName","operator","createPrio","createBulk","checkAndSetState","checkAndSetImportJobState","query","createProjection","queryById","checkTimeOut","remove","readContent","removeContent","getOne","getStream","setState","setImportJobState","pushIds","pushMessages","setOperation","setOperations","addBlobSize","setBlobSize","correlationId","cataloger","oCatalogerIn","operation","operationSettings","time","moment","toDate","newQueueItem","operations","prio","queueItemState","QUEUE_ITEM_STATE","VALIDATOR","PENDING_VALIDATION","blobSize","importJobState","CREATE","IMPORT_JOB_STATE","EMPTY","UPDATE","FIX","records","errorMessage","errorStatus","creationTime","modificationTime","JSON","stringify","result","insertOne","acknowledged","info","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","payload","message","logError","contentType","recordLoadParams","stream","UPLOADING","WAITING_FOR_RECORDS","Promise","resolve","reject","outputStream","openUploadStream","on","chunk","write","end","undefined","state","timeOut","params","showParams","limit","skip","rest","find","projection","parseInt","toArray","length","silly","showAll","showOperations","showOperationSettings","showRecordLoadParams","showImportJobState","combinedShowParams","_id","showParamToField","Object","keys","filter","param","map","excludeObject","fromEntries","checkModTime","findOne","oldState","ABORT","ERROR","DONE","includes","timeoutTime","add","isBefore","finalImportJobStates","REQUEST_TIMEOUT","clean","sanitize","noContent","deleteResult","deleteOne","err","MongoDriverError","indexOf","noStream","readStream","openDownloadStreamByName","BAD_REQUEST","NOT_FOUND","delete","cleanQueueItemState","options","handledIds","rejectedIds","verbose","updateOne","$set","$push","$each","messages","messageField","cleanMessageField","errorString","stateInQueueItemStates","values","stateInQueueItemStatesValidator","stateInQueueItemStatesImporter","IMPORTER","updateValues","forEach","key","findOneAndUpdate","returnDocument","cleanCorrelationId","cleanImportJobState","OPERATIONS","newJobState","getNewJobState","newOperation","oldOperation","cleanNewOperation","ok","addOperation","removeOperation","queueItem","oldOperations","operationsAfterRemove","operationsAfterRemoveAndAdd","$inc","cleanBlobSize"],"sources":["../src/mongo.js"],"sourcesContent":["/* eslint-disable max-lines */\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\nimport createDebugLogger from 'debug';\n\n//import isDeepStrictEqual from 'util';\n\n/* QueueItem:\n{\n \"correlationId\":\"FOO\",\n \"cataloger\":\"xxx0000\",\n \"oCatalogerIn\":\"xxx0000\"\n \"operation\":\"UPDATE\",\n \"operations\":[\"UPDATE\", \"CREATE\"]\n \"contentType\":\"application/json\",\n \"recordLoadParams\": {\n \"pActiveLibrary\": \"XXX00\",\n \"pInputFile\": \"filename.seq\",\n \"pRejectFile\": \"filename.rej\",\n \"pLogFile\": \"filename.syslog\",\n \"pOldNew\": \"NEW\"\n },\n \"queueItemState\":\"PENDING_QUEUING\",\n \"importJobState\": {\n \"CREATE\": \"EMPTY\",\n \"UPDATE\": \"EMPTY\"\n },\n blobSize: 1,\n records: [],\n errorMessage: '',\n errorStatus: '',\n \"creationTime\":\"2020-01-01T00:00:00.000Z\",\n \"modificationTime\":\"2020-01-01T00:00:01.000Z\",\n}\n*/\n\nexport default async function (MONGO_URI, collection, db = 'rest-api', test = false) {\n const logger = createLogger();\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo');\n const debugDev = debug.extend(':dev');\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI);\n const dbConnection = client.db(db);\n const gridFSBucket = new GridFSBucket(dbConnection, {bucketName: collection});\n const operator = dbConnection.collection(collection);\n debugDev(`mongo: ${MONGO_URI}, db: ${db}, collection: ${collection}, test: ${test}`);\n\n if (test) {\n // return also internal functions if testing\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, createProjection, queryById, checkTimeOut, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n }\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n debugDev('createPrio');\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n operation,\n operations: [operation],\n oCatalogerIn,\n operationSettings: {\n prio: true,\n ...operationSettings\n },\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.PENDING_VALIDATION,\n blobSize: 1,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY,\n FIX: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n try {\n debugDev(`Inserting: ${JSON.stringify(newQueueItem)} to ${collection}}`);\n const result = await operator.insertOne(newQueueItem);\n debugDev(JSON.stringify(result));\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n async function createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n oCatalogerIn,\n operation,\n operations: [operation],\n operationSettings: {\n prio: false,\n ...operationSettings\n },\n contentType,\n recordLoadParams,\n queueItemState: stream ? QUEUE_ITEM_STATE.VALIDATOR.UPLOADING : QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS,\n blobSize: 0,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY,\n FIX: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (stream) {\n debug(`Creating streamBulk`);\n try {\n await new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n stream\n .on('error', reject)\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n debug(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n return operator.insertOne(newQueueItem);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n logger.debug(`No stream`);\n debug(`Creating noStreamBulk`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (!stream) {\n try {\n const result = await operator.insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n debug(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return {correlationId, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n }\n\n // Check state that the queueItem has not waited too long and set state\n // Optionally set also queueItems errorStatus & errorMessage\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR/DONE\n // otherwise it sets queueItem and importJobStates to state ABORT and add errorStatus and errorMessage (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return setState({correlationId, state, errorMessage, errorStatus});\n }\n return false;\n }\n\n // Check state that the queueItem has not waited too long and set importJobState\n // Note: checkAndSetImportJobState cannot be used to set queueItems errorStatus & errorMessage (expect in case of a TimeOut)\n async function checkAndSetImportJobState({correlationId, operation, importJobState}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR/DONE\n // otherwise it sets queueItem and importJobStates to state ABORT and errorStatue and errorMessage (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n return setImportJobState({correlationId, operation, importJobState});\n }\n return false;\n }\n\n async function query(params, showParams = {}) {\n logger.debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n const {limit = 1000, skip = 0, ...rest} = params;\n\n const result = await operator.find(rest, {projection: createProjection(showParams)})\n .limit(parseInt(limit, 10))\n .skip(parseInt(skip, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? 'Found!' : 'Not found!'}`);\n logger.silly(`${JSON.stringify(result)}`);\n debug(`${JSON.stringify(result)}`);\n return result;\n }\n\n // We default to NOT showing operations, operationSettings, recordLoadParams and importJobState when a queueItem is queried\n // These can all be shown with showAll\n // Single fields can be shown by showOperation, showOperationSettings, showRecordLoadParams and showImportJobState\n\n function createProjection(showParams = {}) {\n logger.silly(`Creating projection for query: ${JSON.stringify(showParams)}`);\n debug(`Creating projection for query: ${JSON.stringify(showParams)}`);\n const {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n const combinedShowParams = {\n showAll,\n showOperations,\n showOperationSettings,\n showRecordLoadParams,\n showImportJobState\n };\n logger.debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n debug(`${JSON.stringify(combinedShowParams)}`);\n\n if (showAll === true || showAll === '1' || showAll === 1) {\n debug(`ShowAll: ${showAll}`);\n return {\n _id: 0\n };\n }\n\n const showParamToField = {\n 'showOperations': 'operations',\n 'showOperationSettings': 'operationSettings',\n 'showRecordLoadParams': 'recordLoadParams',\n 'showImportJobState': 'importJobState'\n };\n\n const result = Object.keys(combinedShowParams)\n .filter(param => param !== 'showAll' && combinedShowParams[param] !== true && combinedShowParams[param] !== 1 && combinedShowParams[param] !== '1')\n .filter(param => showParamToField[param])\n .map((param) => showParamToField[param]);\n logger.silly(`We want to exclude from projection: ${JSON.stringify(result)}`);\n debug(`We want to exclude from projection: ${JSON.stringify(result)}`);\n\n\n const excludeObject = Object.fromEntries(result.map(param => [param, 0]));\n logger.silly(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n debug(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n\n\n return {\n _id: 0,\n ...excludeObject\n };\n }\n\n // Note: edited in v4.2.4 to return queueItem *after* possible timout has aborted it\n // Note: previous versions returned queueItem *before* its state/queueItemState is timeOuted\n async function queryById({correlationId, checkModTime = false}) {\n if (checkModTime) {\n debug(`queryById checkModTime: ${checkModTime}`);\n await checkTimeOut({correlationId});\n return queryById({correlationId});\n }\n const result = await operator.findOne({correlationId}, {projection: {_id: 0}});\n return result;\n }\n\n // Check that if the item has waited too long\n // If the last modification time for the queueItem is older than 1 minute\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR or DONE return false\n\n async function checkTimeOut({correlationId}) {\n const {modificationTime, queueItemState: oldState, importJobState} = await operator.findOne({correlationId});\n //debug(`${modificationTime} - oldState: ${oldState}`);\n // should we check for DONE too?\n if ([QUEUE_ITEM_STATE.ABORT, QUEUE_ITEM_STATE.ERROR, QUEUE_ITEM_STATE.DONE].includes(oldState)) {\n logger.silly(`${correlationId} has already state: ${oldState}`);\n return false;\n }\n\n debug(`test: ${test}`);\n\n const timeoutTime = moment(modificationTime).add(1, 'm');\n logger.silly(`${correlationId} timeOut @ ${timeoutTime}`);\n\n if (timeoutTime.isBefore()) {\n const finalImportJobStates = [IMPORT_JOB_STATE.ABORT, IMPORT_JOB_STATE.DONE, IMPORT_JOB_STATE.EMPTY, IMPORT_JOB_STATE.ERROR];\n if (!finalImportJobStates.includes(importJobState.CREATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.FIX)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'FIX', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n await setState({correlationId, state: QUEUE_ITEM_STATE.ABORT, errorStatus: httpStatus.REQUEST_TIMEOUT, errorMessage: `Timeout in ${oldState}`});\n\n return false;\n }\n\n return true;\n }\n\n // eslint-disable-next-line max-statements\n async function remove(params) {\n logger.silly(`${JSON.stringify(params)}`);\n logger.info(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n debug(`${JSON.stringify(params)}`);\n debug(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n const clean = sanitize(params.correlationId);\n logger.silly(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n debug(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n\n\n try {\n //const metadataResult = await getFileMetadata({filename: clean});\n //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);\n const noContent = await removeContent(params.correlationId);\n debug(`noContent (removeContent result): ${JSON.stringify(noContent)}`);\n if (noContent) {\n const deleteResult = await operator.deleteOne({correlationId: clean});\n debug(`deleteResult: ${JSON.stringify(deleteResult)}`);\n return true;\n }\n } catch (err) {\n // TEST-COVERAGE: this error is not (currently) tested\n if (err instanceof MongoDriverError) {\n debug();\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n debug(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n await operator.deleteOne({correlationId: clean});\n return true;\n }\n logger.error(err.message);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function readContent(correlationId) {\n logger.info(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n debug(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n\n const clean = sanitize(correlationId);\n debug(clean);\n\n const result = await operator.findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n debug(result);\n if (result) {\n const {operationSettings} = result;\n if (operationSettings.prio === false && operationSettings.noStream === false) {\n return {\n contentType: result.contentType,\n readStream: gridFSBucket.openDownloadStreamByName(clean)\n };\n }\n logger.debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n debug(`Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`);\n throw new ApiError(httpStatus.BAD_REQUEST, {message: `Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`});\n }\n\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n\n async function removeContent(params) {\n logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n const clean = sanitize(params.correlationId);\n\n const result = await operator.findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n logger.silly(`mongo/removeContent: result ${JSON.stringify(result)}`);\n\n if (result) {\n // TEST-COVERAGE: next two lines are not (currently) tested\n await gridFSBucket.delete(clean);\n return true;\n }\n\n return true;\n }\n\n function getOne({queueItemState, importJobState = undefined}) {\n //params example: \"queueItemState\": \"IMPORTER.IN_QUEUE\", \"importJobState\":{\"importJobState.UPDATE\": \"IN_QUEUE\"}\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n //debug(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n const cleanQueueItemState = queueItemState ? {queueItemState: sanitize(queueItemState)} : undefined;\n const options = {projection: {_id: 0}};\n\n try {\n\n // Just queueItemState\n if (queueItemState && importJobState === undefined) {\n logger.silly(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n //debug(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return operator.findOne({...cleanQueueItemState}, options);\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n //debug(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return operator.findOne({...importJobState}, options);\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n //debug(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return operator.findOne({...cleanQueueItemState, ...importJobState}, options);\n }\n\n logger.debug(`getOne not working!`);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');\n\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n try {\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(clean);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function pushIds({correlationId, handledIds, rejectedIds}) {\n logger.verbose(`Push ids (${handledIds.length}) and rejectedIds (${rejectedIds.length}) ${correlationId} to ${collection}`);\n logger.debug(`ids (${handledIds.length}): ${JSON.stringify(handledIds)}, rejectedIds ${rejectedIds.length}: ${JSON.stringify(rejectedIds)}`);\n const clean = sanitize(correlationId);\n await operator.updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\n }\n });\n }\n\n async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}}`);\n const clean = sanitize(correlationId);\n const cleanMessageField = sanitize(messageField);\n debug(`${messageField} -> ${cleanMessageField}`);\n await operator.updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n [cleanMessageField]: {$each: messages}\n }\n });\n }\n\n function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n const errorString = errorMessage || errorStatus ? `, Error message: '${JSON.stringify(errorMessage) || ''}', Error status: '${errorStatus || ''}'` : '';\n logger.info(`Setting queue-item state ${state} for ${correlationId}${errorString} to ${collection}`);\n\n const stateInQueueItemStates = Object.values(QUEUE_ITEM_STATE).indexOf(state) > -1;\n const stateInQueueItemStatesValidator = Object.values(QUEUE_ITEM_STATE.VALIDATOR).indexOf(state) > -1;\n const stateInQueueItemStatesImporter = Object.values(QUEUE_ITEM_STATE.IMPORTER).indexOf(state) > -1;\n if (!stateInQueueItemStates && !stateInQueueItemStatesValidator && !stateInQueueItemStatesImporter) {\n debug(`Trying to set invalid state ${state}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const clean = sanitize(correlationId);\n const updateValues = {\n queueItemState: state,\n modificationTime: moment().toDate(),\n errorMessage,\n errorStatus\n };\n\n // Do not update value that are undefined\n // eslint-disable-next-line functional/immutable-data\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return operator\n .findOneAndUpdate(\n {correlationId: clean},\n {$set: updateValues},\n {projection: {_id: 0}, returnDocument: 'after'}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n debug(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanImportJobState = sanitize(importJobState);\n\n if (!(operation in OPERATIONS)) {\n debug(`Error: ${operation} is not in ${JSON.stringify(OPERATIONS)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Invalid operation for import job state');\n }\n\n if (!(cleanImportJobState in IMPORT_JOB_STATE)) {\n debug(`Error: ${cleanImportJobState} is not in ${JSON.stringify(IMPORT_JOB_STATE)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Invalid import job state');\n }\n\n const newJobState = getNewJobState(operation, cleanImportJobState);\n\n\n function getNewJobState(operation, cleanImportJobState) {\n if (operation === OPERATIONS.CREATE) {\n return {'importJobState.CREATE': cleanImportJobState};\n }\n if (operation === OPERATIONS.UPDATE) {\n return {'importJobState.UPDATE': cleanImportJobState};\n }\n if (operation === OPERATIONS.FIX) {\n return {'importJobState.FIX': cleanImportJobState};\n }\n // istanbul ignore next\n // Ignoring for coverage - we error this already\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n return operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n }\n\n async function setOperation({correlationId, operation}) {\n const newOperation = operation;\n const {operation: oldOperation} = await operator.findOne({correlationId});\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanNewOperation = sanitize(newOperation);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operation: cleanNewOperation,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n debugDev(`${JSON.stringify(result)}`);\n return result.ok || result;\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const queueItem = await operator.findOne({correlationId: cleanCorrelationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n\n const oldOperations = queueItem.operations;\n\n logger.info(`Setting queue-item operations from ${JSON.stringify(oldOperations)} by adding ${addOperation} and removing ${removeOperation} for ${correlationId} to ${collection}`);\n\n const operationsAfterRemove = oldOperations.filter(operation => operation !== removeOperation);\n const operationsAfterRemoveAndAdd = operationsAfterRemove.includes(addOperation) ? operationsAfterRemove : [...operationsAfterRemove, addOperation];\n\n logger.silly(`operationsAfterRemove: ${operationsAfterRemove}`);\n logger.silly(`operationAfterRemoveAndAdd: ${operationsAfterRemoveAndAdd}`);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n debugDev(`${JSON.stringify(result)}`);\n return result.ok || result;\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n debugDev(`${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSize = sanitize(blobSize);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n blobSize: cleanBlobSize,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n debugDev(`${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"mongo.js","names":["_mongodb","require","_melindaBackendCommons","_melindaCommons","_constants","_utils","_moment","_interopRequireDefault","_httpStatus","_mongoSanitize","_debug","_default","MONGO_URI","collection","db","logger","createLogger","debug","createDebugLogger","debugDev","extend","client","MongoClient","connect","dbConnection","gridFSBucket","GridFSBucket","bucketName","operator","createPrio","createBulk","checkAndSetState","checkAndSetImportJobState","query","createProjection","queryById","checkTimeOut","remove","readContent","removeContent","getOne","getStream","setState","setImportJobState","pushIds","pushMessages","setOperation","setOperations","addBlobSize","setBlobSize","correlationId","cataloger","oCatalogerIn","operation","operationSettings","time","moment","toDate","newQueueItem","operations","prio","queueItemState","QUEUE_ITEM_STATE","VALIDATOR","PENDING_VALIDATION","blobSize","importJobState","CREATE","IMPORT_JOB_STATE","EMPTY","UPDATE","FIX","records","errorMessage","errorStatus","creationTime","modificationTime","JSON","stringify","result","insertOne","acknowledged","info","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","payload","message","logError","contentType","recordLoadParams","stream","UPLOADING","WAITING_FOR_RECORDS","Promise","resolve","reject","outputStream","openUploadStream","on","chunk","write","end","undefined","state","timeOut","params","showParams","limit","skip","rest","find","projection","parseInt","toArray","length","silly","showAll","showOperations","showOperationSettings","showRecordLoadParams","showImportJobState","combinedShowParams","parseBoolean","_id","showParamToField","Object","keys","filter","param","map","excludeObject","fromEntries","checkModTime","findOne","oldState","ABORT","ERROR","DONE","includes","timeoutTime","add","isBefore","finalImportJobStates","REQUEST_TIMEOUT","clean","sanitize","noContent","deleteResult","deleteOne","err","MongoDriverError","indexOf","noStream","readStream","openDownloadStreamByName","BAD_REQUEST","NOT_FOUND","filename","firstBucketResult","fileId","delete","cleanQueueItemState","options","handledIds","rejectedIds","verbose","updateOne","$set","$push","$each","messages","messageField","cleanMessageField","errorString","stateInQueueItemStates","values","stateInQueueItemStatesValidator","stateInQueueItemStatesImporter","IMPORTER","updateValues","forEach","key","findOneAndUpdate","returnDocument","cleanCorrelationId","cleanImportJobState","OPERATIONS","newJobState","getNewJobState","newOperation","oldOperation","cleanNewOperation","ok","addOperation","removeOperation","queueItem","oldOperations","operationsAfterRemove","operationsAfterRemoveAndAdd","$inc","cleanBlobSize"],"sources":["../src/mongo.js"],"sourcesContent":["/* eslint-disable max-lines */\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError, parseBoolean} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\nimport createDebugLogger from 'debug';\n\n//import isDeepStrictEqual from 'util';\n\n/* QueueItem:\n{\n \"correlationId\":\"FOO\",\n \"cataloger\":\"xxx0000\",\n \"oCatalogerIn\":\"xxx0000\"\n \"operation\":\"UPDATE\",\n \"operations\":[\"UPDATE\", \"CREATE\"]\n \"contentType\":\"application/json\",\n \"recordLoadParams\": {\n \"pActiveLibrary\": \"XXX00\",\n \"pInputFile\": \"filename.seq\",\n \"pRejectFile\": \"filename.rej\",\n \"pLogFile\": \"filename.syslog\",\n \"pOldNew\": \"NEW\"\n },\n \"queueItemState\":\"PENDING_QUEUING\",\n \"importJobState\": {\n \"CREATE\": \"EMPTY\",\n \"UPDATE\": \"EMPTY\"\n },\n blobSize: 1,\n records: [],\n errorMessage: '',\n errorStatus: '',\n \"creationTime\":\"2020-01-01T00:00:00.000Z\",\n \"modificationTime\":\"2020-01-01T00:00:01.000Z\",\n}\n*/\n\nexport default async function (MONGO_URI, collection, db = 'rest-api') {\n const logger = createLogger();\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo');\n const debugDev = debug.extend(':dev');\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI);\n const dbConnection = client.db(db);\n const gridFSBucket = new GridFSBucket(dbConnection, {bucketName: collection});\n const operator = dbConnection.collection(collection);\n debugDev(`mongo: ${MONGO_URI}, db: ${db}, collection: ${collection}`);\n\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, createProjection, queryById, checkTimeOut, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n debugDev('createPrio');\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n operation,\n operations: [operation],\n oCatalogerIn,\n operationSettings: {\n prio: true,\n ...operationSettings\n },\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.PENDING_VALIDATION,\n blobSize: 1,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY,\n FIX: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n try {\n debugDev(`Inserting: ${JSON.stringify(newQueueItem)} to ${collection}}`);\n const result = await operator.insertOne(newQueueItem);\n debugDev(JSON.stringify(result));\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n async function createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n oCatalogerIn,\n operation,\n operations: [operation],\n operationSettings: {\n prio: false,\n ...operationSettings\n },\n contentType,\n recordLoadParams,\n queueItemState: stream ? QUEUE_ITEM_STATE.VALIDATOR.UPLOADING : QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS,\n blobSize: 0,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY,\n FIX: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (stream) {\n debug(`Creating streamBulk`);\n try {\n await new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n stream\n .on('error', reject)\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n debug(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n return operator.insertOne(newQueueItem);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n logger.debug(`No stream`);\n debug(`Creating noStreamBulk`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (!stream) {\n try {\n const result = await operator.insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n debug(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return {correlationId, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n }\n\n // Check state that the queueItem has not waited too long and set state\n // Optionally set also queueItems errorStatus & errorMessage\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR/DONE\n // otherwise it sets queueItem and importJobStates to state ABORT and add errorStatus and errorMessage (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return setState({correlationId, state, errorMessage, errorStatus});\n }\n return false;\n }\n\n // Check state that the queueItem has not waited too long and set importJobState\n // Note: checkAndSetImportJobState cannot be used to set queueItems errorStatus & errorMessage (expect in case of a TimeOut)\n async function checkAndSetImportJobState({correlationId, operation, importJobState}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR/DONE\n // otherwise it sets queueItem and importJobStates to state ABORT and errorStatue and errorMessage (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n return setImportJobState({correlationId, operation, importJobState});\n }\n return false;\n }\n\n async function query(params, showParams = {}) {\n logger.debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n const {limit = 1000, skip = 0, ...rest} = params;\n\n const result = await operator.find(rest, {projection: createProjection(showParams)})\n .limit(parseInt(limit, 10))\n .skip(parseInt(skip, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? 'Found!' : 'Not found!'}`);\n logger.silly(`${JSON.stringify(result)}`);\n debug(`${JSON.stringify(result)}`);\n return result;\n }\n\n // We default to NOT showing operations, operationSettings, recordLoadParams and importJobState when a queueItem is queried\n // These can all be shown with showAll\n // Single fields can be shown by showOperation, showOperationSettings, showRecordLoadParams and showImportJobState\n\n function createProjection(showParams = {}) {\n logger.silly(`Creating projection for query: ${JSON.stringify(showParams)}`);\n debug(`Creating projection for query: ${JSON.stringify(showParams)}`);\n const {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n const combinedShowParams = {\n showAll,\n showOperations,\n showOperationSettings,\n showRecordLoadParams,\n showImportJobState\n };\n logger.debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n debug(`${JSON.stringify(combinedShowParams)}`);\n\n // NOTE: parseBoolean parses any non-empty, non-\"false\" string as true!\n if (parseBoolean(showAll)) {\n //if (showAll === true || showAll === '1' || showAll === 1) {\n debug(`ShowAll: ${showAll}`);\n return {\n _id: 0\n };\n }\n\n const showParamToField = {\n 'showOperations': 'operations',\n 'showOperationSettings': 'operationSettings',\n 'showRecordLoadParams': 'recordLoadParams',\n 'showImportJobState': 'importJobState'\n };\n\n const result = Object.keys(combinedShowParams)\n //.filter(param => param !== 'showAll' && combinedShowParams[param] !== true && combinedShowParams[param] !== 1 && combinedShowParams[param] !== '1')\n .filter(param => param !== 'showAll' && !parseBoolean(combinedShowParams[param]))\n .filter(param => showParamToField[param])\n .map((param) => showParamToField[param]);\n logger.silly(`We want to exclude from projection: ${JSON.stringify(result)}`);\n debug(`We want to exclude from projection: ${JSON.stringify(result)}`);\n\n\n const excludeObject = Object.fromEntries(result.map(param => [param, 0]));\n logger.silly(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n debug(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n\n\n return {\n _id: 0,\n ...excludeObject\n };\n }\n\n // Note: edited in v4.2.4 to return queueItem *after* possible timout has aborted it\n // Note: previous versions returned queueItem *before* its state/queueItemState is timeOuted\n async function queryById({correlationId, checkModTime = false}) {\n if (checkModTime) {\n debug(`queryById checkModTime: ${checkModTime}`);\n await checkTimeOut({correlationId});\n return queryById({correlationId});\n }\n const result = await operator.findOne({correlationId}, {projection: {_id: 0}});\n return result;\n }\n\n // Check that if the item has waited too long\n // If the last modification time for the queueItem is older than 1 minute\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR or DONE return false\n\n async function checkTimeOut({correlationId}) {\n const {modificationTime, queueItemState: oldState, importJobState} = await operator.findOne({correlationId});\n //debug(`${modificationTime} - oldState: ${oldState}`);\n // should we check for DONE too?\n if ([QUEUE_ITEM_STATE.ABORT, QUEUE_ITEM_STATE.ERROR, QUEUE_ITEM_STATE.DONE].includes(oldState)) {\n logger.silly(`${correlationId} has already state: ${oldState}`);\n return false;\n }\n\n const timeoutTime = moment(modificationTime).add(1, 'm');\n logger.silly(`${correlationId} timeOut @ ${timeoutTime}`);\n\n if (timeoutTime.isBefore()) {\n const finalImportJobStates = [IMPORT_JOB_STATE.ABORT, IMPORT_JOB_STATE.DONE, IMPORT_JOB_STATE.EMPTY, IMPORT_JOB_STATE.ERROR];\n if (!finalImportJobStates.includes(importJobState.CREATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.FIX)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'FIX', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n await setState({correlationId, state: QUEUE_ITEM_STATE.ABORT, errorStatus: httpStatus.REQUEST_TIMEOUT, errorMessage: `Timeout in ${oldState}`});\n\n return false;\n }\n\n return true;\n }\n\n // eslint-disable-next-line max-statements\n async function remove(params) {\n logger.silly(`${JSON.stringify(params)}`);\n logger.info(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n debug(`${JSON.stringify(params)}`);\n debug(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n const clean = sanitize(params.correlationId);\n logger.silly(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n debug(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n\n\n try {\n //const metadataResult = await getFileMetadata({filename: clean});\n //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);\n const noContent = await removeContent({correlationId: params.correlationId});\n debug(`noContent (removeContent result): ${JSON.stringify(noContent)}`);\n if (noContent) {\n const deleteResult = await operator.deleteOne({correlationId: clean});\n debug(`deleteResult: ${JSON.stringify(deleteResult)}`);\n return true;\n }\n } catch (err) {\n // TEST-COVERAGE: this error is not (currently) tested\n if (err instanceof MongoDriverError) {\n debug(err);\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n debug(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n await operator.deleteOne({correlationId: clean});\n return true;\n }\n logger.error(err.message);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function readContent(correlationId) {\n logger.info(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n debug(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n\n const clean = sanitize(correlationId);\n debug(clean);\n\n const result = await operator.findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n debug(result);\n if (result) {\n const {operationSettings} = result;\n if (operationSettings.prio === false && operationSettings.noStream === false) {\n return {\n contentType: result.contentType,\n readStream: gridFSBucket.openDownloadStreamByName(clean)\n };\n }\n logger.debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n debug(`Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`);\n throw new ApiError(httpStatus.BAD_REQUEST, {message: `Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`});\n }\n\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n\n async function removeContent(params) {\n logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n debug(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n const clean = sanitize(params.correlationId);\n\n const result = await gridFSBucket.find({filename: clean}).toArray();\n debug(`mongo/removeContent: find bucket result ${JSON.stringify(result)}`);\n\n\n if (result.length > 0) {\n // Note: we assume and handle just one file for filename!\n const [firstBucketResult] = result;\n const fileId = firstBucketResult._id;\n\n await gridFSBucket.delete(fileId);\n return true;\n }\n\n logger.debug(`No files for ${params.correlationId} to delete`);\n return true;\n }\n\n function getOne({queueItemState, importJobState = undefined}) {\n //params example: \"queueItemState\": \"IMPORTER.IN_QUEUE\", \"importJobState\":{\"importJobState.UPDATE\": \"IN_QUEUE\"}\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n //debug(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n const cleanQueueItemState = queueItemState ? {queueItemState: sanitize(queueItemState)} : undefined;\n const options = {projection: {_id: 0}};\n\n try {\n\n // Just queueItemState\n if (queueItemState && importJobState === undefined) {\n logger.silly(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n //debug(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return operator.findOne({...cleanQueueItemState}, options);\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n //debug(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return operator.findOne({...importJobState}, options);\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n //debug(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return operator.findOne({...cleanQueueItemState, ...importJobState}, options);\n }\n\n logger.debug(`getOne not working!`);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');\n\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n try {\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(clean);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function pushIds({correlationId, handledIds, rejectedIds}) {\n logger.verbose(`Push ids (${handledIds.length}) and rejectedIds (${rejectedIds.length}) ${correlationId} to ${collection}`);\n logger.debug(`ids (${handledIds.length}): ${JSON.stringify(handledIds)}, rejectedIds ${rejectedIds.length}: ${JSON.stringify(rejectedIds)}`);\n const clean = sanitize(correlationId);\n await operator.updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\n }\n });\n }\n\n async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}}`);\n const clean = sanitize(correlationId);\n const cleanMessageField = sanitize(messageField);\n debug(`${messageField} -> ${cleanMessageField}`);\n await operator.updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n [cleanMessageField]: {$each: messages}\n }\n });\n }\n\n function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n const errorString = errorMessage || errorStatus ? `, Error message: '${JSON.stringify(errorMessage) || ''}', Error status: '${errorStatus || ''}'` : '';\n logger.info(`Setting queue-item state ${state} for ${correlationId}${errorString} to ${collection}`);\n\n const stateInQueueItemStates = Object.values(QUEUE_ITEM_STATE).indexOf(state) > -1;\n const stateInQueueItemStatesValidator = Object.values(QUEUE_ITEM_STATE.VALIDATOR).indexOf(state) > -1;\n const stateInQueueItemStatesImporter = Object.values(QUEUE_ITEM_STATE.IMPORTER).indexOf(state) > -1;\n if (!stateInQueueItemStates && !stateInQueueItemStatesValidator && !stateInQueueItemStatesImporter) {\n debug(`Trying to set invalid state ${state}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const clean = sanitize(correlationId);\n const updateValues = {\n queueItemState: state,\n modificationTime: moment().toDate(),\n errorMessage,\n errorStatus\n };\n\n // Do not update value that are undefined\n // eslint-disable-next-line functional/immutable-data\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return operator\n .findOneAndUpdate(\n {correlationId: clean},\n {$set: updateValues},\n {projection: {_id: 0}, returnDocument: 'after'}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n debug(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanImportJobState = sanitize(importJobState);\n\n if (!(operation in OPERATIONS)) {\n debug(`Error: ${operation} is not in ${JSON.stringify(OPERATIONS)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Invalid operation for import job state');\n }\n\n if (!(cleanImportJobState in IMPORT_JOB_STATE)) {\n debug(`Error: ${cleanImportJobState} is not in ${JSON.stringify(IMPORT_JOB_STATE)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Invalid import job state');\n }\n\n const newJobState = getNewJobState(operation, cleanImportJobState);\n\n\n function getNewJobState(operation, cleanImportJobState) {\n if (operation === OPERATIONS.CREATE) {\n return {'importJobState.CREATE': cleanImportJobState};\n }\n if (operation === OPERATIONS.UPDATE) {\n return {'importJobState.UPDATE': cleanImportJobState};\n }\n if (operation === OPERATIONS.FIX) {\n return {'importJobState.FIX': cleanImportJobState};\n }\n // istanbul ignore next\n // Ignoring for coverage - we error this already\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n return operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n }\n\n async function setOperation({correlationId, operation}) {\n const newOperation = operation;\n const {operation: oldOperation} = await operator.findOne({correlationId});\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanNewOperation = sanitize(newOperation);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operation: cleanNewOperation,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n debugDev(`${JSON.stringify(result)}`);\n return result.ok || result;\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const queueItem = await operator.findOne({correlationId: cleanCorrelationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n\n const oldOperations = queueItem.operations;\n\n logger.info(`Setting queue-item operations from ${JSON.stringify(oldOperations)} by adding ${addOperation} and removing ${removeOperation} for ${correlationId} to ${collection}`);\n\n const operationsAfterRemove = oldOperations.filter(operation => operation !== removeOperation);\n const operationsAfterRemoveAndAdd = operationsAfterRemove.includes(addOperation) ? operationsAfterRemove : [...operationsAfterRemove, addOperation];\n\n logger.silly(`operationsAfterRemove: ${operationsAfterRemove}`);\n logger.silly(`operationAfterRemoveAndAdd: ${operationsAfterRemoveAndAdd}`);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n debugDev(`${JSON.stringify(result)}`);\n return result.ok || result;\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n debugDev(`${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSize = sanitize(blobSize);\n\n const result = await operator.findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n blobSize: cleanBlobSize,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n debugDev(`${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -65,10 +65,12 @@ async function callback({
65
65
  expectedOpResult = undefined,
66
66
  updateStateBeforeTest = undefined,
67
67
  resultIndex = undefined,
68
- createBulkParams = undefined
68
+ createBulkParams = undefined,
69
+ expectedFileCount = undefined,
70
+ expectUndefined = undefined
69
71
  }) {
70
72
  const mongoUri = await mongoFixtures.getUri();
71
- const mongoOperator = await (0, _mongo.default)(mongoUri, 'foobar', '', true);
73
+ const mongoOperator = await (0, _mongo.default)(mongoUri, 'foobar', '');
72
74
  const expectedResult = await getFixture('expectedResult.json');
73
75
  // DEVELOP: we could use sama function for most of tests?
74
76
  // debug(typeof mongoUri); // eslint-disable-line
@@ -118,7 +120,8 @@ async function callback({
118
120
  debug(`createBulkResult: ${JSON.stringify(opResult)}`);
119
121
  await compareToFirstDbEntry({
120
122
  expectedResult,
121
- formatDates: true
123
+ formatDates: true,
124
+ expectedFileCount
122
125
  });
123
126
  } catch (error) {
124
127
  handleError({
@@ -346,10 +349,12 @@ async function callback({
346
349
  }
347
350
  const opResult = await mongoOperator.remove(params);
348
351
  debug(`remove result: ${JSON.stringify(opResult)}`);
352
+ debug(`expectUndefined: ${expectUndefined}`);
349
353
  await compareToFirstDbEntry({
350
- expectedResult: undefined,
354
+ expectedResult: expectUndefined ? undefined : expectedResult,
351
355
  expectModificationTime,
352
- formatDates: false
356
+ formatDates: true,
357
+ expectedFileCount
353
358
  });
354
359
  } catch (error) {
355
360
  handleError({
@@ -676,13 +681,15 @@ async function callback({
676
681
  async function compareToFirstDbEntry({
677
682
  expectedResult,
678
683
  expectModificationTime = false,
679
- formatDates = true
684
+ formatDates = true,
685
+ expectedFileCount = undefined
680
686
  }) {
681
687
  const result = await compareToDbEntry({
682
688
  expectedResult,
683
689
  resultIndex: 0,
684
690
  expectModificationTime,
685
- formatDates
691
+ formatDates,
692
+ expectedFileCount
686
693
  });
687
694
  return result;
688
695
  }
@@ -690,7 +697,8 @@ async function compareToDbEntry({
690
697
  expectedResult,
691
698
  resultIndex = 0,
692
699
  expectModificationTime = false,
693
- formatDates = true
700
+ formatDates = true,
701
+ expectedFileCount = undefined
694
702
  }) {
695
703
  const dump = await mongoFixtures.dump();
696
704
  debug(`--- We have ${dump.foobar.length} documents in db`);
@@ -699,11 +707,15 @@ async function compareToDbEntry({
699
707
  debug(`db result (document ${resultIndex}): ${JSON.stringify(result)}`);
700
708
  const dump2 = await mongoFixtures.dump();
701
709
  debug(`--- We have ${dump2.foobar.length} documents in db now`);
710
+ checkFileCount({
711
+ dump,
712
+ expectedFileCount
713
+ });
702
714
  checkModificationTime({
703
715
  result,
704
716
  expectModificationTime
705
717
  });
706
- if (formatDates) {
718
+ if (formatDates && expectedResult !== undefined) {
707
719
  const formattedResult = formatQueueItem(result);
708
720
  (0, _chai.expect)(formattedResult).to.eql(expectedResult);
709
721
  return;
@@ -711,6 +723,18 @@ async function compareToDbEntry({
711
723
  (0, _chai.expect)(result).to.eql(expectedResult);
712
724
  return;
713
725
  }
726
+ function checkFileCount({
727
+ dump,
728
+ expectedFileCount
729
+ }) {
730
+ if (expectedFileCount !== undefined) {
731
+ const fileCount = dump['foobar.files']?.length;
732
+ debug(`--- We have ${fileCount} files in db`);
733
+ (0, _chai.expect)(fileCount).to.eql(expectedFileCount);
734
+ return;
735
+ }
736
+ return;
737
+ }
714
738
  function checkModificationTime({
715
739
  result,
716
740
  expectModificationTime
@@ -1 +1 @@
1
- {"version":3,"file":"mongo.spec.js","names":["_chai","require","_fixura","_fixuraMongo","_interopRequireDefault","_fixugen","_mongo","_debug","mongoFixtures","debug","createDebugLogger","generateTests","callback","path","__dirname","recurse","useMetadataFile","fixura","failWhenNotFound","reader","READERS","JSON","mocha","before","initMongofixtures","beforeEach","clear","afterEach","after","close","mongoFixturesFactory","rootPath","gridFS","bucketName","useObjectId","getFixture","functionName","params","expectModificationTime","preFillDb","expectedToThrow","expectedErrorMessage","expectedErrorStatus","contentStream","expectedOpResult","undefined","updateStateBeforeTest","resultIndex","createBulkParams","mongoUri","getUri","mongoOperator","createMongoOperator","expectedResult","populate","stringify","opResult","createPrio","compareToFirstDbEntry","formatDates","error","handleError","stream","components","STREAM","params2","createBulk","correlationId","setState","state","checkAndSetState","expect","to","eql","checkAndSetImportJobState","showParams","query","queryById","formatQueueItem","compareResultIndex","compareToDbEntry","checkTimeOut","createBulkResult","remove","readContent","opResultString","streamToString","readStream","contentType","contentStreamString","TEXT","getOne","getStream","pushIds","pushMessages","setImportJobState","setOperation","setOperations","addBlobSize","setBlobSize","Error","result","dump","foobar","length","dump2","checkModificationTime","formattedResult","modificationTime","not","queueItem","filteredQueueItem","creationTime","errorMessage","message","payload","errorStatus","status","chunks","Promise","resolve","reject","on","chunk","push","Buffer","from","err","concat","toString"],"sources":["../src/mongo.spec.js"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable no-console */\nimport {expect} from 'chai';\nimport {READERS} from '@natlibfi/fixura';\nimport mongoFixturesFactory from '@natlibfi/fixura-mongo';\nimport generateTests from '@natlibfi/fixugen';\nimport createMongoOperator from './mongo';\nimport createDebugLogger from 'debug';\n\nlet mongoFixtures; // eslint-disable-line functional/no-let\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:test');\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'mongo'],\n recurse: false,\n useMetadataFile: true,\n fixura: {\n failWhenNotFound: true,\n reader: READERS.JSON\n },\n mocha: {\n before: async () => {\n //debug(`<< Before`);\n await initMongofixtures();\n },\n beforeEach: async () => {\n //debug(`<< BeforeEach`);\n await mongoFixtures.clear();\n },\n afterEach: async () => {\n //debug(`<< AfterEach`);\n await mongoFixtures.clear();\n },\n after: async () => {\n //debug(`<< After`);\n await mongoFixtures.close();\n }\n }\n});\n\nasync function initMongofixtures() {\n mongoFixtures = await mongoFixturesFactory({\n recurse: false,\n rootPath: [__dirname, '..', 'test-fixtures', 'mongo'],\n gridFS: {bucketName: 'foobar'},\n useObjectId: true\n });\n}\n\n// eslint-disable-next-line max-statements, complexity\nasync function callback({\n getFixture,\n functionName,\n params,\n expectModificationTime = false,\n preFillDb = false,\n expectedToThrow = false,\n expectedErrorMessage = '',\n expectedErrorStatus = '',\n contentStream = false,\n expectedOpResult = undefined,\n updateStateBeforeTest = undefined,\n resultIndex = undefined,\n createBulkParams = undefined\n}) {\n\n const mongoUri = await mongoFixtures.getUri();\n const mongoOperator = await createMongoOperator(mongoUri, 'foobar', '', true);\n const expectedResult = await getFixture('expectedResult.json');\n // DEVELOP: we could use sama function for most of tests?\n // debug(typeof mongoUri); // eslint-disable-line\n\n if (preFillDb) { // eslint-disable-line functional/no-conditional-statements\n await mongoFixtures.populate(getFixture('dbContents.json'));\n }\n\n //return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n if (functionName === 'createPrio') {\n try {\n debug(`CreatePrio`);\n debug(JSON.stringify(params));\n const opResult = await mongoOperator.createPrio(params);\n debug(`createPrio result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'createBulk') {\n try {\n debug(`CreateBulk`);\n debug(JSON.stringify(params));\n //{correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : params.stream;\n const params2 = {...params, stream};\n const opResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'checkAndSetState') {\n try {\n debug(`checkAndSetState`);\n debug(JSON.stringify(params));\n //{correlationId, state, errorMessage = undefined, errorStatus = undefined})\n // timeout\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.checkAndSetState(params);\n debug(`checkAndSetState result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n }\n return;\n }\n\n\n if (functionName === 'checkAndSetImportJobState') {\n try {\n debug(`checkAndSetImportJobState`);\n debug(JSON.stringify(params));\n //{correlationId, operation, importJobState, errorMessage = '', errorStatus = ''}\n // timeout\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.checkAndSetImportJobState(params);\n debug(`checkAndSetImportJobState result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'query') {\n try {\n debug(`query`);\n debug(JSON.stringify(params));\n //params, showParams = {}\n //params: skip, limit, rest (rest: actual mongo queryParams)\n //showParams: {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n debug(`${JSON.stringify(params.params)}`);\n debug(`${JSON.stringify(params.showParams)}`);\n const opResult = await mongoOperator.query(params.params, params.showParams);\n debug(`query result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n /*\n\n // NOT EXPORTED\n if (functionName === 'createProjection') {\n try {\n debug(`createProjection`);\n debug(JSON.stringify(params));\n //showParams = {}\n //no db\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n*/\n\n if (functionName === 'queryById') {\n try {\n debug(`queryById`);\n debug(JSON.stringify(params));\n //{correlationId, checkModTime = false}\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.queryById(params);\n debug(`queryById result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(formatQueueItem(opResult)).to.eql(formatQueueItem(expectedOpResult));\n }\n const compareResultIndex = resultIndex ? resultIndex : 0;\n await compareToDbEntry({expectedResult, resultIndex: compareResultIndex, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n // only returned for test\n if (functionName === 'checkTimeOut') {\n try {\n debug(`checkTimeOut`);\n debug(JSON.stringify(params));\n //{correlationId}\n // timeout\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.checkTimeOut(params);\n debug(`checkTimeOut result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'remove') {\n\n try {\n debug(`remove`);\n debug(JSON.stringify(params));\n //params: {correlationId}\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams) {\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : createBulkParams.stream;\n //debug(stream);\n const params2 = {...createBulkParams, stream};\n const createBulkResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(createBulkResult)}`);\n }\n\n const opResult = await mongoOperator.remove(params);\n debug(`remove result: ${JSON.stringify(opResult)}`);\n\n await compareToFirstDbEntry({expectedResult: undefined, expectModificationTime, formatDates: false});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'readContent') {\n try {\n debug(`readContent`);\n debug(JSON.stringify(params));\n //correlationId\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams) {\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : createBulkParams.stream;\n //debug(stream);\n const params2 = {...createBulkParams, stream};\n const createBulkResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(createBulkResult)}`);\n }\n\n const opResult = await mongoOperator.readContent(params);\n const opResultString = await streamToString(opResult.readStream);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams && createBulkParams.contentType) {\n expect(opResult.contentType).to.eql(createBulkParams.contentType);\n }\n\n if (contentStream) {\n const contentStreamString = await getFixture({components: ['contentStream'], reader: READERS.TEXT});\n //debug(contentStreamString);\n expect(opResultString).to.eql(contentStreamString);\n return;\n }\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n /*\n\n if (functionName === 'removeContent') {\n try {\n debug(`removeContent`);\n debug(JSON.stringify(params));\n //correlationId\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n */\n\n if (functionName === 'getOne') {\n try {\n debug(`getOne`);\n debug(JSON.stringify(params));\n //{queueItemState, importJobState = undefined}\n const opResult = await mongoOperator.getOne(params);\n debug(`getOne result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n expect(opResult).to.eql(expectedOpResult);\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'getStream') {\n try {\n debug(`getStream`);\n debug(JSON.stringify(params));\n //correlationId\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams) {\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : createBulkParams.stream;\n //debug(stream);\n const params2 = {...createBulkParams, stream};\n const createBulkResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(createBulkResult)}`);\n }\n //const {correlationId} = params;\n\n const opResult = mongoOperator.getStream(params);\n const opResultString = await streamToString(opResult);\n\n if (contentStream) {\n const contentStreamString = await getFixture({components: ['contentStream'], reader: READERS.TEXT});\n //debug(contentStreamString);\n expect(opResultString).to.eql(contentStreamString);\n return;\n }\n\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'pushIds') {\n try {\n debug(`pushIds`);\n debug(JSON.stringify(params));\n //{correlationId, handledIds, rejectedIds}\n const opResult = await mongoOperator.pushIds(params);\n debug(`pushIds result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'pushMessages') {\n try {\n debug(`pushMessages`);\n debug(JSON.stringify(params));\n //{correlationId, messages, messageField = 'messages'}\n const opResult = await mongoOperator.pushMessages(params);\n debug(`pushMessages result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'setState') {\n try {\n debug(`setState`);\n debug(JSON.stringify(params));\n //{correlationId, state, errorMessage = undefined, errorStatus = undefined}\n const opResult = await mongoOperator.setState(params);\n debug(`setState result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'setImportJobState') {\n try {\n debug(`setImportJobState`);\n debug(JSON.stringify(params));\n //{correlationId, operation, importJobState}\n const opResult = await mongoOperator.setImportJobState(params);\n debug(`setImportJobState result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'setOperation') {\n try {\n debug(`setOperation`);\n debug(JSON.stringify(params));\n //{correlationId, operation}\n const opResult = await mongoOperator.setOperation(params);\n debug(`setOperation result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'setOperations') {\n try {\n debug(`setOperations`);\n debug(JSON.stringify(params));\n //{correlationId, addOperation, removeOperation = undefined}\n const opResult = await mongoOperator.setOperations(params);\n debug(`setOperations result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'addBlobSize') {\n try {\n debug(`addBlobSize`);\n debug(JSON.stringify(params));\n //{correlationId}\n const opResult = await mongoOperator.addBlobSize(params);\n debug(`addBlobSize result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'setBlobSize') {\n try {\n debug(`setBlobSize`);\n debug(JSON.stringify(params));\n //{correlationId, blobSize}\n const opResult = await mongoOperator.setBlobSize(params);\n debug(`setBlobSize result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n throw new Error(`Unknown functionName: ${functionName}`);\n}\n\n\nasync function compareToFirstDbEntry({expectedResult, expectModificationTime = false, formatDates = true}) {\n const result = await compareToDbEntry({expectedResult, resultIndex: 0, expectModificationTime, formatDates});\n return result;\n}\n\nasync function compareToDbEntry({expectedResult, resultIndex = 0, expectModificationTime = false, formatDates = true}) {\n const dump = await mongoFixtures.dump();\n debug(`--- We have ${dump.foobar.length} documents in db`);\n debug(dump.foobar);\n const result = await dump.foobar[resultIndex];\n debug(`db result (document ${resultIndex}): ${JSON.stringify(result)}`);\n const dump2 = await mongoFixtures.dump();\n debug(`--- We have ${dump2.foobar.length} documents in db now`);\n\n checkModificationTime({result, expectModificationTime});\n\n if (formatDates) {\n const formattedResult = formatQueueItem(result);\n expect(formattedResult).to.eql(expectedResult);\n return;\n }\n expect(result).to.eql(expectedResult);\n return;\n}\n\n\nfunction checkModificationTime({result, expectModificationTime}) {\n if (expectModificationTime) {\n debug('Check if modificationTime was edited');\n expect(result.modificationTime).to.not.eql('');\n debug(`OK. We have modified modificationTime`);\n return;\n }\n return;\n}\n\n\nfunction formatQueueItem(queueItem) {\n const filteredQueueItem = {\n ...queueItem,\n creationTime: '',\n modificationTime: ''\n };\n debug(`Formatted result: ${JSON.stringify(filteredQueueItem)}`);\n return filteredQueueItem;\n}\n\nfunction handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus}) {\n debug(error);\n if (expectedToThrow) {\n debug('OK. Expected to throw');\n debug(JSON.stringify(error));\n // eslint-disable-next-line max-lines\n if (expectedErrorMessage !== '' || expectedErrorStatus !== '') {\n const errorMessage = error.message || error.payload.message || error.payload || '';\n debug(errorMessage);\n expect(errorMessage).to.eql(expectedErrorMessage);\n const errorStatus = error.status || '';\n expect(errorStatus).to.eql(expectedErrorStatus);\n return;\n }\n return;\n }\n debug('NOT OK. Not expexted to throw');\n throw error;\n}\n\nfunction streamToString(stream) {\n const chunks = [];\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line functional/immutable-data\n stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));\n stream.on('error', (err) => reject(err));\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"mongo.spec.js","names":["_chai","require","_fixura","_fixuraMongo","_interopRequireDefault","_fixugen","_mongo","_debug","mongoFixtures","debug","createDebugLogger","generateTests","callback","path","__dirname","recurse","useMetadataFile","fixura","failWhenNotFound","reader","READERS","JSON","mocha","before","initMongofixtures","beforeEach","clear","afterEach","after","close","mongoFixturesFactory","rootPath","gridFS","bucketName","useObjectId","getFixture","functionName","params","expectModificationTime","preFillDb","expectedToThrow","expectedErrorMessage","expectedErrorStatus","contentStream","expectedOpResult","undefined","updateStateBeforeTest","resultIndex","createBulkParams","expectedFileCount","expectUndefined","mongoUri","getUri","mongoOperator","createMongoOperator","expectedResult","populate","stringify","opResult","createPrio","compareToFirstDbEntry","formatDates","error","handleError","stream","components","STREAM","params2","createBulk","correlationId","setState","state","checkAndSetState","expect","to","eql","checkAndSetImportJobState","showParams","query","queryById","formatQueueItem","compareResultIndex","compareToDbEntry","checkTimeOut","createBulkResult","remove","readContent","opResultString","streamToString","readStream","contentType","contentStreamString","TEXT","getOne","getStream","pushIds","pushMessages","setImportJobState","setOperation","setOperations","addBlobSize","setBlobSize","Error","result","dump","foobar","length","dump2","checkFileCount","checkModificationTime","formattedResult","fileCount","modificationTime","not","queueItem","filteredQueueItem","creationTime","errorMessage","message","payload","errorStatus","status","chunks","Promise","resolve","reject","on","chunk","push","Buffer","from","err","concat","toString"],"sources":["../src/mongo.spec.js"],"sourcesContent":["/* eslint-disable max-lines */\n/* eslint-disable no-console */\nimport {expect} from 'chai';\nimport {READERS} from '@natlibfi/fixura';\nimport mongoFixturesFactory from '@natlibfi/fixura-mongo';\nimport generateTests from '@natlibfi/fixugen';\nimport createMongoOperator from './mongo';\nimport createDebugLogger from 'debug';\n\nlet mongoFixtures; // eslint-disable-line functional/no-let\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:test');\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'mongo'],\n recurse: false,\n useMetadataFile: true,\n fixura: {\n failWhenNotFound: true,\n reader: READERS.JSON\n },\n mocha: {\n before: async () => {\n //debug(`<< Before`);\n await initMongofixtures();\n },\n beforeEach: async () => {\n //debug(`<< BeforeEach`);\n await mongoFixtures.clear();\n },\n afterEach: async () => {\n //debug(`<< AfterEach`);\n await mongoFixtures.clear();\n },\n after: async () => {\n //debug(`<< After`);\n await mongoFixtures.close();\n }\n }\n});\n\nasync function initMongofixtures() {\n mongoFixtures = await mongoFixturesFactory({\n recurse: false,\n rootPath: [__dirname, '..', 'test-fixtures', 'mongo'],\n gridFS: {bucketName: 'foobar'},\n useObjectId: true\n });\n}\n\n// eslint-disable-next-line max-statements, complexity\nasync function callback({\n getFixture,\n functionName,\n params,\n expectModificationTime = false,\n preFillDb = false,\n expectedToThrow = false,\n expectedErrorMessage = '',\n expectedErrorStatus = '',\n contentStream = false,\n expectedOpResult = undefined,\n updateStateBeforeTest = undefined,\n resultIndex = undefined,\n createBulkParams = undefined,\n expectedFileCount = undefined,\n expectUndefined = undefined\n}) {\n\n const mongoUri = await mongoFixtures.getUri();\n const mongoOperator = await createMongoOperator(mongoUri, 'foobar', '');\n const expectedResult = await getFixture('expectedResult.json');\n // DEVELOP: we could use sama function for most of tests?\n // debug(typeof mongoUri); // eslint-disable-line\n\n if (preFillDb) { // eslint-disable-line functional/no-conditional-statements\n await mongoFixtures.populate(getFixture('dbContents.json'));\n }\n\n //return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n if (functionName === 'createPrio') {\n try {\n debug(`CreatePrio`);\n debug(JSON.stringify(params));\n const opResult = await mongoOperator.createPrio(params);\n debug(`createPrio result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'createBulk') {\n try {\n debug(`CreateBulk`);\n debug(JSON.stringify(params));\n //{correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : params.stream;\n const params2 = {...params, stream};\n const opResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, formatDates: true, expectedFileCount});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'checkAndSetState') {\n try {\n debug(`checkAndSetState`);\n debug(JSON.stringify(params));\n //{correlationId, state, errorMessage = undefined, errorStatus = undefined})\n // timeout\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.checkAndSetState(params);\n debug(`checkAndSetState result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n }\n return;\n }\n\n\n if (functionName === 'checkAndSetImportJobState') {\n try {\n debug(`checkAndSetImportJobState`);\n debug(JSON.stringify(params));\n //{correlationId, operation, importJobState, errorMessage = '', errorStatus = ''}\n // timeout\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.checkAndSetImportJobState(params);\n debug(`checkAndSetImportJobState result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'query') {\n try {\n debug(`query`);\n debug(JSON.stringify(params));\n //params, showParams = {}\n //params: skip, limit, rest (rest: actual mongo queryParams)\n //showParams: {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n debug(`${JSON.stringify(params.params)}`);\n debug(`${JSON.stringify(params.showParams)}`);\n const opResult = await mongoOperator.query(params.params, params.showParams);\n debug(`query result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n /*\n\n // NOT EXPORTED\n if (functionName === 'createProjection') {\n try {\n debug(`createProjection`);\n debug(JSON.stringify(params));\n //showParams = {}\n //no db\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n*/\n\n if (functionName === 'queryById') {\n try {\n debug(`queryById`);\n debug(JSON.stringify(params));\n //{correlationId, checkModTime = false}\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.queryById(params);\n debug(`queryById result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(formatQueueItem(opResult)).to.eql(formatQueueItem(expectedOpResult));\n }\n const compareResultIndex = resultIndex ? resultIndex : 0;\n await compareToDbEntry({expectedResult, resultIndex: compareResultIndex, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n // only returned for test\n if (functionName === 'checkTimeOut') {\n try {\n debug(`checkTimeOut`);\n debug(JSON.stringify(params));\n //{correlationId}\n // timeout\n // eslint-disable-next-line functional/no-conditional-statements\n if (updateStateBeforeTest && params.correlationId) {\n debug(`setState to reset modificationTime`);\n await mongoOperator.setState({correlationId: params.correlationId, state: updateStateBeforeTest});\n }\n const opResult = await mongoOperator.checkTimeOut(params);\n debug(`checkTimeOut result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (expectedOpResult !== undefined) {\n expect(opResult).to.eql(expectedOpResult);\n }\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'remove') {\n\n try {\n debug(`remove`);\n debug(JSON.stringify(params));\n //params: {correlationId}\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams) {\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : createBulkParams.stream;\n //debug(stream);\n const params2 = {...createBulkParams, stream};\n const createBulkResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(createBulkResult)}`);\n }\n\n const opResult = await mongoOperator.remove(params);\n debug(`remove result: ${JSON.stringify(opResult)}`);\n debug(`expectUndefined: ${expectUndefined}`);\n\n await compareToFirstDbEntry({expectedResult: expectUndefined ? undefined : expectedResult, expectModificationTime, formatDates: true, expectedFileCount});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'readContent') {\n try {\n debug(`readContent`);\n debug(JSON.stringify(params));\n //correlationId\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams) {\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : createBulkParams.stream;\n //debug(stream);\n const params2 = {...createBulkParams, stream};\n const createBulkResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(createBulkResult)}`);\n }\n\n const opResult = await mongoOperator.readContent(params);\n const opResultString = await streamToString(opResult.readStream);\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams && createBulkParams.contentType) {\n expect(opResult.contentType).to.eql(createBulkParams.contentType);\n }\n\n if (contentStream) {\n const contentStreamString = await getFixture({components: ['contentStream'], reader: READERS.TEXT});\n //debug(contentStreamString);\n expect(opResultString).to.eql(contentStreamString);\n return;\n }\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n /*\n\n if (functionName === 'removeContent') {\n try {\n debug(`removeContent`);\n debug(JSON.stringify(params));\n //correlationId\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n */\n\n if (functionName === 'getOne') {\n try {\n debug(`getOne`);\n debug(JSON.stringify(params));\n //{queueItemState, importJobState = undefined}\n const opResult = await mongoOperator.getOne(params);\n debug(`getOne result: ${JSON.stringify(opResult)} (it should be: ${JSON.stringify(expectedOpResult)})}`);\n\n expect(opResult).to.eql(expectedOpResult);\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'getStream') {\n try {\n debug(`getStream`);\n debug(JSON.stringify(params));\n //correlationId\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (createBulkParams) {\n const stream = contentStream ? await getFixture({components: ['contentStream'], reader: READERS.STREAM}) : createBulkParams.stream;\n //debug(stream);\n const params2 = {...createBulkParams, stream};\n const createBulkResult = await mongoOperator.createBulk(params2);\n debug(`createBulkResult: ${JSON.stringify(createBulkResult)}`);\n }\n //const {correlationId} = params;\n\n const opResult = mongoOperator.getStream(params);\n const opResultString = await streamToString(opResult);\n\n if (contentStream) {\n const contentStreamString = await getFixture({components: ['contentStream'], reader: READERS.TEXT});\n //debug(contentStreamString);\n expect(opResultString).to.eql(contentStreamString);\n return;\n }\n\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'pushIds') {\n try {\n debug(`pushIds`);\n debug(JSON.stringify(params));\n //{correlationId, handledIds, rejectedIds}\n const opResult = await mongoOperator.pushIds(params);\n debug(`pushIds result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'pushMessages') {\n try {\n debug(`pushMessages`);\n debug(JSON.stringify(params));\n //{correlationId, messages, messageField = 'messages'}\n const opResult = await mongoOperator.pushMessages(params);\n debug(`pushMessages result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'setState') {\n try {\n debug(`setState`);\n debug(JSON.stringify(params));\n //{correlationId, state, errorMessage = undefined, errorStatus = undefined}\n const opResult = await mongoOperator.setState(params);\n debug(`setState result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'setImportJobState') {\n try {\n debug(`setImportJobState`);\n debug(JSON.stringify(params));\n //{correlationId, operation, importJobState}\n const opResult = await mongoOperator.setImportJobState(params);\n debug(`setImportJobState result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n\n if (functionName === 'setOperation') {\n try {\n debug(`setOperation`);\n debug(JSON.stringify(params));\n //{correlationId, operation}\n const opResult = await mongoOperator.setOperation(params);\n debug(`setOperation result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'setOperations') {\n try {\n debug(`setOperations`);\n debug(JSON.stringify(params));\n //{correlationId, addOperation, removeOperation = undefined}\n const opResult = await mongoOperator.setOperations(params);\n debug(`setOperations result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'addBlobSize') {\n try {\n debug(`addBlobSize`);\n debug(JSON.stringify(params));\n //{correlationId}\n const opResult = await mongoOperator.addBlobSize(params);\n debug(`addBlobSize result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n if (functionName === 'setBlobSize') {\n try {\n debug(`setBlobSize`);\n debug(JSON.stringify(params));\n //{correlationId, blobSize}\n const opResult = await mongoOperator.setBlobSize(params);\n debug(`setBlobSize result: ${JSON.stringify(opResult)}`);\n await compareToFirstDbEntry({expectedResult, expectModificationTime, formatDates: true});\n } catch (error) {\n handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus});\n return;\n }\n return;\n }\n\n throw new Error(`Unknown functionName: ${functionName}`);\n}\n\n\nasync function compareToFirstDbEntry({expectedResult, expectModificationTime = false, formatDates = true, expectedFileCount = undefined}) {\n const result = await compareToDbEntry({expectedResult, resultIndex: 0, expectModificationTime, formatDates, expectedFileCount});\n return result;\n}\n\nasync function compareToDbEntry({expectedResult, resultIndex = 0, expectModificationTime = false, formatDates = true, expectedFileCount = undefined}) {\n const dump = await mongoFixtures.dump();\n debug(`--- We have ${dump.foobar.length} documents in db`);\n debug(dump.foobar);\n const result = await dump.foobar[resultIndex];\n debug(`db result (document ${resultIndex}): ${JSON.stringify(result)}`);\n const dump2 = await mongoFixtures.dump();\n debug(`--- We have ${dump2.foobar.length} documents in db now`);\n\n checkFileCount({dump, expectedFileCount});\n\n checkModificationTime({result, expectModificationTime});\n\n if (formatDates && expectedResult !== undefined) {\n const formattedResult = formatQueueItem(result);\n expect(formattedResult).to.eql(expectedResult);\n return;\n }\n expect(result).to.eql(expectedResult);\n return;\n}\n\nfunction checkFileCount({dump, expectedFileCount}) {\n if (expectedFileCount !== undefined) {\n const fileCount = dump['foobar.files']?.length;\n debug(`--- We have ${fileCount} files in db`);\n expect(fileCount).to.eql(expectedFileCount);\n return;\n }\n return;\n\n}\n\nfunction checkModificationTime({result, expectModificationTime}) {\n if (expectModificationTime) {\n debug('Check if modificationTime was edited');\n expect(result.modificationTime).to.not.eql('');\n debug(`OK. We have modified modificationTime`);\n return;\n }\n return;\n}\n\n\nfunction formatQueueItem(queueItem) {\n const filteredQueueItem = {\n ...queueItem,\n creationTime: '',\n modificationTime: ''\n };\n debug(`Formatted result: ${JSON.stringify(filteredQueueItem)}`);\n return filteredQueueItem;\n}\n\nfunction handleError({error, expectedToThrow, expectedErrorMessage, expectedErrorStatus}) {\n debug(error);\n if (expectedToThrow) {\n debug('OK. Expected to throw');\n debug(JSON.stringify(error));\n // eslint-disable-next-line max-lines\n if (expectedErrorMessage !== '' || expectedErrorStatus !== '') {\n const errorMessage = error.message || error.payload.message || error.payload || '';\n debug(errorMessage);\n expect(errorMessage).to.eql(expectedErrorMessage);\n const errorStatus = error.status || '';\n expect(errorStatus).to.eql(expectedErrorStatus);\n return;\n }\n return;\n }\n debug('NOT OK. Not expexted to throw');\n throw error;\n}\n\nfunction streamToString(stream) {\n const chunks = [];\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line functional/immutable-data\n stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));\n stream.on('error', (err) => reject(err));\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));\n });\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "url": "git@github.com:natlibfi/melinda-rest-api-commons.git"
15
15
  },
16
16
  "license": "MIT",
17
- "version": "4.2.4-alpha.6",
17
+ "version": "4.2.4-alpha.8",
18
18
  "main": "./dist/index.js",
19
19
  "engines": {
20
20
  "node": ">=18"