@budibase/server 2.3.16 → 2.3.17-alpha.1

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 (455) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/{index.6a3954cc.js → index.2492f6c7.js} +364 -364
  3. package/builder/assets/{index.4488f38d.css → index.7e76c039.css} +1 -1
  4. package/builder/index.html +2 -2
  5. package/dist/api/controllers/query/index.js +2 -0
  6. package/dist/api/controllers/row/ExternalRequest.js +4 -2
  7. package/dist/api/controllers/row/external.js +12 -1
  8. package/dist/api/controllers/table/external.js +8 -8
  9. package/dist/app.js +7 -1
  10. package/dist/constants/index.js +4 -24
  11. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  12. package/dist/db/linkedRows/LinkController.js +9 -8
  13. package/dist/ddApm.js +11 -0
  14. package/dist/elasticApm.js +14 -0
  15. package/dist/integrations/base/sql.js +10 -3
  16. package/dist/package.json +9 -6
  17. package/dist/sdk/app/backups/exports.js +8 -2
  18. package/dist/sdk/app/datasources/datasources.js +3 -0
  19. package/dist/tsconfig.build.tsbuildinfo +1 -1
  20. package/dist/utilities/retry.js +30 -0
  21. package/jest-testcontainers-config.js +8 -0
  22. package/jest.config.ts +28 -11
  23. package/package.json +10 -7
  24. package/scripts/load/create-many-apps.js +24 -0
  25. package/scripts/load/create-many-rows.js +30 -0
  26. package/scripts/load/utils.js +66 -0
  27. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  28. package/src/api/controllers/query/index.ts +2 -0
  29. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  30. package/src/api/controllers/row/external.ts +13 -1
  31. package/src/api/controllers/table/external.ts +3 -2
  32. package/src/api/routes/public/applications.ts +0 -1
  33. package/src/api/routes/public/tests/compare.spec.js +1 -1
  34. package/src/api/routes/public/tests/users.spec.js +1 -1
  35. package/src/api/routes/public/tests/utils.ts +25 -8
  36. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  37. package/src/api/routes/tests/analytics.spec.js +4 -1
  38. package/src/api/routes/tests/apikeys.spec.js +1 -1
  39. package/src/api/routes/tests/application.spec.ts +20 -6
  40. package/src/api/routes/tests/auth.spec.js +2 -2
  41. package/src/api/routes/tests/automation.spec.js +6 -2
  42. package/src/api/routes/tests/backup.spec.ts +4 -13
  43. package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
  44. package/src/api/routes/tests/component.spec.js +1 -1
  45. package/src/api/routes/tests/datasource.spec.ts +20 -3
  46. package/src/api/routes/tests/dev.spec.js +1 -1
  47. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  48. package/src/api/routes/tests/integration.spec.js +1 -1
  49. package/src/api/routes/tests/layout.spec.js +1 -1
  50. package/src/api/routes/tests/metadata.spec.js +1 -1
  51. package/src/api/routes/tests/misc.spec.js +1 -1
  52. package/src/api/routes/tests/permissions.spec.js +4 -1
  53. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  54. package/src/api/routes/tests/role.spec.js +6 -1
  55. package/src/api/routes/tests/routing.spec.js +1 -1
  56. package/src/api/routes/tests/row.spec.js +11 -3
  57. package/src/api/routes/tests/screen.spec.js +1 -1
  58. package/src/api/routes/tests/static.spec.js +2 -1
  59. package/src/api/routes/tests/table.spec.js +1 -1
  60. package/src/api/routes/tests/templates.spec.js +1 -1
  61. package/src/api/routes/tests/user.spec.js +12 -12
  62. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
  63. package/src/api/routes/tests/utilities/index.ts +5 -3
  64. package/src/api/routes/tests/view.spec.js +4 -1
  65. package/src/api/routes/tests/webhook.spec.js +11 -2
  66. package/src/app.ts +10 -1
  67. package/src/automations/tests/automation.spec.js +4 -4
  68. package/src/automations/tests/bash.spec.js +1 -1
  69. package/src/automations/tests/discord.spec.js +1 -1
  70. package/src/automations/tests/executeQuery.spec.js +2 -3
  71. package/src/automations/tests/executeScript.spec.js +1 -1
  72. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  73. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  74. package/src/automations/tests/serverLog.spec.js +1 -1
  75. package/src/automations/tests/updateRow.spec.js +1 -1
  76. package/src/automations/tests/zapier.spec.js +1 -1
  77. package/src/constants/index.ts +1 -23
  78. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  79. package/src/db/linkedRows/LinkController.ts +2 -1
  80. package/src/db/tests/linkController.spec.js +4 -1
  81. package/src/db/tests/linkTests.spec.js +1 -1
  82. package/src/ddApm.ts +7 -0
  83. package/src/elasticApm.ts +10 -0
  84. package/src/integration-test/postgres.spec.ts +752 -0
  85. package/src/integrations/base/sql.ts +15 -5
  86. package/src/integrations/oracle.ts +1 -1
  87. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  88. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  89. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  90. package/src/migrations/tests/index.spec.ts +13 -20
  91. package/src/sdk/app/backups/exports.ts +8 -2
  92. package/src/sdk/app/datasources/datasources.ts +3 -0
  93. package/src/tests/jestEnv.ts +2 -6
  94. package/src/tests/jestSetup.ts +8 -7
  95. package/src/tests/utilities/TestConfiguration.ts +126 -50
  96. package/src/tests/utilities/structures.ts +16 -2
  97. package/src/utilities/retry.ts +18 -0
  98. package/tsconfig.build.json +1 -0
  99. package/coverage/clover.xml +0 -11755
  100. package/coverage/coverage-final.json +0 -284
  101. package/coverage/lcov-report/base.css +0 -224
  102. package/coverage/lcov-report/block-navigation.js +0 -87
  103. package/coverage/lcov-report/favicon.png +0 -0
  104. package/coverage/lcov-report/index.html +0 -1031
  105. package/coverage/lcov-report/prettify.css +0 -1
  106. package/coverage/lcov-report/prettify.js +0 -2
  107. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  108. package/coverage/lcov-report/sorter.js +0 -196
  109. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
  110. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
  111. package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
  112. package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
  113. package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
  114. package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
  115. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
  116. package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
  117. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
  118. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
  119. package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
  120. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
  121. package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
  122. package/coverage/lcov-report/src/api/controllers/index.html +0 -431
  123. package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
  124. package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
  125. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
  126. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
  127. package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
  128. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
  129. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
  130. package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
  131. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
  132. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
  133. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
  134. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
  135. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
  136. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
  137. package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
  138. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
  139. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
  140. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
  141. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
  142. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
  143. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
  144. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
  145. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
  146. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
  147. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
  148. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
  149. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
  150. package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
  151. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
  152. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
  153. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
  154. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
  155. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
  156. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
  157. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
  158. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
  159. package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
  160. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
  161. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
  162. package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
  163. package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
  164. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
  165. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
  166. package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
  167. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
  168. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
  169. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
  170. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -577
  171. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
  172. package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
  173. package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
  174. package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
  175. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
  176. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
  177. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
  178. package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
  179. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
  180. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
  181. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
  182. package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
  183. package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
  184. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
  185. package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
  186. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
  187. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
  188. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
  189. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
  190. package/coverage/lcov-report/src/api/index.html +0 -116
  191. package/coverage/lcov-report/src/api/index.ts.html +0 -352
  192. package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
  193. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
  194. package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
  195. package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
  196. package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
  197. package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
  198. package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
  199. package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
  200. package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
  201. package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
  202. package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
  203. package/coverage/lcov-report/src/api/routes/index.html +0 -551
  204. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
  205. package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
  206. package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
  207. package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
  208. package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
  209. package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
  210. package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
  211. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
  212. package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
  213. package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
  214. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
  215. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
  216. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
  217. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
  218. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
  219. package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
  220. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
  221. package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
  222. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
  223. package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
  224. package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
  225. package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
  226. package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
  227. package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
  228. package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
  229. package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
  230. package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
  231. package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
  232. package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
  233. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
  234. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
  235. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
  236. package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
  237. package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
  238. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
  239. package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
  240. package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
  241. package/coverage/lcov-report/src/app.ts.html +0 -424
  242. package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
  243. package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
  244. package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
  245. package/coverage/lcov-report/src/automations/index.html +0 -191
  246. package/coverage/lcov-report/src/automations/index.ts.html +0 -163
  247. package/coverage/lcov-report/src/automations/logging/index.html +0 -116
  248. package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
  249. package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
  250. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
  251. package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
  252. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
  253. package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -349
  254. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
  255. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
  256. package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
  257. package/coverage/lcov-report/src/automations/steps/index.html +0 -371
  258. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -361
  259. package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
  260. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
  261. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
  262. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
  263. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
  264. package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -292
  265. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
  266. package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
  267. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -355
  268. package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
  269. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
  270. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
  271. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
  272. package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
  273. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
  274. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
  275. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
  276. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
  277. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
  278. package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
  279. package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
  280. package/coverage/lcov-report/src/constants/index.html +0 -146
  281. package/coverage/lcov-report/src/constants/index.ts.html +0 -697
  282. package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
  283. package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
  284. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
  285. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
  286. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
  287. package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
  288. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
  289. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
  290. package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
  291. package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
  292. package/coverage/lcov-report/src/db/index.html +0 -176
  293. package/coverage/lcov-report/src/db/index.ts.html +0 -133
  294. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
  295. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
  296. package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
  297. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
  298. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
  299. package/coverage/lcov-report/src/db/newid.ts.html +0 -100
  300. package/coverage/lcov-report/src/db/utils.ts.html +0 -913
  301. package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
  302. package/coverage/lcov-report/src/definitions/index.html +0 -116
  303. package/coverage/lcov-report/src/environment.ts.html +0 -472
  304. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
  305. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
  306. package/coverage/lcov-report/src/events/index.html +0 -161
  307. package/coverage/lcov-report/src/events/index.ts.html +0 -100
  308. package/coverage/lcov-report/src/events/utils.ts.html +0 -319
  309. package/coverage/lcov-report/src/index.html +0 -191
  310. package/coverage/lcov-report/src/index.ts.html +0 -133
  311. package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
  312. package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
  313. package/coverage/lcov-report/src/integrations/base/index.html +0 -161
  314. package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
  315. package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
  316. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
  317. package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
  318. package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
  319. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
  320. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
  321. package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
  322. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
  323. package/coverage/lcov-report/src/integrations/index.html +0 -371
  324. package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
  325. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
  326. package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
  327. package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
  328. package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
  329. package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
  330. package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
  331. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
  332. package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
  333. package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
  334. package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
  335. package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
  336. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
  337. package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
  338. package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
  339. package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
  340. package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
  341. package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
  342. package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
  343. package/coverage/lcov-report/src/middleware/index.html +0 -236
  344. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
  345. package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
  346. package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
  347. package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
  348. package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
  349. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
  350. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
  351. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
  352. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
  353. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
  354. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
  355. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
  356. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
  357. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
  358. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
  359. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
  360. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
  361. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
  362. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
  363. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
  364. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
  365. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
  366. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
  367. package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
  368. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
  369. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
  370. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
  371. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
  372. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
  373. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
  374. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
  375. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
  376. package/coverage/lcov-report/src/migrations/index.html +0 -116
  377. package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
  378. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
  379. package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
  380. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
  381. package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
  382. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
  383. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
  384. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
  385. package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
  386. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
  387. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
  388. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
  389. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
  390. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
  391. package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
  392. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
  393. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
  394. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
  395. package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
  396. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
  397. package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
  398. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
  399. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
  400. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
  401. package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
  402. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
  403. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
  404. package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
  405. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
  406. package/coverage/lcov-report/src/sdk/index.html +0 -116
  407. package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
  408. package/coverage/lcov-report/src/sdk/users/index.html +0 -131
  409. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
  410. package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
  411. package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
  412. package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
  413. package/coverage/lcov-report/src/startup.ts.html +0 -484
  414. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
  415. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
  416. package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
  417. package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
  418. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
  419. package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
  420. package/coverage/lcov-report/src/threads/index.html +0 -161
  421. package/coverage/lcov-report/src/threads/index.ts.html +0 -418
  422. package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
  423. package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
  424. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
  425. package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
  426. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
  427. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
  428. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
  429. package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
  430. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
  431. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
  432. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
  433. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
  434. package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
  435. package/coverage/lcov-report/src/utilities/index.html +0 -251
  436. package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
  437. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
  438. package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
  439. package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
  440. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
  441. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
  442. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
  443. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
  444. package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
  445. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
  446. package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
  447. package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
  448. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
  449. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
  450. package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
  451. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
  452. package/coverage/lcov-report/src/watch.ts.html +0 -196
  453. package/coverage/lcov-report/src/websocket.ts.html +0 -163
  454. package/coverage/lcov.info +0 -21750
  455. package/dist/api/routes/public/tests/utils.js +0 -33
@@ -90,10 +90,15 @@ function parseFilters(filters: SearchFilters | undefined): SearchFilters {
90
90
  function generateSelectStatement(
91
91
  json: QueryJson,
92
92
  knex: Knex
93
- ): (string | Knex.Raw)[] {
93
+ ): (string | Knex.Raw)[] | "*" {
94
94
  const { resource, meta } = json
95
+
96
+ if (!resource) {
97
+ return "*"
98
+ }
99
+
95
100
  const schema = meta?.table?.schema
96
- return resource!.fields.map(field => {
101
+ return resource.fields.map(field => {
97
102
  const fieldNames = field.split(/\./g)
98
103
  const tableName = fieldNames[0]
99
104
  const columnName = fieldNames[1]
@@ -405,11 +410,14 @@ class InternalBuilder {
405
410
  delete parsedBody[key]
406
411
  }
407
412
  }
413
+
408
414
  // mysql can't use returning
409
415
  if (opts.disableReturning) {
410
416
  return query.insert(parsedBody)
411
417
  } else {
412
- return query.insert(parsedBody).returning("*")
418
+ return query
419
+ .insert(parsedBody)
420
+ .returning(generateSelectStatement(json, knex))
413
421
  }
414
422
  }
415
423
 
@@ -494,7 +502,9 @@ class InternalBuilder {
494
502
  if (opts.disableReturning) {
495
503
  return query.update(parsedBody)
496
504
  } else {
497
- return query.update(parsedBody).returning("*")
505
+ return query
506
+ .update(parsedBody)
507
+ .returning(generateSelectStatement(json, knex))
498
508
  }
499
509
  }
500
510
 
@@ -509,7 +519,7 @@ class InternalBuilder {
509
519
  if (opts.disableReturning) {
510
520
  return query.delete()
511
521
  } else {
512
- return query.delete().returning("*")
522
+ return query.delete().returning(generateSelectStatement(json, knex))
513
523
  }
514
524
  }
515
525
  }
@@ -247,7 +247,7 @@ class OracleIntegration extends Sql implements DatasourcePlus {
247
247
  )
248
248
  }
249
249
 
250
- private internalConvertType(column: OracleColumn): { type: string } {
250
+ private internalConvertType(column: OracleColumn): { type: FieldTypes } {
251
251
  if (this.isBooleanType(column)) {
252
252
  return { type: FieldTypes.BOOLEAN }
253
253
  }
@@ -6,7 +6,7 @@ const migration = require("../appUrls")
6
6
  describe("run", () => {
7
7
  let config = new TestConfig(false)
8
8
 
9
- beforeEach(async () => {
9
+ beforeAll(async () => {
10
10
  await config.init()
11
11
  })
12
12
 
@@ -11,7 +11,7 @@ const migration = require("../syncQuotas")
11
11
  describe("run", () => {
12
12
  let config = new TestConfig(false)
13
13
 
14
- beforeEach(async () => {
14
+ beforeAll(async () => {
15
15
  await config.init()
16
16
  })
17
17
 
@@ -19,7 +19,7 @@ const migration = require("../userEmailViewCasing")
19
19
  describe("run", () => {
20
20
  let config = new TestConfig(false)
21
21
 
22
- beforeEach(async () => {
22
+ beforeAll(async () => {
23
23
  await config.init()
24
24
  })
25
25
 
@@ -10,8 +10,9 @@ import * as structures from "../../tests/utilities/structures"
10
10
  import { MIGRATIONS } from "../"
11
11
  import * as helpers from "./helpers"
12
12
 
13
- const { mocks } = require("@budibase/backend-core/tests")
14
- const timestamp = mocks.date.MOCK_DATE.toISOString()
13
+ import tk from "timekeeper"
14
+ const timestamp = new Date().toISOString()
15
+ tk.freeze(timestamp)
15
16
 
16
17
  const clearMigrations = async () => {
17
18
  const dbs = [context.getDevAppDB(), context.getProdAppDB()]
@@ -92,24 +93,16 @@ describe("migrations", () => {
92
93
  await clearMigrations()
93
94
  const appId = config.prodAppId
94
95
  const roles = { [appId]: "role_12345" }
95
- await config.createUser(
96
- undefined,
97
- undefined,
98
- undefined,
99
- undefined,
100
- false,
101
- true,
102
- roles
103
- ) // admin only
104
- await config.createUser(
105
- undefined,
106
- undefined,
107
- undefined,
108
- undefined,
109
- false,
110
- false,
111
- roles
112
- ) // non admin non builder
96
+ await config.createUser({
97
+ builder: false,
98
+ admin: true,
99
+ roles,
100
+ }) // admin only
101
+ await config.createUser({
102
+ builder: false,
103
+ admin: false,
104
+ roles,
105
+ }) // non admin non builder
113
106
  await config.createTable()
114
107
  await config.createRow()
115
108
  await config.createRow()
@@ -45,12 +45,18 @@ function tarFilesToTmp(tmpDir: string, files: string[]) {
45
45
  * @return {*} either a readable stream or a string
46
46
  */
47
47
  export async function exportDB(dbName: string, opts: ExportOpts = {}) {
48
+ const exportOpts = {
49
+ filter: opts?.filter,
50
+ batch_size: 1000,
51
+ batch_limit: 5,
52
+ style: "main_only",
53
+ }
48
54
  return dbCore.doWithDB(dbName, async (db: any) => {
49
55
  // Write the dump to file if required
50
56
  if (opts?.exportPath) {
51
57
  const path = opts?.exportPath
52
58
  const writeStream = fs.createWriteStream(path)
53
- await db.dump(writeStream, { filter: opts?.filter })
59
+ await db.dump(writeStream, exportOpts)
54
60
  return path
55
61
  } else {
56
62
  // Stringify the dump in memory if required
@@ -59,7 +65,7 @@ export async function exportDB(dbName: string, opts: ExportOpts = {}) {
59
65
  memStream.on("data", (chunk: any) => {
60
66
  appString += chunk.toString()
61
67
  })
62
- await db.dump(memStream, { filter: opts?.filter })
68
+ await db.dump(memStream, exportOpts)
63
69
  return appString
64
70
  }
65
71
  })
@@ -88,6 +88,9 @@ export async function removeSecrets(datasources: Datasource[]) {
88
88
  const definitions = await getDefinitions()
89
89
  for (let datasource of datasources) {
90
90
  const schema = definitions[datasource.source]
91
+ if (!schema) {
92
+ continue
93
+ }
91
94
  if (datasource.config) {
92
95
  // strip secrets from response, so they don't show in the network request
93
96
  if (datasource.config.auth) {
@@ -3,11 +3,7 @@ import { tmpdir } from "os"
3
3
 
4
4
  env._set("SELF_HOSTED", "1")
5
5
  env._set("NODE_ENV", "jest")
6
- env._set("JWT_SECRET", "test-jwtsecret")
7
- env._set("CLIENT_ID", "test-client-id")
6
+ env._set("MULTI_TENANCY", "1")
7
+ // @ts-ignore
8
8
  env._set("BUDIBASE_DIR", tmpdir("budibase-unittests"))
9
9
  env._set("LOG_LEVEL", "silent")
10
- env._set("PORT", 0)
11
- env._set("MINIO_URL", "http://localhost")
12
- env._set("MINIO_ACCESS_KEY", "test")
13
- env._set("MINIO_SECRET_KEY", "test")
@@ -1,9 +1,6 @@
1
- import { mocks } from "@budibase/backend-core/tests"
2
-
3
- // mock all dates to 2020-01-01T00:00:00.000Z
4
- // use tk.reset() to use real dates in individual tests
5
- const tk = require("timekeeper")
6
- tk.freeze(mocks.date.MOCK_DATE)
1
+ import env from "../environment"
2
+ import { env as coreEnv } from "@budibase/backend-core"
3
+ import { testContainerUtils } from "@budibase/backend-core/tests"
7
4
 
8
5
  if (!process.env.DEBUG) {
9
6
  global.console.log = jest.fn() // console.log are ignored in tests
@@ -13,5 +10,9 @@ if (!process.env.DEBUG) {
13
10
  if (!process.env.CI) {
14
11
  // set a longer timeout in dev for debugging
15
12
  // 100 seconds
16
- jest.setTimeout(100000)
13
+ jest.setTimeout(100 * 1000)
14
+ } else {
15
+ jest.setTimeout(10 * 1000)
17
16
  }
17
+
18
+ testContainerUtils.setupEnv(env, coreEnv)
@@ -1,4 +1,4 @@
1
- import { mocks } from "@budibase/backend-core/tests"
1
+ import { generator, mocks, structures } from "@budibase/backend-core/tests"
2
2
 
3
3
  // init the licensing mock
4
4
  import * as pro from "@budibase/pro"
@@ -10,6 +10,7 @@ mocks.licenses.useUnlimited()
10
10
  import { init as dbInit } from "../../db"
11
11
  dbInit()
12
12
  import env from "../../environment"
13
+ import { env as coreEnv } from "@budibase/backend-core"
13
14
  import {
14
15
  basicTable,
15
16
  basicRow,
@@ -38,17 +39,27 @@ import { cleanup } from "../../utilities/fileSystem"
38
39
  import newid from "../../db/newid"
39
40
  import { generateUserMetadataID } from "../../db/utils"
40
41
  import { startup } from "../../startup"
41
- const supertest = require("supertest")
42
-
43
- const GLOBAL_USER_ID = "us_uuid1"
44
- const EMAIL = "babs@babs.com"
45
- const FIRSTNAME = "Barbara"
46
- const LASTNAME = "Barbington"
47
- const CSRF_TOKEN = "e3727778-7af0-4226-b5eb-f43cbe60a306"
42
+ import supertest from "supertest"
43
+ import {
44
+ AuthToken,
45
+ Database,
46
+ Datasource,
47
+ Row,
48
+ SourceName,
49
+ Table,
50
+ } from "@budibase/types"
51
+
52
+ type DefaultUserValues = {
53
+ globalUserId: string
54
+ email: string
55
+ firstName: string
56
+ lastName: string
57
+ csrfToken: string
58
+ }
48
59
 
49
60
  class TestConfiguration {
50
61
  server: any
51
- request: any
62
+ request: supertest.SuperTest<supertest.Test> | undefined
52
63
  started: boolean
53
64
  appId: string | null
54
65
  allApps: any[]
@@ -62,6 +73,8 @@ class TestConfiguration {
62
73
  linkedTable: any
63
74
  automation: any
64
75
  datasource: any
76
+ tenantId: string | null
77
+ defaultUserValues: DefaultUserValues
65
78
 
66
79
  constructor(openServer = true) {
67
80
  if (openServer) {
@@ -76,6 +89,18 @@ class TestConfiguration {
76
89
  }
77
90
  this.appId = null
78
91
  this.allApps = []
92
+ this.tenantId = null
93
+ this.defaultUserValues = this.populateDefaultUserValues()
94
+ }
95
+
96
+ populateDefaultUserValues(): DefaultUserValues {
97
+ return {
98
+ globalUserId: `us_${newid()}`,
99
+ email: generator.email(),
100
+ firstName: generator.first(),
101
+ lastName: generator.last(),
102
+ csrfToken: generator.hash(),
103
+ }
79
104
  }
80
105
 
81
106
  getRequest() {
@@ -100,10 +125,10 @@ class TestConfiguration {
100
125
 
101
126
  getUserDetails() {
102
127
  return {
103
- globalId: GLOBAL_USER_ID,
104
- email: EMAIL,
105
- firstName: FIRSTNAME,
106
- lastName: LASTNAME,
128
+ globalId: this.defaultUserValues.globalUserId,
129
+ email: this.defaultUserValues.email,
130
+ firstName: this.defaultUserValues.firstName,
131
+ lastName: this.defaultUserValues.lastName,
107
132
  }
108
133
  }
109
134
 
@@ -111,7 +136,9 @@ class TestConfiguration {
111
136
  if (!appId) {
112
137
  appId = this.appId
113
138
  }
114
- return tenancy.doInTenant(TENANT_ID, () => {
139
+
140
+ const tenant = this.getTenantId()
141
+ return tenancy.doInTenant(tenant, () => {
115
142
  // check if already in a context
116
143
  if (context.getAppId() == null && appId !== null) {
117
144
  return context.doInAppContext(appId, async () => {
@@ -127,6 +154,11 @@ class TestConfiguration {
127
154
 
128
155
  // use a new id as the name to avoid name collisions
129
156
  async init(appName = newid()) {
157
+ this.defaultUserValues = this.populateDefaultUserValues()
158
+ if (context.isMultiTenant()) {
159
+ this.tenantId = structures.tenant.id()
160
+ }
161
+
130
162
  if (!this.started) {
131
163
  await startup()
132
164
  }
@@ -149,9 +181,30 @@ class TestConfiguration {
149
181
  }
150
182
  }
151
183
 
184
+ // MODES
185
+ #setMultiTenancy = (value: boolean) => {
186
+ env._set("MULTI_TENANCY", value)
187
+ coreEnv._set("MULTI_TENANCY", value)
188
+ }
189
+
190
+ #setSelfHosted = (value: boolean) => {
191
+ env._set("SELF_HOSTED", value)
192
+ coreEnv._set("SELF_HOSTED", value)
193
+ }
194
+
195
+ modeCloud = () => {
196
+ this.#setSelfHosted(false)
197
+ this.#setMultiTenancy(true)
198
+ }
199
+
200
+ modeSelf = () => {
201
+ this.#setSelfHosted(true)
202
+ this.#setMultiTenancy(false)
203
+ }
204
+
152
205
  // UTILS
153
206
 
154
- async _req(body: any, params: any, controlFunc: any) {
207
+ _req(body: any, params: any, controlFunc: any) {
155
208
  // create a fake request ctx
156
209
  const request: any = {}
157
210
  const appId = this.appId
@@ -159,7 +212,7 @@ class TestConfiguration {
159
212
  // fake cookies, we don't need them
160
213
  request.cookies = { set: () => {}, get: () => {} }
161
214
  request.config = { jwtSecret: env.JWT_SECRET }
162
- request.user = { appId, tenantId: TENANT_ID }
215
+ request.user = { appId, tenantId: this.getTenantId() }
163
216
  request.query = {}
164
217
  request.request = {
165
218
  body,
@@ -175,15 +228,15 @@ class TestConfiguration {
175
228
 
176
229
  // USER / AUTH
177
230
  async globalUser({
178
- id = GLOBAL_USER_ID,
179
- firstName = FIRSTNAME,
180
- lastName = LASTNAME,
231
+ id = this.defaultUserValues.globalUserId,
232
+ firstName = this.defaultUserValues.firstName,
233
+ lastName = this.defaultUserValues.lastName,
181
234
  builder = true,
182
235
  admin = false,
183
- email = EMAIL,
236
+ email = this.defaultUserValues.email,
184
237
  roles,
185
238
  }: any = {}) {
186
- return tenancy.doWithGlobalDB(TENANT_ID, async (db: any) => {
239
+ return tenancy.doWithGlobalDB(this.getTenantId(), async (db: Database) => {
187
240
  let existing
188
241
  try {
189
242
  existing = await db.get(id)
@@ -194,14 +247,14 @@ class TestConfiguration {
194
247
  _id: id,
195
248
  ...existing,
196
249
  roles: roles || {},
197
- tenantId: TENANT_ID,
250
+ tenantId: this.getTenantId(),
198
251
  firstName,
199
252
  lastName,
200
253
  }
201
254
  await sessions.createASession(id, {
202
255
  sessionId: "sessionid",
203
- tenantId: TENANT_ID,
204
- csrfToken: CSRF_TOKEN,
256
+ tenantId: this.getTenantId(),
257
+ csrfToken: this.defaultUserValues.csrfToken,
205
258
  })
206
259
  if (builder) {
207
260
  user.builder = { global: true }
@@ -215,21 +268,31 @@ class TestConfiguration {
215
268
  }
216
269
  const resp = await db.put(user)
217
270
  return {
218
- _rev: resp._rev,
271
+ _rev: resp.rev,
219
272
  ...user,
220
273
  }
221
274
  })
222
275
  }
223
276
 
224
277
  async createUser(
225
- id = null,
226
- firstName = FIRSTNAME,
227
- lastName = LASTNAME,
228
- email = EMAIL,
229
- builder = true,
230
- admin = false,
231
- roles = {}
278
+ user: {
279
+ id?: string
280
+ firstName?: string
281
+ lastName?: string
282
+ email?: string
283
+ builder?: boolean
284
+ admin?: boolean
285
+ roles?: any
286
+ } = {}
232
287
  ) {
288
+ let { id, firstName, lastName, email, builder, admin, roles } = user
289
+ firstName = firstName || this.defaultUserValues.firstName
290
+ lastName = lastName || this.defaultUserValues.lastName
291
+ email = email || this.defaultUserValues.email
292
+ roles = roles || {}
293
+ if (builder == null) {
294
+ builder = true
295
+ }
233
296
  const globalId = !id ? `us_${Math.random()}` : `us_${id}`
234
297
  const resp = await this.globalUser({
235
298
  id: globalId,
@@ -264,13 +327,13 @@ class TestConfiguration {
264
327
  }
265
328
  await sessions.createASession(userId, {
266
329
  sessionId: "sessionid",
267
- tenantId: TENANT_ID,
330
+ tenantId: this.getTenantId(),
268
331
  })
269
332
  // have to fake this
270
333
  const authObj = {
271
334
  userId,
272
335
  sessionId: "sessionid",
273
- tenantId: TENANT_ID,
336
+ tenantId: this.getTenantId(),
274
337
  }
275
338
  const app = {
276
339
  roleId: roleId,
@@ -293,10 +356,11 @@ class TestConfiguration {
293
356
  }
294
357
 
295
358
  defaultHeaders(extras = {}) {
296
- const authObj = {
297
- userId: GLOBAL_USER_ID,
359
+ const tenantId = this.getTenantId()
360
+ const authObj: AuthToken = {
361
+ userId: this.defaultUserValues.globalUserId,
298
362
  sessionId: "sessionid",
299
- tenantId: TENANT_ID,
363
+ tenantId,
300
364
  }
301
365
  const app = {
302
366
  roleId: roles.BUILTIN_ROLE_IDS.ADMIN,
@@ -310,15 +374,20 @@ class TestConfiguration {
310
374
  `${constants.Cookie.Auth}=${authToken}`,
311
375
  `${constants.Cookie.CurrentApp}=${appToken}`,
312
376
  ],
313
- [constants.Header.CSRF_TOKEN]: CSRF_TOKEN,
377
+ [constants.Header.CSRF_TOKEN]: this.defaultUserValues.csrfToken,
314
378
  ...extras,
315
379
  }
380
+
316
381
  if (this.appId) {
317
382
  headers[constants.Header.APP_ID] = this.appId
318
383
  }
319
384
  return headers
320
385
  }
321
386
 
387
+ getTenantId() {
388
+ return this.tenantId || TENANT_ID
389
+ }
390
+
322
391
  publicHeaders({ prodApp = true } = {}) {
323
392
  const appId = prodApp ? this.prodAppId : this.appId
324
393
 
@@ -328,11 +397,16 @@ class TestConfiguration {
328
397
  if (appId) {
329
398
  headers[constants.Header.APP_ID] = appId
330
399
  }
400
+
401
+ if (this.tenantId) {
402
+ headers[constants.Header.TENANT_ID] = this.tenantId
403
+ }
404
+
331
405
  return headers
332
406
  }
333
407
 
334
408
  async roleHeaders({
335
- email = EMAIL,
409
+ email = this.defaultUserValues.email,
336
410
  roleId = roles.BUILTIN_ROLE_IDS.ADMIN,
337
411
  builder = false,
338
412
  prodApp = true,
@@ -342,8 +416,8 @@ class TestConfiguration {
342
416
 
343
417
  // API
344
418
 
345
- async generateApiKey(userId = GLOBAL_USER_ID) {
346
- return tenancy.doWithGlobalDB(TENANT_ID, async (db: any) => {
419
+ async generateApiKey(userId = this.defaultUserValues.globalUserId) {
420
+ return tenancy.doWithGlobalDB(this.getTenantId(), async (db: any) => {
347
421
  const id = dbCore.generateDevInfoID(userId)
348
422
  let devInfo
349
423
  try {
@@ -352,7 +426,7 @@ class TestConfiguration {
352
426
  devInfo = { _id: id, userId }
353
427
  }
354
428
  devInfo.apiKey = encryption.encrypt(
355
- `${TENANT_ID}${dbCore.SEPARATOR}${newid()}`
429
+ `${this.getTenantId()}${dbCore.SEPARATOR}${newid()}`
356
430
  )
357
431
  await db.put(devInfo)
358
432
  return devInfo.apiKey
@@ -408,13 +482,13 @@ class TestConfiguration {
408
482
 
409
483
  // TABLE
410
484
 
411
- async updateTable(config?: any) {
485
+ async updateTable(config?: any): Promise<Table> {
412
486
  config = config || basicTable()
413
487
  this.table = await this._req(config, null, controllers.table.save)
414
488
  return this.table
415
489
  }
416
490
 
417
- async createTable(config?: any) {
491
+ async createTable(config?: Table) {
418
492
  if (config != null && config._id) {
419
493
  delete config._id
420
494
  }
@@ -458,7 +532,7 @@ class TestConfiguration {
458
532
 
459
533
  // ROW
460
534
 
461
- async createRow(config: any = null) {
535
+ async createRow(config?: Row): Promise<Row> {
462
536
  if (!this.table) {
463
537
  throw "Test requires table to be configured."
464
538
  }
@@ -467,7 +541,7 @@ class TestConfiguration {
467
541
  return this._req(config, { tableId }, controllers.row.save)
468
542
  }
469
543
 
470
- async getRow(tableId: string, rowId: string) {
544
+ async getRow(tableId: string, rowId: string): Promise<Row> {
471
545
  return this._req(null, { tableId, rowId }, controllers.row.find)
472
546
  }
473
547
 
@@ -549,7 +623,9 @@ class TestConfiguration {
549
623
 
550
624
  // DATASOURCE
551
625
 
552
- async createDatasource(config?: any) {
626
+ async createDatasource(config?: {
627
+ datasource: Datasource
628
+ }): Promise<Datasource> {
553
629
  config = config || basicDatasource()
554
630
  const response = await this._req(config, null, controllers.datasource.save)
555
631
  this.datasource = response.datasource
@@ -570,7 +646,7 @@ class TestConfiguration {
570
646
  return this.createDatasource({
571
647
  datasource: {
572
648
  ...basicDatasource().datasource,
573
- source: "REST",
649
+ source: SourceName.REST,
574
650
  config: cfg || {},
575
651
  },
576
652
  })
@@ -579,7 +655,7 @@ class TestConfiguration {
579
655
  async dynamicVariableDatasource() {
580
656
  let datasource = await this.restDatasource()
581
657
  const basedOnQuery = await this.createQuery({
582
- ...basicQuery(datasource._id),
658
+ ...basicQuery(datasource._id!),
583
659
  fields: {
584
660
  path: "www.google.com",
585
661
  },
@@ -607,7 +683,7 @@ class TestConfiguration {
607
683
  datasource: any,
608
684
  fields: any,
609
685
  params: any,
610
- verb: string
686
+ verb?: string
611
687
  ) {
612
688
  return request
613
689
  .post(`/api/queries/preview`)
@@ -7,6 +7,8 @@ import {
7
7
  Automation,
8
8
  AutomationActionStepId,
9
9
  AutomationTriggerStepId,
10
+ Datasource,
11
+ SourceName,
10
12
  } from "@budibase/types"
11
13
 
12
14
  const { v4: uuidv4 } = require("uuid")
@@ -207,12 +209,12 @@ export function basicRole() {
207
209
  }
208
210
  }
209
211
 
210
- export function basicDatasource() {
212
+ export function basicDatasource(): { datasource: Datasource } {
211
213
  return {
212
214
  datasource: {
213
215
  type: "datasource",
214
216
  name: "Test",
215
- source: "POSTGRES",
217
+ source: SourceName.POSTGRES,
216
218
  config: {},
217
219
  },
218
220
  }
@@ -255,3 +257,15 @@ export function basicWebhook(automationId: string) {
255
257
  },
256
258
  }
257
259
  }
260
+
261
+ export function basicEnvironmentVariable(
262
+ name: string,
263
+ prod: string,
264
+ dev?: string
265
+ ) {
266
+ return {
267
+ name,
268
+ production: prod,
269
+ development: dev || prod,
270
+ }
271
+ }
@@ -0,0 +1,18 @@
1
+ export async function retry<T extends (...arg0: any[]) => any>(
2
+ fn: T,
3
+ maxTry: number = 5,
4
+ retryCount = 1
5
+ ): Promise<Awaited<ReturnType<T>>> {
6
+ const currRetry = typeof retryCount === "number" ? retryCount : 1
7
+ try {
8
+ const result = await fn()
9
+ return result
10
+ } catch (e) {
11
+ console.log(`Retry ${currRetry} failed.`)
12
+ if (currRetry > maxTry) {
13
+ console.log(`All ${maxTry} retry attempts exhausted`)
14
+ throw e
15
+ }
16
+ return retry(fn, maxTry, currRetry + 1)
17
+ }
18
+ }
@@ -20,6 +20,7 @@
20
20
  "dist",
21
21
  "src/tests",
22
22
  "src/api/routes/tests/utilities",
23
+ "src/api/routes/public/tests/utils.ts",
23
24
  "src/automations/tests/utilities",
24
25
  "**/*.spec.ts",
25
26
  "**/*.spec.js"