@budibase/server 0.9.185-alpha.0 → 0.9.185-alpha.12

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.
Files changed (257) hide show
  1. package/Dockerfile +1 -1
  2. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  3. package/builder/assets/index.4a7c5636.css +1 -0
  4. package/builder/assets/index.708945dd.js +1316 -0
  5. package/builder/assets/vendor.470042a4.js +152 -0
  6. package/builder/assets/vendor.5e1fe644.css +1 -0
  7. package/builder/index.html +4 -4
  8. package/coverage/clover.xml +1060 -928
  9. package/coverage/coverage-final.json +90 -88
  10. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  11. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  12. package/coverage/lcov-report/api/controllers/application.js.html +43 -13
  13. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  14. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  15. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/datasource.js.html +31 -7
  19. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  20. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  21. package/coverage/lcov-report/api/controllers/index.html +75 -75
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  25. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  26. package/coverage/lcov-report/api/controllers/query.js.html +48 -210
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +12 -6
  30. package/coverage/lcov-report/api/controllers/row/index.html +18 -18
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  33. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +2 -2
  35. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  37. package/coverage/lcov-report/api/controllers/table/external.js.html +65 -8
  38. package/coverage/lcov-report/api/controllers/table/index.html +42 -42
  39. package/coverage/lcov-report/api/controllers/table/index.js.html +66 -12
  40. package/coverage/lcov-report/api/controllers/table/internal.js.html +49 -10
  41. package/coverage/lcov-report/api/controllers/table/utils.js.html +57 -45
  42. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/user.js.html +33 -18
  44. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.html +9 -9
  46. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -5
  47. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  48. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  49. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  50. package/coverage/lcov-report/api/index.html +1 -1
  51. package/coverage/lcov-report/api/index.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  63. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +4 -4
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  71. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  77. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  78. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  82. package/coverage/lcov-report/automations/actions.js.html +2 -2
  83. package/coverage/lcov-report/automations/automationUtils.js.html +3 -3
  84. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  85. package/coverage/lcov-report/automations/index.html +33 -48
  86. package/coverage/lcov-report/automations/index.js.html +2 -2
  87. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  92. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  94. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/index.html +14 -14
  96. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  99. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  104. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  106. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  109. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  114. package/coverage/lcov-report/automations/utils.js.html +42 -12
  115. package/coverage/lcov-report/constants/index.html +1 -1
  116. package/coverage/lcov-report/constants/index.js.html +5 -2
  117. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  118. package/coverage/lcov-report/constants/screens.js.html +1 -1
  119. package/coverage/lcov-report/db/client.js.html +2 -2
  120. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  121. package/coverage/lcov-report/db/index.html +2 -2
  122. package/coverage/lcov-report/db/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  124. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  125. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  126. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  127. package/coverage/lcov-report/db/newid.js.html +1 -1
  128. package/coverage/lcov-report/db/utils.js.html +1 -1
  129. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  130. package/coverage/lcov-report/events/index.html +6 -6
  131. package/coverage/lcov-report/events/index.js.html +1 -1
  132. package/coverage/lcov-report/events/utils.js.html +5 -5
  133. package/coverage/lcov-report/index.html +94 -79
  134. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  135. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  136. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  137. package/coverage/lcov-report/middleware/authorized.js.html +5 -5
  138. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  139. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  140. package/coverage/lcov-report/middleware/index.html +21 -21
  141. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  142. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  143. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  144. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  145. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  146. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +83 -32
  147. package/coverage/lcov-report/threads/index.html +141 -0
  148. package/coverage/lcov-report/threads/index.js.html +260 -0
  149. package/coverage/lcov-report/threads/query.js.html +269 -0
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  154. package/coverage/lcov-report/utilities/global.js.html +2 -2
  155. package/coverage/lcov-report/utilities/index.html +34 -34
  156. package/coverage/lcov-report/utilities/index.js.html +12 -9
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  158. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  165. package/coverage/lcov-report/utilities/security.js.html +3 -3
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/users.js.html +1 -1
  168. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  169. package/coverage/lcov.info +1753 -1527
  170. package/dist/api/controllers/application.js +11 -1
  171. package/dist/api/controllers/datasource.js +6 -2
  172. package/dist/api/controllers/deploy/index.js +2 -0
  173. package/dist/api/controllers/dev.js +4 -1
  174. package/dist/api/controllers/query.js +27 -57
  175. package/dist/api/controllers/row/ExternalRequest.js +2 -2
  176. package/dist/api/controllers/row/external.js +1 -0
  177. package/dist/api/controllers/table/external.js +17 -0
  178. package/dist/api/controllers/table/index.js +21 -2
  179. package/dist/api/controllers/table/internal.js +10 -1
  180. package/dist/api/controllers/table/utils.js +28 -27
  181. package/dist/api/controllers/user.js +10 -6
  182. package/dist/api/routes/query.js +1 -1
  183. package/dist/api/routes/table.js +7 -1
  184. package/dist/app.js +2 -11
  185. package/dist/automations/bullboard.js +37 -10
  186. package/dist/automations/triggers.js +7 -3
  187. package/dist/automations/utils.js +11 -2
  188. package/dist/constants/index.js +1 -0
  189. package/dist/definitions/datasource.js +1 -0
  190. package/dist/integrations/base/IntegrationBase.js +2 -0
  191. package/dist/integrations/base/sql.js +48 -8
  192. package/dist/integrations/base/sqlTable.js +1 -2
  193. package/dist/integrations/mysql.js +3 -1
  194. package/dist/integrations/postgres.js +2 -2
  195. package/dist/middleware/builder.js +4 -1
  196. package/dist/package.json +7 -6
  197. package/dist/{automations/thread.js → threads/automation.js} +23 -7
  198. package/dist/threads/index.js +58 -0
  199. package/dist/threads/query.js +61 -0
  200. package/dist/tsconfig.tsbuildinfo +1 -1
  201. package/dist/utilities/csvParser.js +46 -5
  202. package/dist/utilities/index.js +1 -0
  203. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  204. package/dist/utilities/scriptRunner.js +4 -1
  205. package/package.json +8 -7
  206. package/scripts/likeCypress.ts +33 -0
  207. package/src/api/controllers/application.js +11 -1
  208. package/src/api/controllers/datasource.js +10 -2
  209. package/src/api/controllers/deploy/index.js +2 -0
  210. package/src/api/controllers/dev.js +4 -1
  211. package/src/api/controllers/query.js +26 -80
  212. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  213. package/src/api/controllers/row/external.js +2 -0
  214. package/src/api/controllers/table/external.js +19 -0
  215. package/src/api/controllers/table/index.js +20 -2
  216. package/src/api/controllers/table/internal.js +14 -1
  217. package/src/api/controllers/table/utils.js +36 -32
  218. package/src/api/controllers/user.js +15 -10
  219. package/src/api/routes/query.js +1 -0
  220. package/src/api/routes/table.js +11 -0
  221. package/src/api/routes/tests/misc.spec.js +5 -1
  222. package/src/app.ts +2 -10
  223. package/src/automations/bullboard.js +28 -11
  224. package/src/automations/tests/automation.spec.js +3 -4
  225. package/src/automations/triggers.js +7 -3
  226. package/src/automations/utils.js +12 -2
  227. package/src/constants/index.js +1 -0
  228. package/src/definitions/datasource.ts +3 -2
  229. package/src/integrations/airtable.ts +2 -1
  230. package/src/integrations/arangodb.ts +2 -1
  231. package/src/integrations/base/IntegrationBase.ts +6 -0
  232. package/src/integrations/base/datasourcePlus.ts +2 -1
  233. package/src/integrations/base/sql.ts +51 -9
  234. package/src/integrations/base/sqlTable.ts +1 -4
  235. package/src/integrations/couchdb.ts +2 -1
  236. package/src/integrations/dynamodb.ts +2 -1
  237. package/src/integrations/elasticsearch.ts +2 -1
  238. package/src/integrations/mongodb.ts +2 -1
  239. package/src/integrations/mysql.ts +1 -1
  240. package/src/integrations/postgres.ts +5 -5
  241. package/src/integrations/rest.ts +2 -1
  242. package/src/integrations/s3.ts +2 -1
  243. package/src/middleware/builder.js +4 -1
  244. package/src/{automations/thread.js → threads/automation.js} +24 -7
  245. package/src/threads/index.js +60 -0
  246. package/src/threads/query.js +63 -0
  247. package/src/utilities/csvParser.js +48 -5
  248. package/src/utilities/index.js +1 -0
  249. package/src/utilities/queue/inMemoryQueue.js +7 -0
  250. package/src/utilities/scriptRunner.js +4 -1
  251. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  252. package/src/utilities/tests/csvParser.spec.js +3 -0
  253. package/tsconfig.json +1 -1
  254. package/builder/assets/index.0e6a5c20.js +0 -201
  255. package/builder/assets/index.cf21e4d2.css +0 -29
  256. package/builder/assets/vendor.278a305c.js +0 -9
  257. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">91.3% </span>
26
+ <span class="strong">81.81% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>42/46</span>
28
+ <span class='fraction'>45/55</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.95% </span>
33
+ <span class="strong">73.91% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>15/19</span>
35
+ <span class='fraction'>17/23</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">77.78% </span>
40
+ <span class="strong">70% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>7/9</span>
42
+ <span class='fraction'>7/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">93.18% </span>
47
+ <span class="strong">83.01% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>41/44</span>
49
+ <span class='fraction'>44/53</span>
50
50
  </div>
51
51
 
52
52
 
@@ -145,7 +145,25 @@
145
145
  <a name='L86'></a><a href='#L86'>86</a>
146
146
  <a name='L87'></a><a href='#L87'>87</a>
147
147
  <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
149
167
  <span class="cline-any cline-yes">34x</span>
150
168
  <span class="cline-any cline-yes">34x</span>
151
169
  <span class="cline-any cline-yes">34x</span>
@@ -229,9 +247,27 @@
229
247
  <span class="cline-any cline-neutral">&nbsp;</span>
230
248
  <span class="cline-any cline-neutral">&nbsp;</span>
231
249
  <span class="cline-any cline-yes">34x</span>
250
+ <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-no">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-no">&nbsp;</span>
256
+ <span class="cline-any cline-no">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-yes">34x</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
261
  <span class="cline-any cline-yes">1x</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-yes">1x</span>
264
+ <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
266
  <span class="cline-any cline-yes">1x</span>
234
267
  <span class="cline-any cline-yes">1x</span>
268
+ <span class="cline-any cline-no">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-yes">1x</span>
235
271
  <span class="cline-any cline-neutral">&nbsp;</span>
236
272
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
237
273
  const internal = require("./internal")
@@ -316,9 +352,27 @@ exports.destroy = async function (ctx) {
316
352
  ctx.body = { message: `Table ${tableId} deleted.` }
317
353
  }
318
354
  &nbsp;
355
+ exports.bulkImport = <span class="fstat-no" title="function not covered" >as</span>ync function (ctx) {
356
+ const tableId = <span class="cstat-no" title="statement not covered" >ctx.params.tableId</span>
357
+ <span class="cstat-no" title="statement not covered" > await pickApi({ tableId }).bulkImport(ctx)</span>
358
+ // right now we don't trigger anything for bulk import because it
359
+ // can only be done in the builder, but in the future we may need to
360
+ // think about events for bulk items
361
+ <span class="cstat-no" title="statement not covered" > ctx.status = 200</span>
362
+ <span class="cstat-no" title="statement not covered" > ctx.body = { message: `Bulk rows created.` }</span>
363
+ }
364
+ &nbsp;
319
365
  exports.validateCSVSchema = async function (ctx) {
320
- const { csvString, schema = {} } = ctx.request.body
321
- const result = await csvParser.parse(csvString, schema)
366
+ // tableId being specified means its an import to an existing table
367
+ const { csvString, schema = {}, tableId } = ctx.request.body
368
+ let existingTable
369
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (tableId) {
370
+ <span class="cstat-no" title="statement not covered" > existingTable = await getTable(ctx.appId, tableId)</span>
371
+ }
372
+ let result = await csvParser.parse(csvString, schema)
373
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (existingTable) {
374
+ <span class="cstat-no" title="statement not covered" > result = csvParser.updateSchema({ schema: result, existingTable })</span>
375
+ }
322
376
  ctx.body = { schema: result }
323
377
  }
324
378
  &nbsp;</pre></td></tr></table></pre>
@@ -328,7 +382,7 @@ exports.validateCSVSchema = async function (ctx) {
328
382
  <div class='footer quiet pad2 space-top1 center small'>
329
383
  Code coverage generated by
330
384
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
331
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
385
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
332
386
  </div>
333
387
  </div>
334
388
  <script src="../../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">80% </span>
26
+ <span class="strong">74.24% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>48/60</span>
28
+ <span class='fraction'>49/66</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">75% </span>
40
+ <span class="strong">60% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/4</span>
42
+ <span class='fraction'>3/5</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">84.21% </span>
47
+ <span class="strong">77.77% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>48/57</span>
49
+ <span class='fraction'>49/63</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line high'></div>
58
+ <div class='status-line medium'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -199,10 +199,28 @@
199
199
  <a name='L140'></a><a href='#L140'>140</a>
200
200
  <a name='L141'></a><a href='#L141'>141</a>
201
201
  <a name='L142'></a><a href='#L142'>142</a>
202
- <a name='L143'></a><a href='#L143'>143</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
203
216
  <span class="cline-any cline-yes">34x</span>
204
217
  <span class="cline-any cline-yes">34x</span>
205
218
  <span class="cline-any cline-yes">34x</span>
219
+ <span class="cline-any cline-neutral">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
224
  <span class="cline-any cline-yes">34x</span>
207
225
  <span class="cline-any cline-neutral">&nbsp;</span>
208
226
  <span class="cline-any cline-yes">34x</span>
@@ -341,11 +359,24 @@
341
359
  <span class="cline-any cline-neutral">&nbsp;</span>
342
360
  <span class="cline-any cline-yes">2x</span>
343
361
  <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-yes">34x</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-no">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
370
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
345
371
  const linkRows = require("../../../db/linkedRows")
346
372
  const { getRowParams, generateTableID } = require("../../../db/utils")
347
373
  const { FieldTypes } = require("../../../constants")
348
- const { TableSaveFunctions, hasTypeChanged } = require("./utils")
374
+ const {
375
+ TableSaveFunctions,
376
+ hasTypeChanged,
377
+ getTable,
378
+ handleDataImport,
379
+ } = require("./utils")
349
380
  &nbsp;
350
381
  exports.save = async function (ctx) {
351
382
  const appId = ctx.appId
@@ -483,6 +514,14 @@ exports.destroy = async function (ctx) {
483
514
  &nbsp;
484
515
  return tableToDelete
485
516
  }
517
+ &nbsp;
518
+ exports.bulkImport = <span class="fstat-no" title="function not covered" >as</span>ync function (ctx) {
519
+ const appId = <span class="cstat-no" title="statement not covered" >ctx.appId</span>
520
+ const table = <span class="cstat-no" title="statement not covered" >await getTable(appId, ctx.params.tableId)</span>
521
+ const { dataImport } = <span class="cstat-no" title="statement not covered" >ctx.request.body</span>
522
+ <span class="cstat-no" title="statement not covered" > await handleDataImport(appId, ctx.user, table, dataImport)</span>
523
+ <span class="cstat-no" title="statement not covered" > return table</span>
524
+ }
486
525
  &nbsp;</pre></td></tr></table></pre>
487
526
 
488
527
  <div class='push'></div><!-- for sticky footer -->
@@ -490,7 +529,7 @@ exports.destroy = async function (ctx) {
490
529
  <div class='footer quiet pad2 space-top1 center small'>
491
530
  Code coverage generated by
492
531
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
493
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
532
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
494
533
  </div>
495
534
  </div>
496
535
  <script src="../../../prettify.js"></script>
@@ -23,14 +23,14 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">66.67% </span>
26
+ <span class="strong">66.85% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>116/174</span>
28
+ <span class='fraction'>117/175</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">45.56% </span>
33
+ <span class="strong">45.55% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>41/90</span>
36
36
  </div>
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">67.25% </span>
47
+ <span class="strong">67.44% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>115/171</span>
49
+ <span class='fraction'>116/172</span>
50
50
  </div>
51
51
 
52
52
 
@@ -412,7 +412,11 @@
412
412
  <a name='L353'></a><a href='#L353'>353</a>
413
413
  <a name='L354'></a><a href='#L354'>354</a>
414
414
  <a name='L355'></a><a href='#L355'>355</a>
415
- <a name='L356'></a><a href='#L356'>356</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
415
+ <a name='L356'></a><a href='#L356'>356</a>
416
+ <a name='L357'></a><a href='#L357'>357</a>
417
+ <a name='L358'></a><a href='#L358'>358</a>
418
+ <a name='L359'></a><a href='#L359'>359</a>
419
+ <a name='L360'></a><a href='#L360'>360</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
416
420
  <span class="cline-any cline-yes">34x</span>
417
421
  <span class="cline-any cline-neutral">&nbsp;</span>
418
422
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -487,11 +491,16 @@
487
491
  <span class="cline-any cline-neutral">&nbsp;</span>
488
492
  <span class="cline-any cline-yes">34x</span>
489
493
  <span class="cline-any cline-yes">100x</span>
490
- <span class="cline-any cline-yes">100x</span>
494
+ <span class="cline-any cline-yes">99x</span>
491
495
  <span class="cline-any cline-neutral">&nbsp;</span>
492
496
  <span class="cline-any cline-yes">1x</span>
493
497
  <span class="cline-any cline-neutral">&nbsp;</span>
494
498
  <span class="cline-any cline-yes">1x</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-yes">1x</span>
495
504
  <span class="cline-any cline-yes">1x</span>
496
505
  <span class="cline-any cline-yes">1x</span>
497
506
  <span class="cline-any cline-yes">1x</span>
@@ -522,8 +531,7 @@
522
531
  <span class="cline-any cline-yes">1x</span>
523
532
  <span class="cline-any cline-yes">1x</span>
524
533
  <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-yes">100x</span>
534
+ <span class="cline-any cline-yes">1x</span>
527
535
  <span class="cline-any cline-neutral">&nbsp;</span>
528
536
  <span class="cline-any cline-neutral">&nbsp;</span>
529
537
  <span class="cline-any cline-yes">34x</span>
@@ -803,10 +811,10 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) =&gt; {
803
811
  })
804
812
  )
805
813
  updatedRows = rows.rows.map(({ doc }) =&gt; {
806
- <span class="missing-if-branch" title="else path not taken" >E</span>if (rename) {
814
+ if (rename) {
807
815
  doc[rename.updated] = doc[rename.old]
808
816
  delete doc[rename.old]
809
- } else <span class="cstat-no" title="statement not covered" >if (deletedColumns.length !== 0) {</span>
817
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (deletedColumns.length !== 0) {</span>
810
818
  <span class="cstat-no" title="statement not covered" > deletedColumns.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete doc[colName])</span></span>
811
819
  }
812
820
  return doc
@@ -841,43 +849,47 @@ exports.makeSureTableUpToDate = (table, tableToSave) =&gt; {
841
849
  }
842
850
  &nbsp;
843
851
  exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
852
+ if (!dataImport || !dataImport.csvString) {
853
+ return table
854
+ }
844
855
  const db = new CouchDB(appId)
845
- if (dataImport &amp;&amp; dataImport.csvString) {
846
- // Populate the table with rows imported from CSV in a bulk update
847
- const data = await csvParser.transform(dataImport)
856
+ // Populate the table with rows imported from CSV in a bulk update
857
+ const data = await csvParser.transform({
858
+ ...dataImport,
859
+ existingTable: table,
860
+ })
848
861
  &nbsp;
849
- let finalData = []
850
- for (let i = 0; i &lt; data.length; i++) {
851
- let row = data[i]
852
- row._id = generateRowID(table._id)
853
- row.tableId = table._id
854
- const processed = inputProcessing(user, table, row, {
855
- noAutoRelationships: true,
856
- })
857
- table = processed.table
858
- row = processed.row
862
+ let finalData = []
863
+ for (let i = 0; i &lt; data.length; i++) {
864
+ let row = data[i]
865
+ row._id = generateRowID(table._id)
866
+ row.tableId = table._id
867
+ const processed = inputProcessing(user, table, row, {
868
+ noAutoRelationships: true,
869
+ })
870
+ table = processed.table
871
+ row = processed.row
859
872
  &nbsp;
860
- for (let [fieldName, schema] of Object.entries(table.schema)) {
861
- // check whether the options need to be updated for inclusion as part of the data import
862
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
863
- schema.type === FieldTypes.OPTIONS &amp;&amp;
864
- (<span class="branch-1 cbranch-no" title="branch not covered" >!schema.constraints.inclusion </span>||
865
- <span class="branch-2 cbranch-no" title="branch not covered" > schema.constraints.inclusion.indexOf(row[fieldName]) === -1)</span>
866
- ) {
867
- <span class="cstat-no" title="statement not covered" > schema.constraints.inclusion = [</span>
868
- ...schema.constraints.inclusion,
869
- row[fieldName],
870
- ]
871
- }
873
+ for (let [fieldName, schema] of Object.entries(table.schema)) {
874
+ // check whether the options need to be updated for inclusion as part of the data import
875
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
876
+ schema.type === FieldTypes.OPTIONS &amp;&amp;
877
+ (<span class="branch-1 cbranch-no" title="branch not covered" >!schema.constraints.inclusion </span>||
878
+ <span class="branch-2 cbranch-no" title="branch not covered" > schema.constraints.inclusion.indexOf(row[fieldName]) === -1)</span>
879
+ ) {
880
+ <span class="cstat-no" title="statement not covered" > schema.constraints.inclusion = [</span>
881
+ ...schema.constraints.inclusion,
882
+ row[fieldName],
883
+ ]
872
884
  }
873
- &nbsp;
874
- finalData.push(row)
875
885
  }
876
886
  &nbsp;
877
- await db.bulkDocs(finalData)
878
- let response = await db.put(table)
879
- table._rev = response._rev
887
+ finalData.push(row)
880
888
  }
889
+ &nbsp;
890
+ await db.bulkDocs(finalData)
891
+ let response = await db.put(table)
892
+ table._rev = response._rev
881
893
  return table
882
894
  }
883
895
  &nbsp;
@@ -898,7 +910,7 @@ exports.handleSearchIndexes = async (appId, table) =&gt; {
898
910
  )
899
911
  &nbsp;
900
912
  // if index fields have changed, delete the original index
901
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!isEqual(currentFields, table.indexes)) {
913
+ if (!isEqual(currentFields, table.indexes)) {
902
914
  await db.deleteIndex(existingIndex)
903
915
  // create/recreate the index with fields
904
916
  await db.createIndex({
@@ -930,7 +942,7 @@ exports.checkStaticTables = table =&gt; {
930
942
  if (table._id === InternalTables.USER_METADATA) {
931
943
  for (let [key, schema] of Object.entries(USERS_TABLE_SCHEMA.schema)) {
932
944
  // check if the schema exists on the table to be created/updated
933
- <span class="missing-if-branch" title="else path not taken" >E</span>if (table.schema[key] == null) {
945
+ if (table.schema[key] == null) {
934
946
  table.schema[key] = schema
935
947
  }
936
948
  }
@@ -942,7 +954,7 @@ class TableSaveFunctions {
942
954
  constructor({ db, ctx, oldTable, dataImport }) {
943
955
  this.db = db
944
956
  this.ctx = ctx
945
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.ctx &amp;&amp; this.ctx.user) {
957
+ if (this.ctx &amp;&amp; this.ctx.user) {
946
958
  this.appId = this.ctx.appId
947
959
  }
948
960
  this.oldTable = oldTable
@@ -1129,7 +1141,7 @@ exports.TableSaveFunctions = TableSaveFunctions
1129
1141
  <div class='footer quiet pad2 space-top1 center small'>
1130
1142
  Code coverage generated by
1131
1143
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1132
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
1144
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
1133
1145
  </div>
1134
1146
  </div>
1135
1147
  <script src="../../../prettify.js"></script>
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">71.43% </span>
33
+ <span class="strong">71.42% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>5/7</span>
36
36
  </div>
@@ -155,10 +155,10 @@ exports.fetch = async function (ctx) {
155
155
  <span class="cstat-no" title="statement not covered" > error = true</span>
156
156
  }
157
157
  // if there is an error, simply return no templates
158
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!error &amp;&amp; response) {
158
+ if (!error &amp;&amp; response) {
159
159
  const json = await response.json()
160
160
  ctx.body = Object.values(json.templates[type])
161
- } else {
161
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
162
162
  <span class="cstat-no" title="statement not covered" > ctx.body = []</span>
163
163
  }
164
164
  }
@@ -181,7 +181,7 @@ exports.downloadTemplate = async function (ctx) {
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">38.14% </span>
26
+ <span class="strong">37.37% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>37/97</span>
28
+ <span class='fraction'>37/99</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/27</span>
35
+ <span class='fraction'>0/31</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">38.54% </span>
47
+ <span class="strong">37.75% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>37/96</span>
49
+ <span class='fraction'>37/98</span>
50
50
  </div>
51
51
 
52
52
 
@@ -249,7 +249,12 @@
249
249
  <a name='L190'></a><a href='#L190'>190</a>
250
250
  <a name='L191'></a><a href='#L191'>191</a>
251
251
  <a name='L192'></a><a href='#L192'>192</a>
252
- <a name='L193'></a><a href='#L193'>193</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
252
+ <a name='L193'></a><a href='#L193'>193</a>
253
+ <a name='L194'></a><a href='#L194'>194</a>
254
+ <a name='L195'></a><a href='#L195'>195</a>
255
+ <a name='L196'></a><a href='#L196'>196</a>
256
+ <a name='L197'></a><a href='#L197'>197</a>
257
+ <a name='L198'></a><a href='#L198'>198</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
253
258
  <span class="cline-any cline-neutral">&nbsp;</span>
254
259
  <span class="cline-any cline-neutral">&nbsp;</span>
255
260
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -352,6 +357,7 @@
352
357
  <span class="cline-any cline-no">&nbsp;</span>
353
358
  <span class="cline-any cline-no">&nbsp;</span>
354
359
  <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
355
361
  <span class="cline-any cline-neutral">&nbsp;</span>
356
362
  <span class="cline-any cline-no">&nbsp;</span>
357
363
  <span class="cline-any cline-no">&nbsp;</span>
@@ -370,13 +376,17 @@
370
376
  <span class="cline-any cline-no">&nbsp;</span>
371
377
  <span class="cline-any cline-no">&nbsp;</span>
372
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
382
  <span class="cline-any cline-neutral">&nbsp;</span>
374
383
  <span class="cline-any cline-neutral">&nbsp;</span>
375
384
  <span class="cline-any cline-neutral">&nbsp;</span>
376
385
  <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-no">&nbsp;</span>
378
386
  <span class="cline-any cline-neutral">&nbsp;</span>
379
387
  <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
390
  <span class="cline-any cline-neutral">&nbsp;</span>
381
391
  <span class="cline-any cline-neutral">&nbsp;</span>
382
392
  <span class="cline-any cline-no">&nbsp;</span>
@@ -540,6 +550,7 @@ exports.syncUser = <span class="fstat-no" title="function not covered" >as</span
540
550
  .map(<span class="fstat-no" title="function not covered" >([</span>appId]) =&gt; <span class="cstat-no" title="statement not covered" >appId)</span>
541
551
  }
542
552
  <span class="cstat-no" title="statement not covered" > for (let prodAppId of prodAppIds) {</span>
553
+ const roleId = <span class="cstat-no" title="statement not covered" >roles[prodAppId]</span>
543
554
  const devAppId = <span class="cstat-no" title="statement not covered" >getDevelopmentAppID(prodAppId)</span>
544
555
  <span class="cstat-no" title="statement not covered" > for (let appId of [prodAppId, devAppId]) {</span>
545
556
  <span class="cstat-no" title="statement not covered" > if (!(await doesDatabaseExist(appId))) {</span>
@@ -558,17 +569,21 @@ exports.syncUser = <span class="fstat-no" title="function not covered" >as</span
558
569
  tableId: InternalTables.USER_METADATA,
559
570
  }
560
571
  }
561
- let combined
562
- <span class="cstat-no" title="statement not covered" > if (deleting) {</span>
563
- <span class="cstat-no" title="statement not covered" > combined = {</span>
564
- ...metadata,
565
- status: UserStatus.INACTIVE,
566
- metadata: BUILTIN_ROLE_IDS.PUBLIC,
567
- }
568
- } else {
569
- <span class="cstat-no" title="statement not covered" > combined = combineMetadataAndUser(user, metadata)</span>
572
+ // assign the roleId for the metadata doc
573
+ <span class="cstat-no" title="statement not covered" > if (roleId) {</span>
574
+ <span class="cstat-no" title="statement not covered" > metadata.roleId = roleId</span>
575
+ }
576
+ let combined = <span class="cstat-no" title="statement not covered" >!deleting</span>
577
+ ? combineMetadataAndUser(user, metadata)
578
+ : {
579
+ ...metadata,
580
+ status: UserStatus.INACTIVE,
581
+ metadata: BUILTIN_ROLE_IDS.PUBLIC,
582
+ }
583
+ // if its null then there was no updates required
584
+ <span class="cstat-no" title="statement not covered" > if (combined) {</span>
585
+ <span class="cstat-no" title="statement not covered" > await db.put(combined)</span>
570
586
  }
571
- <span class="cstat-no" title="statement not covered" > await db.put(combined)</span>
572
587
  }
573
588
  }
574
589
  <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
@@ -640,7 +655,7 @@ exports.findMetadata = async function (ctx) {
640
655
  <div class='footer quiet pad2 space-top1 center small'>
641
656
  Code coverage generated by
642
657
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
643
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
658
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
644
659
  </div>
645
660
  </div>
646
661
  <script src="../../prettify.js"></script>
@@ -118,7 +118,7 @@ exports.json = function (headers, rows) {
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
121
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
121
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
122
122
  </div>
123
123
  </div>
124
124
  <script src="../../../prettify.js"></script>