UNPKG

openhim-core

Version:

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

447 lines (446 loc) 16 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/api/contactGroups.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> contactGroups.coffee </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">25% </span> <span class="quiet">Statements</span> <span class='fraction'>11/44</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/5</span> </div> <div class='fl pad1y space-right2'> <span class="strong">25% </span> <span class="quiet">Lines</span> <span class='fraction'>11/44</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</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-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-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-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-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-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-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-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-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-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-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-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-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-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">ContactGroup = require('../model/contactGroups').ContactGroup Q = require 'q' logger = require 'winston' authorisation = require './authorisation' Channel = require('../model/channels').Channel &nbsp; utils = require "../utils" &nbsp; ############################### # Adds a contactGroup # ############################### exports.addContactGroup = <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 addContactGroup denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > contactGroupData = this.request.b</span>ody &nbsp; try <span class="cstat-no" title="statement not covered" > contactGroup = new C</span>ontactGroup contactGroupData <span class="cstat-no" title="statement not covered" > result = y</span>ield Q.ninvoke(contactGroup, 'save') &nbsp; utils.logAndSetResponse this, 201, "Contact Group successfully created", 'info' catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 400, "Could not add a contact group via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; ############################################################# # Retrieves the details of a specific contact group # ############################################################# exports.getContactGroup = <span class="fstat-no" title="function not covered" >(</span>contactGroupId) -&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 getContactGroup denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > contactGroupId = u</span>nescape contactGroupId &nbsp; try <span class="cstat-no" title="statement not covered" > result = y</span>ield ContactGroup.findById(contactGroupId).exec() &nbsp; <span class="cstat-no" title="statement not covered" > if result == null</span> <span class="cstat-no" title="statement not covered" > this.body = "Contact Group with id '#{contactGroupId}'</span> could not be found." this.status = 404 else this.body = result catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not find Contact Group by id '#{contactGroupId}' via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; ################################## # Updates a contactGroup # ################################## exports.updateContactGroup = <span class="fstat-no" title="function not covered" >(</span>contactGroupId) -&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 updateContactGroup denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > contactGroupId = u</span>nescape contactGroupId <span class="cstat-no" title="statement not covered" > contactGroupData = this.request.b</span>ody &nbsp; # Ignore _id if it exists, a user shouldnt be able to update the internal id if contactGroupData._id <span class="cstat-no" title="statement not covered" > delete contactGroupData._id</span> &nbsp; try <span class="cstat-no" title="statement not covered" > yield ContactGroup.findByIdAndUpdate(contactGroupId, contactGroupData).exec()</span> <span class="cstat-no" title="statement not covered" > this.body = "</span>Successfully updated contact group." logger.info "User #{this.authenticated.email} updated contact group with id #{contactGroupId}" catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not update Contact Group by id #{contactGroupId} via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; &nbsp; ################################## # Removes a contactGroup # ################################## exports.removeContactGroup = <span class="fstat-no" title="function not covered" >(</span>contactGroupId) -&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 removeContactGroup denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > contactGroupId = u</span>nescape contactGroupId &nbsp; try # find out if there are any alerts associated with this group <span class="cstat-no" title="statement not covered" > linkedAlerts = y</span>ield Channel.find({ alerts :{ $elemMatch :{ groups: { $in: [contactGroupId] } } } }).exec() <span class="cstat-no" title="statement not covered" > if linkedAlerts.length &gt; 0</span> <span class="cstat-no" title="statement not covered" > this.status = 4</span>09 this.body = linkedAlerts else <span class="cstat-no" title="statement not covered" > yield ContactGroup.findByIdAndRemove(contactGroupId).exec()</span> <span class="cstat-no" title="statement not covered" > this.body = "Successfully removed contact group with ID '#{contactGroupId}'</span>" logger.info "User #{this.authenticated.email} removed contact group with id #{contactGroupId}" catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not remove Contact Group by id {contactGroupId} via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; &nbsp; ####################################### # Retrieves all contactGroups # ####################################### exports.getContactGroups = <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 getContactGroups denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; try this.body = yield ContactGroup.find().exec() catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not fetch all Contact Group 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>