@budibase/server 2.3.20 → 2.3.21-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 (528) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/__mocks__/node-fetch.ts +3 -0
  3. package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
  4. package/builder/assets/{index.3faec52d.js → index.90fba548.js} +439 -426
  5. package/builder/assets/index.b24b9dea.css +6 -0
  6. package/builder/assets/listScreenPreview.599c0aae.png +0 -0
  7. package/builder/index.html +2 -2
  8. package/dist/api/controllers/automation.js +11 -2
  9. package/dist/api/controllers/cloud.js +2 -2
  10. package/dist/api/controllers/query/index.js +2 -0
  11. package/dist/api/controllers/row/ExternalRequest.js +50 -23
  12. package/dist/api/controllers/row/external.js +12 -1
  13. package/dist/api/controllers/row/internalSearch.js +6 -450
  14. package/dist/api/controllers/row/utils.js +1 -3
  15. package/dist/api/controllers/table/external.js +8 -8
  16. package/dist/api/index.js +1 -21
  17. package/dist/api/routes/automation.js +1 -1
  18. package/dist/api/routes/public/applications.js +7 -7
  19. package/dist/api/routes/public/queries.js +2 -2
  20. package/dist/api/routes/public/rows.js +5 -5
  21. package/dist/api/routes/public/tables.js +5 -5
  22. package/dist/api/routes/public/users.js +5 -5
  23. package/dist/app.js +9 -1
  24. package/dist/constants/index.js +4 -24
  25. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  26. package/dist/db/index.js +25 -2
  27. package/dist/db/linkedRows/LinkController.js +9 -8
  28. package/dist/db/utils.js +2 -5
  29. package/dist/db/views/staticViews.js +2 -1
  30. package/dist/ddApm.js +11 -0
  31. package/dist/elasticApm.js +14 -0
  32. package/dist/integrations/base/sql.js +6 -3
  33. package/dist/integrations/googlesheets.js +17 -20
  34. package/dist/middleware/authorized.js +5 -3
  35. package/dist/middleware/builder.js +6 -3
  36. package/dist/migrations/functions/backfill/global/configs.js +10 -4
  37. package/dist/migrations/tests/helpers.js +1 -1
  38. package/dist/migrations/tests/structures.js +1 -1
  39. package/dist/package.json +14 -9
  40. package/dist/sdk/app/backups/constants.js +2 -1
  41. package/dist/sdk/app/backups/exports.js +20 -7
  42. package/dist/sdk/app/datasources/datasources.js +3 -0
  43. package/dist/sdk/app/rows/attachments.js +1 -1
  44. package/dist/startup.js +3 -0
  45. package/dist/tsconfig.build.tsbuildinfo +1 -1
  46. package/dist/utilities/redis.js +2 -0
  47. package/dist/utilities/retry.js +30 -0
  48. package/jest-testcontainers-config.js +8 -0
  49. package/jest.config.ts +35 -22
  50. package/package.json +15 -10
  51. package/scripts/load/create-many-apps.js +24 -0
  52. package/scripts/load/create-many-rows.js +30 -0
  53. package/scripts/load/utils.js +66 -0
  54. package/scripts/test.sh +12 -0
  55. package/specs/{generate.js → generate.ts} +7 -9
  56. package/specs/openapi.json +30 -30
  57. package/specs/openapi.yaml +27 -27
  58. package/specs/{parameters.js → parameters.ts} +6 -6
  59. package/specs/resources/{application.js → application.ts} +4 -4
  60. package/specs/resources/{index.js → index.ts} +8 -8
  61. package/specs/resources/{misc.js → misc.ts} +3 -3
  62. package/specs/resources/{query.js → query.ts} +4 -4
  63. package/specs/resources/{row.js → row.ts} +3 -4
  64. package/specs/resources/{table.js → table.ts} +5 -5
  65. package/specs/resources/{user.js → user.ts} +3 -3
  66. package/specs/resources/utils/Resource.ts +39 -0
  67. package/specs/resources/utils/{index.js → index.ts} +1 -1
  68. package/specs/{security.js → security.ts} +1 -1
  69. package/src/api/controllers/automation.ts +13 -2
  70. package/src/api/controllers/cloud.ts +2 -2
  71. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  72. package/src/api/controllers/query/index.ts +2 -0
  73. package/src/api/controllers/row/ExternalRequest.ts +98 -27
  74. package/src/api/controllers/row/external.ts +13 -1
  75. package/src/api/controllers/row/internalSearch.ts +11 -524
  76. package/src/api/controllers/row/utils.ts +1 -2
  77. package/src/api/controllers/table/external.ts +3 -2
  78. package/src/api/index.ts +3 -22
  79. package/src/api/routes/automation.ts +1 -1
  80. package/src/api/routes/public/applications.ts +7 -8
  81. package/src/api/routes/public/queries.ts +2 -2
  82. package/src/api/routes/public/rows.ts +5 -5
  83. package/src/api/routes/public/tables.ts +5 -5
  84. package/src/api/routes/public/tests/{compare.spec.js → compare.spec.ts} +45 -26
  85. package/src/api/routes/public/tests/users.spec.js +1 -1
  86. package/src/api/routes/public/tests/utils.ts +25 -8
  87. package/src/api/routes/public/users.ts +5 -5
  88. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  89. package/src/api/routes/tests/analytics.spec.js +4 -1
  90. package/src/api/routes/tests/apikeys.spec.js +1 -1
  91. package/src/api/routes/tests/application.spec.ts +20 -6
  92. package/src/api/routes/tests/auth.spec.js +2 -2
  93. package/src/api/routes/tests/automation.spec.js +6 -2
  94. package/src/api/routes/tests/backup.spec.ts +4 -14
  95. package/src/api/routes/tests/cloud.spec.ts +20 -31
  96. package/src/api/routes/tests/component.spec.js +1 -1
  97. package/src/api/routes/tests/datasource.spec.ts +20 -3
  98. package/src/api/routes/tests/dev.spec.js +1 -1
  99. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  100. package/src/api/routes/tests/integration.spec.js +1 -1
  101. package/src/api/routes/tests/layout.spec.js +1 -1
  102. package/src/api/routes/tests/metadata.spec.js +1 -1
  103. package/src/api/routes/tests/misc.spec.js +1 -1
  104. package/src/api/routes/tests/permissions.spec.js +4 -1
  105. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  106. package/src/api/routes/tests/role.spec.js +6 -1
  107. package/src/api/routes/tests/routing.spec.js +1 -1
  108. package/src/api/routes/tests/row.spec.js +11 -3
  109. package/src/api/routes/tests/screen.spec.js +1 -1
  110. package/src/api/routes/tests/static.spec.js +2 -13
  111. package/src/api/routes/tests/table.spec.js +1 -1
  112. package/src/api/routes/tests/templates.spec.js +1 -1
  113. package/src/api/routes/tests/user.spec.js +11 -12
  114. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -3
  115. package/src/api/routes/tests/utilities/index.ts +5 -3
  116. package/src/api/routes/tests/view.spec.js +4 -1
  117. package/src/api/routes/tests/webhook.spec.js +11 -2
  118. package/src/app.ts +12 -1
  119. package/src/automations/tests/automation.spec.js +4 -4
  120. package/src/automations/tests/bash.spec.js +1 -1
  121. package/src/automations/tests/discord.spec.js +1 -1
  122. package/src/automations/tests/executeQuery.spec.js +2 -3
  123. package/src/automations/tests/executeScript.spec.js +1 -1
  124. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  125. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  126. package/src/automations/tests/serverLog.spec.js +1 -1
  127. package/src/automations/tests/updateRow.spec.js +1 -1
  128. package/src/automations/tests/zapier.spec.js +1 -1
  129. package/src/constants/index.ts +1 -23
  130. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  131. package/src/db/index.ts +2 -2
  132. package/src/db/linkedRows/LinkController.ts +2 -1
  133. package/src/db/tests/linkController.spec.js +4 -1
  134. package/src/db/tests/linkTests.spec.js +1 -1
  135. package/src/db/utils.ts +0 -4
  136. package/src/db/views/staticViews.ts +3 -3
  137. package/src/ddApm.ts +7 -0
  138. package/src/definitions/openapi.ts +449 -63
  139. package/src/elasticApm.ts +10 -0
  140. package/src/integration-test/postgres.spec.ts +1032 -0
  141. package/src/integrations/base/sql.ts +11 -5
  142. package/src/integrations/googlesheets.ts +21 -22
  143. package/src/integrations/oracle.ts +1 -1
  144. package/src/integrations/tests/couchdb.spec.ts +0 -2
  145. package/src/integrations/tests/googlesheets.spec.ts +122 -0
  146. package/src/middleware/authorized.ts +6 -4
  147. package/src/middleware/builder.ts +8 -3
  148. package/src/migrations/functions/backfill/global/configs.ts +15 -9
  149. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  150. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  151. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +4 -5
  152. package/src/migrations/tests/helpers.ts +2 -2
  153. package/src/migrations/tests/index.spec.ts +13 -20
  154. package/src/migrations/tests/structures.ts +1 -0
  155. package/src/sdk/app/backups/constants.ts +1 -0
  156. package/src/sdk/app/backups/exports.ts +32 -10
  157. package/src/sdk/app/datasources/datasources.ts +3 -0
  158. package/src/sdk/app/rows/attachments.ts +1 -1
  159. package/src/startup.ts +4 -1
  160. package/src/tests/jestEnv.ts +9 -11
  161. package/src/tests/jestSetup.ts +9 -7
  162. package/src/tests/logging.ts +34 -0
  163. package/src/tests/utilities/TestConfiguration.ts +187 -101
  164. package/src/tests/utilities/structures.ts +16 -4
  165. package/src/utilities/redis.ts +2 -0
  166. package/src/utilities/retry.ts +18 -0
  167. package/tsconfig.build.json +1 -0
  168. package/builder/assets/index.4488f38d.css +0 -6
  169. package/coverage/clover.xml +0 -11774
  170. package/coverage/coverage-final.json +0 -284
  171. package/coverage/lcov-report/base.css +0 -224
  172. package/coverage/lcov-report/block-navigation.js +0 -87
  173. package/coverage/lcov-report/favicon.png +0 -0
  174. package/coverage/lcov-report/index.html +0 -1031
  175. package/coverage/lcov-report/prettify.css +0 -1
  176. package/coverage/lcov-report/prettify.js +0 -2
  177. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  178. package/coverage/lcov-report/sorter.js +0 -196
  179. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
  180. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
  181. package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
  182. package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
  183. package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
  184. package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
  185. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
  186. package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
  187. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
  188. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
  189. package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
  190. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
  191. package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
  192. package/coverage/lcov-report/src/api/controllers/index.html +0 -431
  193. package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
  194. package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
  195. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
  196. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
  197. package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
  198. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
  199. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
  200. package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
  201. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
  202. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
  203. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
  204. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
  205. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
  206. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
  207. package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
  208. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
  209. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
  210. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
  211. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
  212. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
  213. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
  214. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
  215. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
  216. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
  217. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
  218. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
  219. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
  220. package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
  221. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
  222. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
  223. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
  224. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
  225. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
  226. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
  227. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
  228. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
  229. package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
  230. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
  231. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
  232. package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
  233. package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
  234. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
  235. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
  236. package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
  237. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
  238. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
  239. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
  240. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -595
  241. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
  242. package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
  243. package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
  244. package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
  245. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
  246. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
  247. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
  248. package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
  249. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
  250. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
  251. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
  252. package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
  253. package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
  254. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
  255. package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
  256. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
  257. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
  258. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
  259. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
  260. package/coverage/lcov-report/src/api/index.html +0 -116
  261. package/coverage/lcov-report/src/api/index.ts.html +0 -352
  262. package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
  263. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
  264. package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
  265. package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
  266. package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
  267. package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
  268. package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
  269. package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
  270. package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
  271. package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
  272. package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
  273. package/coverage/lcov-report/src/api/routes/index.html +0 -551
  274. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
  275. package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
  276. package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
  277. package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
  278. package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
  279. package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
  280. package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
  281. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
  282. package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
  283. package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
  284. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
  285. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
  286. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
  287. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
  288. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
  289. package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
  290. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
  291. package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
  292. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
  293. package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
  294. package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
  295. package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
  296. package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
  297. package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
  298. package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
  299. package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
  300. package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
  301. package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
  302. package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
  303. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
  304. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
  305. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
  306. package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
  307. package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
  308. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
  309. package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
  310. package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
  311. package/coverage/lcov-report/src/app.ts.html +0 -424
  312. package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
  313. package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
  314. package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
  315. package/coverage/lcov-report/src/automations/index.html +0 -191
  316. package/coverage/lcov-report/src/automations/index.ts.html +0 -163
  317. package/coverage/lcov-report/src/automations/logging/index.html +0 -116
  318. package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
  319. package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
  320. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
  321. package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
  322. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
  323. package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -397
  324. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
  325. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
  326. package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
  327. package/coverage/lcov-report/src/automations/steps/index.html +0 -371
  328. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -409
  329. package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
  330. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
  331. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
  332. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
  333. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
  334. package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -340
  335. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
  336. package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
  337. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -403
  338. package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
  339. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
  340. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
  341. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
  342. package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
  343. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
  344. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
  345. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
  346. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
  347. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
  348. package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
  349. package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
  350. package/coverage/lcov-report/src/constants/index.html +0 -146
  351. package/coverage/lcov-report/src/constants/index.ts.html +0 -697
  352. package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
  353. package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
  354. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
  355. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
  356. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
  357. package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
  358. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
  359. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
  360. package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
  361. package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
  362. package/coverage/lcov-report/src/db/index.html +0 -176
  363. package/coverage/lcov-report/src/db/index.ts.html +0 -133
  364. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
  365. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
  366. package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
  367. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
  368. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
  369. package/coverage/lcov-report/src/db/newid.ts.html +0 -100
  370. package/coverage/lcov-report/src/db/utils.ts.html +0 -913
  371. package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
  372. package/coverage/lcov-report/src/definitions/index.html +0 -116
  373. package/coverage/lcov-report/src/environment.ts.html +0 -472
  374. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
  375. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
  376. package/coverage/lcov-report/src/events/index.html +0 -161
  377. package/coverage/lcov-report/src/events/index.ts.html +0 -100
  378. package/coverage/lcov-report/src/events/utils.ts.html +0 -319
  379. package/coverage/lcov-report/src/index.html +0 -191
  380. package/coverage/lcov-report/src/index.ts.html +0 -133
  381. package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
  382. package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
  383. package/coverage/lcov-report/src/integrations/base/index.html +0 -161
  384. package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
  385. package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
  386. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
  387. package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
  388. package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
  389. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
  390. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
  391. package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
  392. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
  393. package/coverage/lcov-report/src/integrations/index.html +0 -371
  394. package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
  395. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
  396. package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
  397. package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
  398. package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
  399. package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
  400. package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
  401. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
  402. package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
  403. package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
  404. package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
  405. package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
  406. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
  407. package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
  408. package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
  409. package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
  410. package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
  411. package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
  412. package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
  413. package/coverage/lcov-report/src/middleware/index.html +0 -236
  414. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
  415. package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
  416. package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
  417. package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
  418. package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
  419. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
  420. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
  421. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
  422. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
  423. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
  424. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
  425. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
  426. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
  427. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
  428. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
  429. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
  430. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
  431. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
  432. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
  433. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
  434. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
  435. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
  436. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
  437. package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
  438. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
  439. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
  440. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
  441. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
  442. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
  443. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
  444. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
  445. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
  446. package/coverage/lcov-report/src/migrations/index.html +0 -116
  447. package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
  448. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
  449. package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
  450. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
  451. package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
  452. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
  453. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
  454. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
  455. package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
  456. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
  457. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
  458. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
  459. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
  460. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
  461. package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
  462. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
  463. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
  464. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
  465. package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
  466. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
  467. package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
  468. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
  469. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
  470. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
  471. package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
  472. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
  473. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
  474. package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
  475. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
  476. package/coverage/lcov-report/src/sdk/index.html +0 -116
  477. package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
  478. package/coverage/lcov-report/src/sdk/users/index.html +0 -131
  479. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
  480. package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
  481. package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
  482. package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
  483. package/coverage/lcov-report/src/startup.ts.html +0 -484
  484. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
  485. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
  486. package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
  487. package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
  488. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
  489. package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
  490. package/coverage/lcov-report/src/threads/index.html +0 -161
  491. package/coverage/lcov-report/src/threads/index.ts.html +0 -418
  492. package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
  493. package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
  494. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
  495. package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
  496. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
  497. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
  498. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
  499. package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
  500. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
  501. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
  502. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
  503. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
  504. package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
  505. package/coverage/lcov-report/src/utilities/index.html +0 -251
  506. package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
  507. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
  508. package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
  509. package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
  510. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
  511. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
  512. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
  513. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
  514. package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
  515. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
  516. package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
  517. package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
  518. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
  519. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
  520. package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
  521. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
  522. package/coverage/lcov-report/src/watch.ts.html +0 -196
  523. package/coverage/lcov-report/src/websocket.ts.html +0 -163
  524. package/coverage/lcov.info +0 -21777
  525. package/dist/api/routes/public/tests/utils.js +0 -33
  526. package/dist/integrations/base/utils.js +0 -16
  527. package/specs/resources/utils/Resource.js +0 -26
  528. package/src/integrations/base/utils.ts +0 -12
@@ -1,13 +1,11 @@
1
- import env from "../environment"
2
1
  import { tmpdir } from "os"
3
2
 
4
- env._set("SELF_HOSTED", "1")
5
- env._set("NODE_ENV", "jest")
6
- env._set("JWT_SECRET", "test-jwtsecret")
7
- env._set("CLIENT_ID", "test-client-id")
8
- env._set("BUDIBASE_DIR", tmpdir("budibase-unittests"))
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")
3
+ process.env.SELF_HOSTED = "1"
4
+ process.env.NODE_ENV = "jest"
5
+ process.env.MULTI_TENANCY = "1"
6
+ // @ts-ignore
7
+ process.env.BUDIBASE_DIR = tmpdir("budibase-unittests")
8
+ process.env.LOG_LEVEL = process.env.LOG_LEVEL || "error"
9
+ process.env.ENABLE_4XX_HTTP_LOGGING = "0"
10
+ process.env.MOCK_REDIS = "1"
11
+ process.env.PLATFORM_URL = "http://localhost:10000"
@@ -1,9 +1,7 @@
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 "./logging"
2
+ import env from "../environment"
3
+ import { env as coreEnv } from "@budibase/backend-core"
4
+ import { testContainerUtils } from "@budibase/backend-core/tests"
7
5
 
8
6
  if (!process.env.DEBUG) {
9
7
  global.console.log = jest.fn() // console.log are ignored in tests
@@ -13,5 +11,9 @@ if (!process.env.DEBUG) {
13
11
  if (!process.env.CI) {
14
12
  // set a longer timeout in dev for debugging
15
13
  // 100 seconds
16
- jest.setTimeout(100000)
14
+ jest.setTimeout(100 * 1000)
15
+ } else {
16
+ jest.setTimeout(10 * 1000)
17
17
  }
18
+
19
+ testContainerUtils.setupEnv(env, coreEnv)
@@ -0,0 +1,34 @@
1
+ export enum LogLevel {
2
+ TRACE = "trace",
3
+ DEBUG = "debug",
4
+ INFO = "info",
5
+ WARN = "warn",
6
+ ERROR = "error",
7
+ }
8
+
9
+ const LOG_INDEX: { [key in LogLevel]: number } = {
10
+ [LogLevel.TRACE]: 1,
11
+ [LogLevel.DEBUG]: 2,
12
+ [LogLevel.INFO]: 3,
13
+ [LogLevel.WARN]: 4,
14
+ [LogLevel.ERROR]: 5,
15
+ }
16
+
17
+ const setIndex = LOG_INDEX[process.env.LOG_LEVEL as LogLevel]
18
+
19
+ if (setIndex > LOG_INDEX.trace) {
20
+ global.console.trace = jest.fn()
21
+ }
22
+
23
+ if (setIndex > LOG_INDEX.debug) {
24
+ global.console.debug = jest.fn()
25
+ }
26
+
27
+ if (setIndex > LOG_INDEX.info) {
28
+ global.console.info = jest.fn()
29
+ global.console.log = jest.fn()
30
+ }
31
+
32
+ if (setIndex > LOG_INDEX.warn) {
33
+ global.console.warn = jest.fn()
34
+ }
@@ -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,
@@ -20,7 +21,6 @@ import {
20
21
  basicScreen,
21
22
  basicLayout,
22
23
  basicWebhook,
23
- TENANT_ID,
24
24
  } from "./structures"
25
25
  import {
26
26
  constants,
@@ -38,21 +38,31 @@ import { cleanup } from "../../utilities/fileSystem"
38
38
  import newid from "../../db/newid"
39
39
  import { generateUserMetadataID } from "../../db/utils"
40
40
  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"
41
+ import supertest from "supertest"
42
+ import {
43
+ App,
44
+ AuthToken,
45
+ Datasource,
46
+ Row,
47
+ SourceName,
48
+ Table,
49
+ } from "@budibase/types"
50
+
51
+ type DefaultUserValues = {
52
+ globalUserId: string
53
+ email: string
54
+ firstName: string
55
+ lastName: string
56
+ csrfToken: string
57
+ }
48
58
 
49
59
  class TestConfiguration {
50
60
  server: any
51
- request: any
61
+ request: supertest.SuperTest<supertest.Test> | undefined
52
62
  started: boolean
53
63
  appId: string | null
54
64
  allApps: any[]
55
- app: any
65
+ app?: App
56
66
  prodApp: any
57
67
  prodAppId: any
58
68
  user: any
@@ -62,6 +72,8 @@ class TestConfiguration {
62
72
  linkedTable: any
63
73
  automation: any
64
74
  datasource: any
75
+ tenantId?: string
76
+ defaultUserValues: DefaultUserValues
65
77
 
66
78
  constructor(openServer = true) {
67
79
  if (openServer) {
@@ -76,6 +88,17 @@ class TestConfiguration {
76
88
  }
77
89
  this.appId = null
78
90
  this.allApps = []
91
+ this.defaultUserValues = this.populateDefaultUserValues()
92
+ }
93
+
94
+ populateDefaultUserValues(): DefaultUserValues {
95
+ return {
96
+ globalUserId: `us_${newid()}`,
97
+ email: generator.email(),
98
+ firstName: generator.first(),
99
+ lastName: generator.last(),
100
+ csrfToken: generator.hash(),
101
+ }
79
102
  }
80
103
 
81
104
  getRequest() {
@@ -100,10 +123,10 @@ class TestConfiguration {
100
123
 
101
124
  getUserDetails() {
102
125
  return {
103
- globalId: GLOBAL_USER_ID,
104
- email: EMAIL,
105
- firstName: FIRSTNAME,
106
- lastName: LASTNAME,
126
+ globalId: this.defaultUserValues.globalUserId,
127
+ email: this.defaultUserValues.email,
128
+ firstName: this.defaultUserValues.firstName,
129
+ lastName: this.defaultUserValues.lastName,
107
130
  }
108
131
  }
109
132
 
@@ -111,7 +134,9 @@ class TestConfiguration {
111
134
  if (!appId) {
112
135
  appId = this.appId
113
136
  }
114
- return tenancy.doInTenant(TENANT_ID, () => {
137
+
138
+ const tenant = this.getTenantId()
139
+ return tenancy.doInTenant(tenant, () => {
115
140
  // check if already in a context
116
141
  if (context.getAppId() == null && appId !== null) {
117
142
  return context.doInAppContext(appId, async () => {
@@ -130,11 +155,7 @@ class TestConfiguration {
130
155
  if (!this.started) {
131
156
  await startup()
132
157
  }
133
- this.user = await this.globalUser()
134
- this.globalUserId = this.user._id
135
- this.userMetadataId = generateUserMetadataID(this.globalUserId)
136
-
137
- return this.createApp(appName)
158
+ return this.newTenant(appName)
138
159
  }
139
160
 
140
161
  end() {
@@ -149,9 +170,28 @@ class TestConfiguration {
149
170
  }
150
171
  }
151
172
 
173
+ // MODES
174
+ setMultiTenancy = (value: boolean) => {
175
+ env._set("MULTI_TENANCY", value)
176
+ coreEnv._set("MULTI_TENANCY", value)
177
+ }
178
+
179
+ setSelfHosted = (value: boolean) => {
180
+ env._set("SELF_HOSTED", value)
181
+ coreEnv._set("SELF_HOSTED", value)
182
+ }
183
+
184
+ modeCloud = () => {
185
+ this.setSelfHosted(false)
186
+ }
187
+
188
+ modeSelf = () => {
189
+ this.setSelfHosted(true)
190
+ }
191
+
152
192
  // UTILS
153
193
 
154
- async _req(body: any, params: any, controlFunc: any) {
194
+ _req(body: any, params: any, controlFunc: any) {
155
195
  // create a fake request ctx
156
196
  const request: any = {}
157
197
  const appId = this.appId
@@ -159,7 +199,7 @@ class TestConfiguration {
159
199
  // fake cookies, we don't need them
160
200
  request.cookies = { set: () => {}, get: () => {} }
161
201
  request.config = { jwtSecret: env.JWT_SECRET }
162
- request.user = { appId, tenantId: TENANT_ID }
202
+ request.user = { appId, tenantId: this.getTenantId() }
163
203
  request.query = {}
164
204
  request.request = {
165
205
  body,
@@ -175,61 +215,70 @@ class TestConfiguration {
175
215
 
176
216
  // USER / AUTH
177
217
  async globalUser({
178
- id = GLOBAL_USER_ID,
179
- firstName = FIRSTNAME,
180
- lastName = LASTNAME,
218
+ id = this.defaultUserValues.globalUserId,
219
+ firstName = this.defaultUserValues.firstName,
220
+ lastName = this.defaultUserValues.lastName,
181
221
  builder = true,
182
222
  admin = false,
183
- email = EMAIL,
223
+ email = this.defaultUserValues.email,
184
224
  roles,
185
225
  }: any = {}) {
186
- return tenancy.doWithGlobalDB(TENANT_ID, async (db: any) => {
187
- let existing
188
- try {
189
- existing = await db.get(id)
190
- } catch (err) {
191
- existing = { email }
192
- }
193
- const user = {
194
- _id: id,
195
- ...existing,
196
- roles: roles || {},
197
- tenantId: TENANT_ID,
198
- firstName,
199
- lastName,
200
- }
201
- await sessions.createASession(id, {
202
- sessionId: "sessionid",
203
- tenantId: TENANT_ID,
204
- csrfToken: CSRF_TOKEN,
205
- })
206
- if (builder) {
207
- user.builder = { global: true }
208
- } else {
209
- user.builder = { global: false }
210
- }
211
- if (admin) {
212
- user.admin = { global: true }
213
- } else {
214
- user.admin = { global: false }
215
- }
216
- const resp = await db.put(user)
217
- return {
218
- _rev: resp._rev,
219
- ...user,
220
- }
226
+ const db = tenancy.getTenantDB(this.getTenantId())
227
+ let existing
228
+ try {
229
+ existing = await db.get(id)
230
+ } catch (err) {
231
+ existing = { email }
232
+ }
233
+ const user = {
234
+ _id: id,
235
+ ...existing,
236
+ roles: roles || {},
237
+ tenantId: this.getTenantId(),
238
+ firstName,
239
+ lastName,
240
+ }
241
+ await sessions.createASession(id, {
242
+ sessionId: "sessionid",
243
+ tenantId: this.getTenantId(),
244
+ csrfToken: this.defaultUserValues.csrfToken,
221
245
  })
246
+ if (builder) {
247
+ user.builder = { global: true }
248
+ } else {
249
+ user.builder = { global: false }
250
+ }
251
+ if (admin) {
252
+ user.admin = { global: true }
253
+ } else {
254
+ user.admin = { global: false }
255
+ }
256
+ const resp = await db.put(user)
257
+ return {
258
+ _rev: resp.rev,
259
+ ...user,
260
+ }
222
261
  }
223
262
 
224
263
  async createUser(
225
- id = null,
226
- firstName = FIRSTNAME,
227
- lastName = LASTNAME,
228
- email = EMAIL,
229
- builder = true,
230
- admin = false,
231
- roles = {}
264
+ user: {
265
+ id?: string
266
+ firstName?: string
267
+ lastName?: string
268
+ email?: string
269
+ builder?: boolean
270
+ admin?: boolean
271
+ roles?: any
272
+ } = {}
232
273
  ) {
274
+ let { id, firstName, lastName, email, builder, admin, roles } = user
275
+ firstName = firstName || this.defaultUserValues.firstName
276
+ lastName = lastName || this.defaultUserValues.lastName
277
+ email = email || this.defaultUserValues.email
278
+ roles = roles || {}
279
+ if (builder == null) {
280
+ builder = true
281
+ }
233
282
  const globalId = !id ? `us_${Math.random()}` : `us_${id}`
234
283
  const resp = await this.globalUser({
235
284
  id: globalId,
@@ -264,13 +313,13 @@ class TestConfiguration {
264
313
  }
265
314
  await sessions.createASession(userId, {
266
315
  sessionId: "sessionid",
267
- tenantId: TENANT_ID,
316
+ tenantId: this.getTenantId(),
268
317
  })
269
318
  // have to fake this
270
319
  const authObj = {
271
320
  userId,
272
321
  sessionId: "sessionid",
273
- tenantId: TENANT_ID,
322
+ tenantId: this.getTenantId(),
274
323
  }
275
324
  const app = {
276
325
  roleId: roleId,
@@ -292,11 +341,14 @@ class TestConfiguration {
292
341
  })
293
342
  }
294
343
 
344
+ // HEADERS
345
+
295
346
  defaultHeaders(extras = {}) {
296
- const authObj = {
297
- userId: GLOBAL_USER_ID,
347
+ const tenantId = this.getTenantId()
348
+ const authObj: AuthToken = {
349
+ userId: this.defaultUserValues.globalUserId,
298
350
  sessionId: "sessionid",
299
- tenantId: TENANT_ID,
351
+ tenantId,
300
352
  }
301
353
  const app = {
302
354
  roleId: roles.BUILTIN_ROLE_IDS.ADMIN,
@@ -310,9 +362,11 @@ class TestConfiguration {
310
362
  `${constants.Cookie.Auth}=${authToken}`,
311
363
  `${constants.Cookie.CurrentApp}=${appToken}`,
312
364
  ],
313
- [constants.Header.CSRF_TOKEN]: CSRF_TOKEN,
365
+ [constants.Header.CSRF_TOKEN]: this.defaultUserValues.csrfToken,
366
+ Host: this.tenantHost(),
314
367
  ...extras,
315
368
  }
369
+
316
370
  if (this.appId) {
317
371
  headers[constants.Header.APP_ID] = this.appId
318
372
  }
@@ -328,11 +382,14 @@ class TestConfiguration {
328
382
  if (appId) {
329
383
  headers[constants.Header.APP_ID] = appId
330
384
  }
385
+
386
+ headers[constants.Header.TENANT_ID] = this.getTenantId()
387
+
331
388
  return headers
332
389
  }
333
390
 
334
391
  async roleHeaders({
335
- email = EMAIL,
392
+ email = this.defaultUserValues.email,
336
393
  roleId = roles.BUILTIN_ROLE_IDS.ADMIN,
337
394
  builder = false,
338
395
  prodApp = true,
@@ -340,27 +397,54 @@ class TestConfiguration {
340
397
  return this.login({ email, roleId, builder, prodApp })
341
398
  }
342
399
 
400
+ // TENANCY
401
+
402
+ tenantHost() {
403
+ const tenantId = this.getTenantId()
404
+ const platformHost = new URL(coreEnv.PLATFORM_URL).host.split(":")[0]
405
+ return `${tenantId}.${platformHost}`
406
+ }
407
+
408
+ getTenantId() {
409
+ if (!this.tenantId) {
410
+ throw new Error("no test tenant id - init has not been called")
411
+ }
412
+ return this.tenantId
413
+ }
414
+
415
+ async newTenant(appName = newid()): Promise<App> {
416
+ this.defaultUserValues = this.populateDefaultUserValues()
417
+ this.tenantId = structures.tenant.id()
418
+ this.user = await this.globalUser()
419
+ this.globalUserId = this.user._id
420
+ this.userMetadataId = generateUserMetadataID(this.globalUserId)
421
+ return this.createApp(appName)
422
+ }
423
+
424
+ doInTenant(task: any) {
425
+ return context.doInTenant(this.getTenantId(), task)
426
+ }
427
+
343
428
  // API
344
429
 
345
- async generateApiKey(userId = GLOBAL_USER_ID) {
346
- return tenancy.doWithGlobalDB(TENANT_ID, async (db: any) => {
347
- const id = dbCore.generateDevInfoID(userId)
348
- let devInfo
349
- try {
350
- devInfo = await db.get(id)
351
- } catch (err) {
352
- devInfo = { _id: id, userId }
353
- }
354
- devInfo.apiKey = encryption.encrypt(
355
- `${TENANT_ID}${dbCore.SEPARATOR}${newid()}`
356
- )
357
- await db.put(devInfo)
358
- return devInfo.apiKey
359
- })
430
+ async generateApiKey(userId = this.defaultUserValues.globalUserId) {
431
+ const db = tenancy.getTenantDB(this.getTenantId())
432
+ const id = dbCore.generateDevInfoID(userId)
433
+ let devInfo
434
+ try {
435
+ devInfo = await db.get(id)
436
+ } catch (err) {
437
+ devInfo = { _id: id, userId }
438
+ }
439
+ devInfo.apiKey = encryption.encrypt(
440
+ `${this.getTenantId()}${dbCore.SEPARATOR}${newid()}`
441
+ )
442
+ await db.put(devInfo)
443
+ return devInfo.apiKey
360
444
  }
361
445
 
362
446
  // APP
363
- async createApp(appName: string) {
447
+ async createApp(appName: string): Promise<App> {
364
448
  // create dev app
365
449
  // clear any old app
366
450
  this.appId = null
@@ -370,7 +454,7 @@ class TestConfiguration {
370
454
  null,
371
455
  controllers.app.create
372
456
  )
373
- this.appId = this.app.appId
457
+ this.appId = this.app?.appId!
374
458
  })
375
459
  return await context.doInAppContext(this.appId, async () => {
376
460
  // create production app
@@ -408,13 +492,13 @@ class TestConfiguration {
408
492
 
409
493
  // TABLE
410
494
 
411
- async updateTable(config?: any) {
495
+ async updateTable(config?: any): Promise<Table> {
412
496
  config = config || basicTable()
413
497
  this.table = await this._req(config, null, controllers.table.save)
414
498
  return this.table
415
499
  }
416
500
 
417
- async createTable(config?: any) {
501
+ async createTable(config?: Table) {
418
502
  if (config != null && config._id) {
419
503
  delete config._id
420
504
  }
@@ -458,7 +542,7 @@ class TestConfiguration {
458
542
 
459
543
  // ROW
460
544
 
461
- async createRow(config: any = null) {
545
+ async createRow(config?: Row): Promise<Row> {
462
546
  if (!this.table) {
463
547
  throw "Test requires table to be configured."
464
548
  }
@@ -467,7 +551,7 @@ class TestConfiguration {
467
551
  return this._req(config, { tableId }, controllers.row.save)
468
552
  }
469
553
 
470
- async getRow(tableId: string, rowId: string) {
554
+ async getRow(tableId: string, rowId: string): Promise<Row> {
471
555
  return this._req(null, { tableId, rowId }, controllers.row.find)
472
556
  }
473
557
 
@@ -549,7 +633,9 @@ class TestConfiguration {
549
633
 
550
634
  // DATASOURCE
551
635
 
552
- async createDatasource(config?: any) {
636
+ async createDatasource(config?: {
637
+ datasource: Datasource
638
+ }): Promise<Datasource> {
553
639
  config = config || basicDatasource()
554
640
  const response = await this._req(config, null, controllers.datasource.save)
555
641
  this.datasource = response.datasource
@@ -570,7 +656,7 @@ class TestConfiguration {
570
656
  return this.createDatasource({
571
657
  datasource: {
572
658
  ...basicDatasource().datasource,
573
- source: "REST",
659
+ source: SourceName.REST,
574
660
  config: cfg || {},
575
661
  },
576
662
  })
@@ -579,7 +665,7 @@ class TestConfiguration {
579
665
  async dynamicVariableDatasource() {
580
666
  let datasource = await this.restDatasource()
581
667
  const basedOnQuery = await this.createQuery({
582
- ...basicQuery(datasource._id),
668
+ ...basicQuery(datasource._id!),
583
669
  fields: {
584
670
  path: "www.google.com",
585
671
  },
@@ -607,7 +693,7 @@ class TestConfiguration {
607
693
  datasource: any,
608
694
  fields: any,
609
695
  params: any,
610
- verb: string
696
+ verb?: string
611
697
  ) {
612
698
  return request
613
699
  .post(`/api/queries/preview`)
@@ -7,12 +7,12 @@ 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")
13
15
 
14
- export const TENANT_ID = "default"
15
-
16
16
  export function basicTable() {
17
17
  return {
18
18
  name: "TestTable",
@@ -207,12 +207,12 @@ export function basicRole() {
207
207
  }
208
208
  }
209
209
 
210
- export function basicDatasource() {
210
+ export function basicDatasource(): { datasource: Datasource } {
211
211
  return {
212
212
  datasource: {
213
213
  type: "datasource",
214
214
  name: "Test",
215
- source: "POSTGRES",
215
+ source: SourceName.POSTGRES,
216
216
  config: {},
217
217
  },
218
218
  }
@@ -255,3 +255,15 @@ export function basicWebhook(automationId: string) {
255
255
  },
256
256
  }
257
257
  }
258
+
259
+ export function basicEnvironmentVariable(
260
+ name: string,
261
+ prod: string,
262
+ dev?: string
263
+ ) {
264
+ return {
265
+ name,
266
+ production: prod,
267
+ development: dev || prod,
268
+ }
269
+ }
@@ -21,6 +21,8 @@ export async function shutdown() {
21
21
  if (devAppClient) await devAppClient.finish()
22
22
  if (debounceClient) await debounceClient.finish()
23
23
  if (flagClient) await flagClient.finish()
24
+ // shutdown core clients
25
+ await redis.clients.shutdown()
24
26
  console.log("Redis shutdown")
25
27
  }
26
28
 
@@ -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"