UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

972 lines (971 loc) 35.1 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/api/tasks.coffee</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">All files</a> / <a href="index.html">src/api</a> tasks.coffee </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">16.35% </span> <span class="quiet">Statements</span> <span class='fraction'>17/104</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/16</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/13</span> </div> <div class='fl pad1y space-right2'> <span class="strong">16.35% </span> <span class="quiet">Lines</span> <span class='fraction'>17/104</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">Task = require('../model/tasks').Task Transaction = require('../model/transactions').Transaction AutoRetry = require('../model/autoRetry').AutoRetry Channels = require('../model/channels') Channel = Channels.Channel Q = require 'q' logger = require 'winston' &nbsp; authorisation = require './authorisation' &nbsp; utils = require '../utils' &nbsp; ##################################################### # Function to check if rerun task creation is valid # ##################################################### &nbsp; isRerunPermissionsValid = <span class="fstat-no" title="function not covered" >(</span>user, transactions, callback) -&gt; &nbsp; # if 'admin' - set rerun permissions to true if authorisation.inGroup("admin", user) is true &nbsp; # admin user allowed to rerun any transactions callback null, true else &nbsp; Transaction.distinct "channelID", { _id: $in: transactions.tids } , <span class="fstat-no" title="function not covered" >(</span>err, transChannels) -&gt; Channel.distinct "_id", { txRerunAcl: $in: user.groups } , <span class="fstat-no" title="function not covered" >(</span>err, allowedChannels) -&gt; # for each transaction channel found to be rerun <span class="cstat-no" title="statement not covered" > for trx in transChannels</span> # assume transaction channnel is not allowed at first <span class="cstat-no" title="statement not covered" > matchFound = f</span>alse &nbsp; # for each user allowed channel to be rerun <span class="cstat-no" title="statement not covered" > for chan in allowedChannels</span> i</span>f trx.equals(chan) then <span class="cstat-no" title="statement not covered" >matchFound = true &nbsp; # if one channel not allowed then rerun NOT allowed <span class="cstat-no" title="statement not covered" ></span> return callback null, false if not matchFound callback null, true &nbsp; &nbsp; ###################################### # Retrieves the list of active tasks # ###################################### exports.getTasks = <span class="fstat-no" title="function not covered" ></span>-&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to getTasks denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; try &nbsp; <span class="cstat-no" title="statement not covered" > filtersObject = this.request.q</span>uery &nbsp; #get limit and page values <span class="cstat-no" title="statement not covered" > filterLimit = filtersObject.f</span>ilterLimit <span class="cstat-no" title="statement not covered" > filterPage = filtersObject.f</span>ilterPage &nbsp; #determine skip amount <span class="cstat-no" title="statement not covered" > filterSkip = filterPage*f</span>ilterLimit &nbsp; # get filters object <span class="cstat-no" title="statement not covered" > filters = J</span>SON.parse filtersObject.filters &nbsp; # parse date to get it into the correct format for querying if filters['created'] <span class="cstat-no" title="statement not covered" > filters['created'] = JSON.parse filters['created']</span> &nbsp; # exclude transactions object from tasks list projectionFiltersObject = { 'transactions': 0 } &nbsp; <span class="cstat-no" title="statement not covered" > this.body = y</span>ield Task.find({}).exec() &nbsp; # execute the query this.body = yield Task .find filters, projectionFiltersObject .skip filterSkip .limit parseInt filterLimit .sort 'created': -1 .exec() &nbsp; catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not fetch all tasks via the API: #{err}", 'error' &nbsp; &nbsp; areTransactionChannelsValid = <span class="fstat-no" title="function not covered" >(</span>transactions, callback) -&gt; Transaction.distinct "channelID", { _id: $in: transactions.tids } , <span class="fstat-no" title="function not covered" >(</span>err, trxChannelIDs) -&gt; <span class="cstat-no" title="statement not covered" ></span> return callback err if err Channel.find { _id: $in: trxChannelIDs }, {status: 1}, <span class="fstat-no" title="function not covered" >(</span>err, trxChannels) -&gt; <span class="cstat-no" title="statement not covered" ></span> return callback err if err &nbsp; <span class="cstat-no" title="statement not covered" > for chan in trxChannels</span> if not Channels.isChannelEnabled chan <span class="cstat-no" title="statement not covered" > return callback null, false</span> <span class="cstat-no" title="statement not covered" > return c</span>allback null, true &nbsp; &nbsp; &nbsp; &nbsp; ##################################################### # Creates a new Task ##################################################### exports.addTask = <span class="fstat-no" title="function not covered" ></span>-&gt; &nbsp; # Get the values to use <span class="cstat-no" title="statement not covered" > transactions = this.request.b</span>ody try <span class="cstat-no" title="statement not covered" > taskObject = {</span>} <span class="cstat-no" title="statement not covered" > transactionsArr = [</span>] <span class="cstat-no" title="statement not covered" > taskObject.remainingTransactions = transactions.tids.l</span>ength <span class="cstat-no" title="statement not covered" > taskObject.user = this.authenticated.e</span>mail &nbsp; if transactions.batchSize? if transactions.batchSize &lt;= 0 <span class="cstat-no" title="statement not covered" > return utils.logAndSetResponse this, 400, 'Invalid batch size specified', 'info'</span> <span class="cstat-no" title="statement not covered" > taskObject.batchSize = transactions.batchSize</span> &nbsp; if transactions.paused <span class="cstat-no" title="statement not covered" > taskObject.status = 'Paused'</span> &nbsp; # check rerun permission and whether to create the rerun task <span class="cstat-no" title="statement not covered" > isRerunPermsValid = Q</span>.denodeify(isRerunPermissionsValid) <span class="cstat-no" title="statement not covered" > allowRerunTaskCreation = y</span>ield isRerunPermsValid( this.authenticated, transactions ) &nbsp; # the rerun task may be created <span class="cstat-no" title="statement not covered" > if allowRerunTaskCreation == true</span> <span class="cstat-no" title="statement not covered" > areTrxChannelsValid = Q</span>.denodeify(areTransactionChannelsValid) <span class="cstat-no" title="statement not covered" > trxChannelsValid = y</span>ield areTrxChannelsValid(transactions) &nbsp; if !trxChannelsValid <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 400, 'Cannot queue task as there are transactions with disabled or deleted channels', 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > transactionsArr.push tid: tid for tid in transactions.tids</span> <span class="cstat-no" title="statement not covered" > taskObject.transactions = t</span>ransactionsArr <span class="cstat-no" title="statement not covered" > taskObject.totalTransactions = transactionsArr.l</span>ength &nbsp; <span class="cstat-no" title="statement not covered" > task = new T</span>ask(taskObject) <span class="cstat-no" title="statement not covered" > result = y</span>ield Q.ninvoke(task, 'save') &nbsp; # All ok! So set the result <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 201, "User #{this.authenticated.email} created task with id #{task.id}", 'info'</span> &nbsp; # Clear the transactions out of the auto retry queue, in case they're in there AutoRetry.remove transactionID: $in: transactions.tids, <span class="fstat-no" title="function not covered" >(</span>err) -&gt; logger.err err if err else # rerun task creation not allowed utils.logAndSetResponse this, 403, "Insufficient permissions prevents this rerun task from being created", 'error' catch <span class="cstat-no" title="statement not covered" >err</span> # Error! So inform the user utils.logAndSetResponse this, 500, "Could not add Task via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; &nbsp; ############################################# # Retrieves the details for a specific Task # ############################################# &nbsp; &nbsp; # function to build filtered transactions buildFilteredTransactionsArray = <span class="fstat-no" title="function not covered" >(</span>filters, transactions) -&gt; &nbsp; # set tempTransactions array to return <span class="cstat-no" title="statement not covered" > tempTransactions = [</span>] &nbsp; <span class="cstat-no" title="statement not covered" > i = 0</span> <span class="cstat-no" title="statement not covered" > while i &lt; transactions.length</span> # set filter variable to captured failed filters <span class="cstat-no" title="statement not covered" > filtersFailed = f</span>alse &nbsp; if filters.tstatus # if tstatus doesnt equal filter then set filter failed to true <span class="cstat-no" title="statement not covered" > if filters.tstatus != transactions[i].tstatus</span> <span class="cstat-no" title="statement not covered" > filtersFailed = true</span> &nbsp; if filters.rerunStatus # if rerunStatus doesnt equal filter then set filter failed to true <span class="cstat-no" title="statement not covered" > if filters.rerunStatus != transactions[i].rerunStatus</span> <span class="cstat-no" title="statement not covered" > filtersFailed = true</span> &nbsp; if filters.hasErrors # if hasErrors filter 'yes' but no hasErrors exist then set filter failed to true <span class="cstat-no" title="statement not covered" > if filters.hasErrors == 'yes' &amp;&amp; !transactions[i].hasErrors</span> <span class="cstat-no" title="statement not covered" > filtersFailed = true</span> # if hasErrors filter 'no' but hasErrors does exist then set filter failed to true else <span class="cstat-no" title="statement not covered" >if filters.hasErrors == 'no' &amp;&amp; transactions[i].hasErrors</span> <span class="cstat-no" title="statement not covered" > filtersFailed = true</span> &nbsp; # add transaction if all filters passed successfully if filtersFailed is false <span class="cstat-no" title="statement not covered" > tempTransactions.push( transactions[i] )</span> &nbsp; # increment counter <span class="cstat-no" title="statement not covered" > i++</span> &nbsp; <span class="cstat-no" title="statement not covered" > return t</span>empTransactions &nbsp; &nbsp; &nbsp; &nbsp; exports.getTask = <span class="fstat-no" title="function not covered" >(</span>taskId) -&gt; &nbsp; # Get the values to use <span class="cstat-no" title="statement not covered" > taskId = u</span>nescape taskId &nbsp; try &nbsp; <span class="cstat-no" title="statement not covered" > filtersObject = this.request.q</span>uery &nbsp; #get limit and page values <span class="cstat-no" title="statement not covered" > filterLimit = filtersObject.f</span>ilterLimit <span class="cstat-no" title="statement not covered" > filterPage = filtersObject.f</span>ilterPage &nbsp; #determine skip amount <span class="cstat-no" title="statement not covered" > filterSkip = filterPage*f</span>ilterLimit &nbsp; # get filters object <span class="cstat-no" title="statement not covered" > filters = J</span>SON.parse filtersObject.filters &nbsp; <span class="cstat-no" title="statement not covered" > result = y</span>ield Task.findById(taskId).lean().exec() <span class="cstat-no" title="statement not covered" > tempTransactions = result.t</span>ransactions &nbsp; &nbsp; # are filters present if Object.keys( filters ).length &gt; 0 <span class="cstat-no" title="statement not covered" > tempTransactions = buildFilteredTransactionsArray filters, result.transactions</span> &nbsp; # get new transactions filters length <span class="cstat-no" title="statement not covered" > totalFilteredTransactions = tempTransactions.l</span>ength &nbsp; # assign new transactions filters length to result property <span class="cstat-no" title="statement not covered" > result.totalFilteredTransactions = t</span>otalFilteredTransactions &nbsp; # work out where to slice from and till where <span class="cstat-no" title="statement not covered" > sliceFrom = f</span>ilterSkip <span class="cstat-no" title="statement not covered" > sliceTo = filterSkip + p</span>arseInt filterLimit &nbsp; # slice the transactions array to return only the correct amount of records at the correct index <span class="cstat-no" title="statement not covered" > result.transactions = t</span>empTransactions.slice sliceFrom, sliceTo &nbsp; # Test if the result if valid <span class="cstat-no" title="statement not covered" > if result == null</span> # task not found! So inform the user utils.logAndSetResponse this, 404, "We could not find a Task with this ID: #{taskId}.", 'info' else this.body = result # All ok! So set the result catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not fetch Task by ID {taskId} via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; &nbsp; ########################################### # Updates the details for a specific Task # ########################################### exports.updateTask = <span class="fstat-no" title="function not covered" >(</span>taskId) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to updateTask denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; # Get the values to use <span class="cstat-no" title="statement not covered" > taskId = u</span>nescape taskId <span class="cstat-no" title="statement not covered" > taskData = this.request.b</span>ody &nbsp; # Ignore _id if it exists, user cannot change the internal id <span class="cstat-no" title="statement not covered" ></span> delete taskData._id if taskData._id? &nbsp; try <span class="cstat-no" title="statement not covered" > yield Task.findOneAndUpdate({ _id: taskId }, taskData).exec()</span> &nbsp; # All ok! So set the result <span class="cstat-no" title="statement not covered" > this.body = '</span>The Task was successfully updated' logger.info "User #{this.authenticated.email} updated task with id #{taskId}" catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not update Task by ID {taskId} via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; #################################### # Deletes a specific Tasks details # #################################### exports.removeTask = <span class="fstat-no" title="function not covered" >(</span>taskId) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to removeTask denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; # Get the values to use <span class="cstat-no" title="statement not covered" > taskId = u</span>nescape taskId &nbsp; try # Try to get the Task (Call the function that emits a promise and Koa will wait for the function to complete) <span class="cstat-no" title="statement not covered" > yield Task.remove({ _id: taskId }).exec()</span> &nbsp; # All ok! So set the result <span class="cstat-no" title="statement not covered" > this.body = '</span>The Task was successfully deleted' logger.info "User #{this.authenticated.email} removed task with id #{taskId}" catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not remove Task by ID {taskId} via the API: #{err}", 'error' &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Oct 10 2016 13:39:22 GMT+0200 (SAST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html>