@budibase/server 2.3.15 → 2.3.17-alpha.0

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 (458) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/{index.4488f38d.css → index.7e76c039.css} +1 -1
  3. package/builder/assets/{index.e88df740.js → index.e8838b62.js} +364 -364
  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/api/routes/public/tests/utils.js +29 -2
  10. package/dist/api/routes/tests/utilities/index.js +131 -0
  11. package/dist/app.js +7 -1
  12. package/dist/constants/index.js +4 -24
  13. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  14. package/dist/db/linkedRows/LinkController.js +9 -8
  15. package/dist/ddApm.js +11 -0
  16. package/dist/elasticApm.js +14 -0
  17. package/dist/integrations/base/sql.js +10 -3
  18. package/dist/package.json +9 -6
  19. package/dist/sdk/app/backups/exports.js +8 -2
  20. package/dist/sdk/app/datasources/datasources.js +3 -0
  21. package/dist/tests/utilities/TestConfiguration.js +626 -0
  22. package/dist/tests/utilities/controllers.js +40 -0
  23. package/dist/tests/utilities/structures.js +234 -0
  24. package/dist/tsconfig.build.tsbuildinfo +1 -1
  25. package/dist/utilities/retry.js +30 -0
  26. package/jest-testcontainers-config.js +8 -0
  27. package/jest.config.ts +28 -11
  28. package/package.json +10 -7
  29. package/scripts/load/create-many-apps.js +24 -0
  30. package/scripts/load/create-many-rows.js +30 -0
  31. package/scripts/load/utils.js +66 -0
  32. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  33. package/src/api/controllers/query/index.ts +2 -0
  34. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  35. package/src/api/controllers/row/external.ts +13 -1
  36. package/src/api/controllers/table/external.ts +3 -2
  37. package/src/api/routes/public/applications.ts +0 -1
  38. package/src/api/routes/public/tests/compare.spec.js +1 -1
  39. package/src/api/routes/public/tests/users.spec.js +1 -1
  40. package/src/api/routes/public/tests/utils.ts +25 -8
  41. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  42. package/src/api/routes/tests/analytics.spec.js +4 -1
  43. package/src/api/routes/tests/apikeys.spec.js +1 -1
  44. package/src/api/routes/tests/application.spec.ts +20 -6
  45. package/src/api/routes/tests/auth.spec.js +2 -2
  46. package/src/api/routes/tests/automation.spec.js +6 -2
  47. package/src/api/routes/tests/backup.spec.ts +4 -13
  48. package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
  49. package/src/api/routes/tests/component.spec.js +1 -1
  50. package/src/api/routes/tests/datasource.spec.ts +20 -3
  51. package/src/api/routes/tests/dev.spec.js +1 -1
  52. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  53. package/src/api/routes/tests/integration.spec.js +1 -1
  54. package/src/api/routes/tests/layout.spec.js +1 -1
  55. package/src/api/routes/tests/metadata.spec.js +1 -1
  56. package/src/api/routes/tests/misc.spec.js +1 -1
  57. package/src/api/routes/tests/permissions.spec.js +4 -1
  58. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  59. package/src/api/routes/tests/role.spec.js +6 -1
  60. package/src/api/routes/tests/routing.spec.js +1 -1
  61. package/src/api/routes/tests/row.spec.js +11 -3
  62. package/src/api/routes/tests/screen.spec.js +1 -1
  63. package/src/api/routes/tests/static.spec.js +2 -1
  64. package/src/api/routes/tests/table.spec.js +1 -1
  65. package/src/api/routes/tests/templates.spec.js +1 -1
  66. package/src/api/routes/tests/user.spec.js +12 -12
  67. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
  68. package/src/api/routes/tests/utilities/index.ts +5 -3
  69. package/src/api/routes/tests/view.spec.js +4 -1
  70. package/src/api/routes/tests/webhook.spec.js +11 -2
  71. package/src/app.ts +10 -1
  72. package/src/automations/tests/automation.spec.js +4 -4
  73. package/src/automations/tests/bash.spec.js +1 -1
  74. package/src/automations/tests/discord.spec.js +1 -1
  75. package/src/automations/tests/executeQuery.spec.js +2 -3
  76. package/src/automations/tests/executeScript.spec.js +1 -1
  77. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  78. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  79. package/src/automations/tests/serverLog.spec.js +1 -1
  80. package/src/automations/tests/updateRow.spec.js +1 -1
  81. package/src/automations/tests/zapier.spec.js +1 -1
  82. package/src/constants/index.ts +1 -23
  83. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  84. package/src/db/linkedRows/LinkController.ts +2 -1
  85. package/src/db/tests/linkController.spec.js +4 -1
  86. package/src/db/tests/linkTests.spec.js +1 -1
  87. package/src/ddApm.ts +7 -0
  88. package/src/elasticApm.ts +10 -0
  89. package/src/integration-test/postgres.spec.ts +752 -0
  90. package/src/integrations/base/sql.ts +15 -5
  91. package/src/integrations/oracle.ts +1 -1
  92. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  93. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  94. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  95. package/src/migrations/tests/index.spec.ts +13 -20
  96. package/src/sdk/app/backups/exports.ts +8 -2
  97. package/src/sdk/app/datasources/datasources.ts +3 -0
  98. package/src/tests/jestEnv.ts +2 -6
  99. package/src/tests/jestSetup.ts +8 -7
  100. package/src/tests/utilities/TestConfiguration.ts +126 -50
  101. package/src/tests/utilities/structures.ts +16 -2
  102. package/src/utilities/retry.ts +18 -0
  103. package/coverage/clover.xml +0 -11755
  104. package/coverage/coverage-final.json +0 -284
  105. package/coverage/lcov-report/base.css +0 -224
  106. package/coverage/lcov-report/block-navigation.js +0 -87
  107. package/coverage/lcov-report/favicon.png +0 -0
  108. package/coverage/lcov-report/index.html +0 -1031
  109. package/coverage/lcov-report/prettify.css +0 -1
  110. package/coverage/lcov-report/prettify.js +0 -2
  111. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  112. package/coverage/lcov-report/sorter.js +0 -196
  113. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
  114. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
  115. package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
  116. package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
  117. package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
  118. package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
  119. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
  120. package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
  121. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
  122. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
  123. package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
  124. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
  125. package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
  126. package/coverage/lcov-report/src/api/controllers/index.html +0 -431
  127. package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
  128. package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
  129. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
  130. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
  131. package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
  132. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
  133. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
  134. package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
  135. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
  136. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
  137. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
  138. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
  139. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
  140. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
  141. package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
  142. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
  143. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
  144. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
  145. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
  146. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
  147. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
  148. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
  149. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
  150. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
  151. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
  152. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
  153. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
  154. package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
  155. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
  156. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
  157. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
  158. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
  159. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
  160. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
  161. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
  162. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
  163. package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
  164. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
  165. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
  166. package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
  167. package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
  168. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
  169. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
  170. package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
  171. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
  172. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
  173. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
  174. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -577
  175. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
  176. package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
  177. package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
  178. package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
  179. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
  180. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
  181. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
  182. package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
  183. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
  184. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
  185. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
  186. package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
  187. package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
  188. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
  189. package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
  190. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
  191. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
  192. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
  193. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
  194. package/coverage/lcov-report/src/api/index.html +0 -116
  195. package/coverage/lcov-report/src/api/index.ts.html +0 -352
  196. package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
  197. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
  198. package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
  199. package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
  200. package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
  201. package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
  202. package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
  203. package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
  204. package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
  205. package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
  206. package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
  207. package/coverage/lcov-report/src/api/routes/index.html +0 -551
  208. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
  209. package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
  210. package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
  211. package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
  212. package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
  213. package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
  214. package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
  215. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
  216. package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
  217. package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
  218. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
  219. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
  220. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
  221. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
  222. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
  223. package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
  224. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
  225. package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
  226. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
  227. package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
  228. package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
  229. package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
  230. package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
  231. package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
  232. package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
  233. package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
  234. package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
  235. package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
  236. package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
  237. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
  238. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
  239. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
  240. package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
  241. package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
  242. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
  243. package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
  244. package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
  245. package/coverage/lcov-report/src/app.ts.html +0 -424
  246. package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
  247. package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
  248. package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
  249. package/coverage/lcov-report/src/automations/index.html +0 -191
  250. package/coverage/lcov-report/src/automations/index.ts.html +0 -163
  251. package/coverage/lcov-report/src/automations/logging/index.html +0 -116
  252. package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
  253. package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
  254. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
  255. package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
  256. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
  257. package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -349
  258. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
  259. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
  260. package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
  261. package/coverage/lcov-report/src/automations/steps/index.html +0 -371
  262. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -361
  263. package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
  264. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
  265. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
  266. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
  267. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
  268. package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -292
  269. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
  270. package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
  271. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -355
  272. package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
  273. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
  274. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
  275. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
  276. package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
  277. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
  278. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
  279. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
  280. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
  281. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
  282. package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
  283. package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
  284. package/coverage/lcov-report/src/constants/index.html +0 -146
  285. package/coverage/lcov-report/src/constants/index.ts.html +0 -697
  286. package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
  287. package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
  288. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
  289. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
  290. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
  291. package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
  292. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
  293. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
  294. package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
  295. package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
  296. package/coverage/lcov-report/src/db/index.html +0 -176
  297. package/coverage/lcov-report/src/db/index.ts.html +0 -133
  298. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
  299. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
  300. package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
  301. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
  302. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
  303. package/coverage/lcov-report/src/db/newid.ts.html +0 -100
  304. package/coverage/lcov-report/src/db/utils.ts.html +0 -913
  305. package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
  306. package/coverage/lcov-report/src/definitions/index.html +0 -116
  307. package/coverage/lcov-report/src/environment.ts.html +0 -472
  308. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
  309. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
  310. package/coverage/lcov-report/src/events/index.html +0 -161
  311. package/coverage/lcov-report/src/events/index.ts.html +0 -100
  312. package/coverage/lcov-report/src/events/utils.ts.html +0 -319
  313. package/coverage/lcov-report/src/index.html +0 -191
  314. package/coverage/lcov-report/src/index.ts.html +0 -133
  315. package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
  316. package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
  317. package/coverage/lcov-report/src/integrations/base/index.html +0 -161
  318. package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
  319. package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
  320. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
  321. package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
  322. package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
  323. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
  324. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
  325. package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
  326. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
  327. package/coverage/lcov-report/src/integrations/index.html +0 -371
  328. package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
  329. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
  330. package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
  331. package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
  332. package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
  333. package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
  334. package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
  335. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
  336. package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
  337. package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
  338. package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
  339. package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
  340. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
  341. package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
  342. package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
  343. package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
  344. package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
  345. package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
  346. package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
  347. package/coverage/lcov-report/src/middleware/index.html +0 -236
  348. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
  349. package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
  350. package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
  351. package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
  352. package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
  353. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
  354. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
  355. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
  356. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
  357. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
  358. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
  359. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
  360. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
  361. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
  362. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
  363. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
  364. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
  365. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
  366. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
  367. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
  368. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
  369. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
  370. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
  371. package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
  372. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
  373. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
  374. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
  375. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
  376. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
  377. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
  378. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
  379. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
  380. package/coverage/lcov-report/src/migrations/index.html +0 -116
  381. package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
  382. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
  383. package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
  384. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
  385. package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
  386. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
  387. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
  388. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
  389. package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
  390. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
  391. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
  392. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
  393. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
  394. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
  395. package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
  396. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
  397. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
  398. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
  399. package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
  400. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
  401. package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
  402. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
  403. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
  404. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
  405. package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
  406. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
  407. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
  408. package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
  409. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
  410. package/coverage/lcov-report/src/sdk/index.html +0 -116
  411. package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
  412. package/coverage/lcov-report/src/sdk/users/index.html +0 -131
  413. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
  414. package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
  415. package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
  416. package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
  417. package/coverage/lcov-report/src/startup.ts.html +0 -484
  418. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
  419. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
  420. package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
  421. package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
  422. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
  423. package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
  424. package/coverage/lcov-report/src/threads/index.html +0 -161
  425. package/coverage/lcov-report/src/threads/index.ts.html +0 -418
  426. package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
  427. package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
  428. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
  429. package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
  430. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
  431. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
  432. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
  433. package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
  434. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
  435. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
  436. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
  437. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
  438. package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
  439. package/coverage/lcov-report/src/utilities/index.html +0 -251
  440. package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
  441. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
  442. package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
  443. package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
  444. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
  445. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
  446. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
  447. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
  448. package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
  449. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
  450. package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
  451. package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
  452. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
  453. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
  454. package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
  455. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
  456. package/coverage/lcov-report/src/watch.ts.html +0 -196
  457. package/coverage/lcov-report/src/websocket.ts.html +0 -163
  458. package/coverage/lcov.info +0 -21750
@@ -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
+ }