@budibase/server 2.2.10 → 2.2.11-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 (455) hide show
  1. package/__mocks__/aws-sdk.ts +19 -0
  2. package/__mocks__/node-fetch.ts +78 -0
  3. package/builder/assets/{index.92c29ddf.js → index.bc972956.js} +368 -365
  4. package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +5016 -4982
  7. package/coverage/coverage-final.json +265 -262
  8. package/coverage/lcov-report/index.html +207 -207
  9. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +7 -7
  10. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  11. package/coverage/lcov-report/src/api/controllers/application.ts.html +258 -183
  12. package/coverage/lcov-report/src/api/controllers/auth.ts.html +11 -11
  13. package/coverage/lcov-report/src/api/controllers/automation.ts.html +51 -51
  14. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  15. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +91 -79
  16. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  17. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +30 -30
  18. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +17 -14
  19. package/coverage/lcov-report/src/api/controllers/deploy/index.html +19 -19
  20. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +141 -195
  21. package/coverage/lcov-report/src/api/controllers/dev.ts.html +18 -18
  22. package/coverage/lcov-report/src/api/controllers/index.html +51 -51
  23. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  24. package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
  25. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  26. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  27. package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
  28. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +19 -19
  29. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +63 -63
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  31. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  32. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +55 -55
  33. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  34. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  35. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  36. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +67 -16
  37. package/coverage/lcov-report/src/api/controllers/public/index.html +15 -15
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  45. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +6 -6
  46. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +10 -10
  47. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +9 -9
  48. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +11 -11
  49. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +6 -6
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  51. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +8 -8
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +8 -8
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +10 -10
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/index.html +19 -19
  60. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +60 -60
  61. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  62. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  63. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  64. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +12 -15
  65. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +20 -20
  66. package/coverage/lcov-report/src/api/controllers/row/index.html +1 -1
  67. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +14 -14
  68. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +55 -52
  69. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +9 -9
  70. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +21 -12
  71. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +17 -14
  72. package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
  73. package/coverage/lcov-report/src/api/controllers/script.ts.html +18 -18
  74. package/coverage/lcov-report/src/api/controllers/static/index.html +11 -11
  75. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +32 -44
  76. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +10 -10
  77. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +14 -14
  78. package/coverage/lcov-report/src/api/controllers/table/index.html +19 -19
  79. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +14 -14
  80. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +17 -17
  81. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +51 -51
  82. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  83. package/coverage/lcov-report/src/api/controllers/user.ts.html +119 -119
  84. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +4 -4
  85. package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
  86. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +49 -49
  87. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
  88. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +33 -33
  89. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +14 -14
  90. package/coverage/lcov-report/src/api/index.html +1 -1
  91. package/coverage/lcov-report/src/api/index.ts.html +33 -33
  92. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  93. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  94. package/coverage/lcov-report/src/api/routes/application.ts.html +44 -11
  95. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  96. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  97. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  98. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  99. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  100. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  101. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -11
  102. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  103. package/coverage/lcov-report/src/api/routes/index.html +7 -7
  104. package/coverage/lcov-report/src/api/routes/index.ts.html +40 -37
  105. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  106. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  107. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  108. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  109. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  110. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  111. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +146 -14
  112. package/coverage/lcov-report/src/api/routes/public/index.html +7 -7
  113. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  114. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  115. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  116. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  117. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  118. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  119. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  120. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  121. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  122. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  123. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  125. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  126. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  127. package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
  128. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  129. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  130. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  131. package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
  132. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +15 -15
  134. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  135. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +24 -24
  136. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  137. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
  139. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  140. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  141. package/coverage/lcov-report/src/app.ts.html +32 -32
  142. package/coverage/lcov-report/src/automations/actions.ts.html +25 -25
  143. package/coverage/lcov-report/src/automations/automationUtils.ts.html +91 -19
  144. package/coverage/lcov-report/src/automations/bullboard.ts.html +11 -11
  145. package/coverage/lcov-report/src/automations/index.html +19 -19
  146. package/coverage/lcov-report/src/automations/index.ts.html +13 -13
  147. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  148. package/coverage/lcov-report/src/automations/logging/index.ts.html +11 -11
  149. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  150. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  151. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  152. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  153. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  154. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  155. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  156. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  157. package/coverage/lcov-report/src/automations/steps/index.html +83 -83
  158. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  159. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  160. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +14 -14
  161. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +17 -17
  162. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  163. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +18 -18
  164. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  165. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  166. package/coverage/lcov-report/src/automations/steps/utils.ts.html +16 -16
  167. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  168. package/coverage/lcov-report/src/automations/tests/utilities/index.html +5 -5
  169. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +26 -26
  170. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  171. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  172. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  173. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  175. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  176. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  177. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  178. package/coverage/lcov-report/src/automations/triggers.ts.html +21 -21
  179. package/coverage/lcov-report/src/automations/utils.ts.html +56 -56
  180. package/coverage/lcov-report/src/constants/index.html +1 -1
  181. package/coverage/lcov-report/src/constants/index.ts.html +92 -92
  182. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  183. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  184. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +23 -23
  185. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  186. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  187. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  188. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  189. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  190. package/coverage/lcov-report/src/db/dynamoClient.ts.html +16 -16
  191. package/coverage/lcov-report/src/db/inMemoryView.ts.html +5 -5
  192. package/coverage/lcov-report/src/db/index.html +19 -19
  193. package/coverage/lcov-report/src/db/index.ts.html +9 -9
  194. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +8 -8
  195. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  196. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  197. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +15 -15
  198. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +12 -12
  199. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  200. package/coverage/lcov-report/src/db/utils.ts.html +80 -80
  201. package/coverage/lcov-report/src/definitions/automations.ts.html +4 -4
  202. package/coverage/lcov-report/src/definitions/datasource.ts.html +4 -4
  203. package/coverage/lcov-report/src/definitions/index.html +1 -1
  204. package/coverage/lcov-report/src/environment.ts.html +40 -28
  205. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
  206. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
  207. package/coverage/lcov-report/src/events/index.html +1 -1
  208. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  209. package/coverage/lcov-report/src/events/utils.ts.html +3 -3
  210. package/coverage/lcov-report/src/index.html +25 -25
  211. package/coverage/lcov-report/src/index.ts.html +1 -1
  212. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  213. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  214. package/coverage/lcov-report/src/integrations/base/index.html +1 -1
  215. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  216. package/coverage/lcov-report/src/integrations/base/sql.ts.html +14 -14
  217. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
  218. package/coverage/lcov-report/src/integrations/base/utils.ts.html +3 -3
  219. package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
  220. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
  221. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  223. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +12 -12
  224. package/coverage/lcov-report/src/integrations/index.html +5 -5
  225. package/coverage/lcov-report/src/integrations/index.ts.html +35 -47
  226. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  227. package/coverage/lcov-report/src/integrations/mongodb.ts.html +5 -5
  228. package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
  229. package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
  230. package/coverage/lcov-report/src/integrations/postgres.ts.html +42 -42
  231. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  232. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +13 -13
  233. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  234. package/coverage/lcov-report/src/integrations/rest.ts.html +16 -16
  235. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  236. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  237. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  238. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  239. package/coverage/lcov-report/src/integrations/utils.ts.html +36 -36
  240. package/coverage/lcov-report/src/middleware/appInfo.ts.html +7 -7
  241. package/coverage/lcov-report/src/middleware/authorized.ts.html +28 -28
  242. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  243. package/coverage/lcov-report/src/middleware/currentapp.ts.html +39 -39
  244. package/coverage/lcov-report/src/middleware/index.html +1 -1
  245. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  246. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  247. package/coverage/lcov-report/src/middleware/resourceId.ts.html +22 -22
  248. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  249. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  250. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +13 -10
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  264. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  265. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  266. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  267. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  268. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  270. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  273. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  275. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  276. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  277. package/coverage/lcov-report/src/migrations/index.html +1 -1
  278. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  279. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  280. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  281. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  282. package/coverage/lcov-report/src/sdk/app/applications/index.html +15 -15
  283. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  284. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  285. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  286. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  287. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  288. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +6 -6
  289. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  290. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
  291. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +42 -54
  292. package/coverage/lcov-report/src/sdk/app/backups/index.html +30 -30
  293. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  294. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  295. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
  297. package/coverage/lcov-report/src/sdk/index.html +1 -1
  298. package/coverage/lcov-report/src/sdk/index.ts.html +8 -8
  299. package/coverage/lcov-report/src/sdk/users/index.html +5 -5
  300. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  301. package/coverage/lcov-report/src/sdk/users/utils.ts.html +34 -34
  302. package/coverage/lcov-report/src/startup.ts.html +42 -42
  303. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +182 -125
  304. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  305. package/coverage/lcov-report/src/tests/utilities/index.html +15 -15
  306. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  307. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +30 -30
  308. package/coverage/lcov-report/src/threads/automation.ts.html +34 -103
  309. package/coverage/lcov-report/src/threads/index.html +19 -19
  310. package/coverage/lcov-report/src/threads/index.ts.html +25 -25
  311. package/coverage/lcov-report/src/threads/query.ts.html +71 -71
  312. package/coverage/lcov-report/src/threads/utils.ts.html +18 -18
  313. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  314. package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
  315. package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
  316. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  317. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  318. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
  319. package/coverage/lcov-report/src/utilities/fileSystem/index.html +79 -19
  320. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  321. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +280 -0
  322. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  323. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  324. package/coverage/lcov-report/src/utilities/global.ts.html +43 -43
  325. package/coverage/lcov-report/src/utilities/index.html +48 -63
  326. package/coverage/lcov-report/src/utilities/index.ts.html +36 -168
  327. package/coverage/lcov-report/src/utilities/redis.ts.html +32 -32
  328. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  329. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  330. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +28 -28
  331. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +60 -33
  332. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  333. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
  334. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +32 -32
  335. package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
  336. package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
  337. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  338. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
  339. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  340. package/coverage/lcov-report/src/utilities/users.ts.html +6 -6
  341. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +56 -56
  342. package/coverage/lcov-report/src/watch.ts.html +9 -9
  343. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  344. package/coverage/lcov.info +7161 -7094
  345. package/dist/api/controllers/application.js +47 -35
  346. package/dist/api/controllers/cloud.js +6 -2
  347. package/dist/api/controllers/deploy/index.js +43 -60
  348. package/dist/api/controllers/plugin/index.js +6 -6
  349. package/dist/api/controllers/public/applications.js +22 -1
  350. package/dist/api/controllers/row/ExternalRequest.js +0 -1
  351. package/dist/api/controllers/row/internal.js +12 -12
  352. package/dist/api/controllers/row/staticFormula.js +1 -1
  353. package/dist/api/controllers/static/index.js +8 -11
  354. package/dist/api/controllers/view/index.js +2 -2
  355. package/dist/api/routes/application.js +3 -0
  356. package/dist/api/routes/deploy.js +1 -2
  357. package/dist/api/routes/public/applications.js +37 -0
  358. package/dist/api/routes/public/middleware/mapper.js +3 -0
  359. package/dist/automations/automationUtils.js +26 -1
  360. package/dist/environment.js +5 -1
  361. package/dist/integrations/googlesheets.js +1 -1
  362. package/dist/integrations/index.js +1 -2
  363. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  364. package/dist/package.json +9 -7
  365. package/dist/sdk/app/backups/imports.js +3 -7
  366. package/dist/threads/automation.js +4 -28
  367. package/dist/tsconfig.build.tsbuildinfo +1 -1
  368. package/dist/utilities/fileSystem/app.js +97 -0
  369. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  370. package/dist/utilities/fileSystem/filesystem.js +182 -0
  371. package/dist/utilities/fileSystem/index.js +18 -342
  372. package/dist/utilities/fileSystem/plugin.js +63 -0
  373. package/dist/utilities/fileSystem/template.js +44 -0
  374. package/dist/utilities/index.js +1 -44
  375. package/dist/utilities/rowProcessor/index.js +12 -4
  376. package/package.json +10 -8
  377. package/scripts/dev/manage.js +0 -16
  378. package/specs/openapi.json +84 -0
  379. package/specs/openapi.yaml +53 -0
  380. package/specs/resources/application.js +19 -0
  381. package/src/api/controllers/application.ts +61 -36
  382. package/src/api/controllers/auth.ts +2 -2
  383. package/src/api/controllers/cloud.ts +10 -6
  384. package/src/api/controllers/deploy/Deployment.ts +1 -0
  385. package/src/api/controllers/deploy/index.ts +40 -58
  386. package/src/api/controllers/plugin/index.ts +14 -9
  387. package/src/api/controllers/public/applications.ts +17 -0
  388. package/src/api/controllers/row/ExternalRequest.ts +0 -1
  389. package/src/api/controllers/row/internal.ts +24 -23
  390. package/src/api/controllers/row/staticFormula.ts +5 -2
  391. package/src/api/controllers/row/utils.ts +2 -1
  392. package/src/api/controllers/static/index.ts +6 -10
  393. package/src/api/controllers/view/index.ts +2 -2
  394. package/src/api/routes/application.ts +11 -0
  395. package/src/api/routes/deploy.ts +0 -1
  396. package/src/api/routes/index.ts +4 -3
  397. package/src/api/routes/public/applications.ts +44 -0
  398. package/src/api/routes/public/middleware/mapper.ts +4 -0
  399. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  400. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  401. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  402. package/src/api/routes/tests/cloud.spec.ts +65 -0
  403. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  404. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  405. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  406. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
  407. package/src/api/routes/tests/permissions.spec.js +1 -1
  408. package/src/api/routes/tests/plugin.spec.ts +179 -0
  409. package/src/api/routes/tests/routing.spec.js +1 -2
  410. package/src/api/routes/tests/row.spec.js +4 -2
  411. package/src/api/routes/tests/static.spec.js +2 -17
  412. package/src/api/routes/tests/table.spec.js +8 -2
  413. package/src/api/routes/tests/user.spec.js +86 -0
  414. package/src/api/routes/tests/utilities/index.ts +2 -2
  415. package/src/api/routes/tests/webhook.spec.js +1 -1
  416. package/src/automations/automationUtils.ts +24 -0
  417. package/src/automations/tests/bash.spec.js +34 -0
  418. package/src/automations/tests/discord.spec.js +27 -0
  419. package/src/automations/tests/executeQuery.spec.js +49 -0
  420. package/src/automations/tests/executeScript.spec.js +48 -0
  421. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  422. package/src/automations/tests/serverLog.spec.js +22 -0
  423. package/src/automations/tests/utilities/index.ts +2 -2
  424. package/src/automations/tests/zapier.spec.js +27 -0
  425. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  426. package/src/definitions/openapi.ts +10 -0
  427. package/src/environment.ts +5 -1
  428. package/src/integrations/googlesheets.ts +1 -1
  429. package/src/integrations/index.ts +1 -5
  430. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  431. package/src/sdk/app/backups/imports.ts +3 -7
  432. package/src/tests/jestSetup.ts +4 -1
  433. package/src/tests/utilities/TestConfiguration.ts +23 -4
  434. package/src/threads/automation.ts +4 -27
  435. package/src/utilities/fileSystem/app.ts +86 -0
  436. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  437. package/src/utilities/fileSystem/filesystem.ts +170 -0
  438. package/src/utilities/fileSystem/index.ts +5 -348
  439. package/src/utilities/fileSystem/plugin.ts +65 -0
  440. package/src/utilities/fileSystem/template.ts +36 -0
  441. package/src/utilities/index.ts +1 -45
  442. package/src/utilities/rowProcessor/index.ts +17 -8
  443. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  444. package/tsconfig.build.json +2 -0
  445. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  446. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  447. package/dist/api/routes/tests/utilities/index.js +0 -131
  448. package/dist/automations/tests/utilities/index.js +0 -81
  449. package/dist/tests/utilities/TestConfiguration.js +0 -562
  450. package/dist/tests/utilities/controllers.js +0 -40
  451. package/dist/tests/utilities/structures.js +0 -168
  452. package/dist/utilities/plugins.js +0 -26
  453. package/src/api/routes/tests/deployment.spec.ts +0 -25
  454. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  455. package/src/utilities/plugins.ts +0 -22
@@ -1,6 +1,7 @@
1
1
  import controller from "../../controllers/public/applications"
2
2
  import Endpoint from "./utils/Endpoint"
3
3
  const { nameValidator, applicationValidator } = require("../utils/validators")
4
+ import { db } from "@budibase/backend-core"
4
5
 
5
6
  const read = [],
6
7
  write = []
@@ -94,6 +95,49 @@ write.push(
94
95
  */
95
96
  write.push(new Endpoint("delete", "/applications/:appId", controller.destroy))
96
97
 
98
+ /**
99
+ * @openapi
100
+ * /applications/{appId}/unpublish:
101
+ * post:
102
+ * operationId: unpublish
103
+ * summary: Unpublish an application
104
+ * tags:
105
+ * - applications
106
+ * parameters:
107
+ * - $ref: '#/components/parameters/appIdUrl'
108
+ * responses:
109
+ * 204:
110
+ * description: The app was published successfully.
111
+ */
112
+ write.push(
113
+ new Endpoint("post", "/applications/:appId/unpublish", controller.unpublish)
114
+ )
115
+
116
+ /**
117
+ * @openapi
118
+ * /applications/{appId}/publish:
119
+ * post:
120
+ * operationId: publish
121
+ * summary: Unpublish an application
122
+ * tags:
123
+ * - applications
124
+ * parameters:
125
+ * - $ref: '#/components/parameters/appIdUrl'
126
+ * responses:
127
+ * 200:
128
+ * description: Returns the deployment object.
129
+ * content:
130
+ * application/json:
131
+ * schema:
132
+ * $ref: '#/components/schemas/deploymentOutput'
133
+ * examples:
134
+ * deployment:
135
+ * $ref: '#/components/examples/deploymentOutput'
136
+ */
137
+ write.push(
138
+ new Endpoint("post", "/applications/:appId/publish", controller.publish)
139
+ )
140
+
97
141
  /**
98
142
  * @openapi
99
143
  * /applications/{appId}:
@@ -54,9 +54,13 @@ function processQueries(ctx: any) {
54
54
  }
55
55
 
56
56
  export default async (ctx: any, next: any) => {
57
+ if (!ctx.body) {
58
+ return await next()
59
+ }
57
60
  let urlParts = ctx.url.split("/")
58
61
  urlParts = urlParts.slice(4, urlParts.length)
59
62
  let body = {}
63
+
60
64
  switch (urlParts[0]) {
61
65
  case Resources.APPLICATION:
62
66
  body = processApplications(ctx)
@@ -11,14 +11,11 @@ jest.mock("../../../utilities/redis", () => ({
11
11
  checkDebounce: jest.fn(),
12
12
  shutdown: jest.fn(),
13
13
  }))
14
-
15
- const {
16
- clearAllApps,
17
- checkBuilderEndpoint,
18
- } = require("./utilities/TestFunctions")
19
- const setup = require("./utilities")
20
- const { AppStatus } = require("../../../db/utils")
21
- const { events } = require("@budibase/backend-core")
14
+ import { clearAllApps, checkBuilderEndpoint } from "./utilities/TestFunctions"
15
+ import * as setup from "./utilities"
16
+ import { AppStatus } from "../../../db/utils"
17
+ import { events } from "@budibase/backend-core"
18
+ import env from "../../../environment"
22
19
 
23
20
  describe("/applications", () => {
24
21
  let request = setup.getRequest()
@@ -162,33 +159,30 @@ describe("/applications", () => {
162
159
  })
163
160
  })
164
161
 
165
- describe("delete", () => {
166
- it("should delete app", async () => {
167
- await config.createApp("to-delete")
162
+ describe("publish", () => {
163
+ it("should publish app with dev app ID", async () => {
168
164
  const appId = config.getAppId()
169
165
  await request
170
- .delete(`/api/applications/${appId}`)
166
+ .post(`/api/applications/${appId}/publish`)
171
167
  .set(config.defaultHeaders())
172
168
  .expect("Content-Type", /json/)
173
169
  .expect(200)
174
- expect(events.app.deleted).toBeCalledTimes(1)
170
+ expect(events.app.published).toBeCalledTimes(1)
175
171
  })
176
172
 
177
- it("should unpublish app", async () => {
178
- await config.createApp("to-unpublish")
173
+ it("should publish app with prod app ID", async () => {
179
174
  const appId = config.getProdAppId()
180
175
  await request
181
- .delete(`/api/applications/${appId}?unpublish=true`)
176
+ .post(`/api/applications/${appId}/publish`)
182
177
  .set(config.defaultHeaders())
183
178
  .expect("Content-Type", /json/)
184
179
  .expect(200)
185
- expect(events.app.unpublished).toBeCalledTimes(1)
180
+ expect(events.app.published).toBeCalledTimes(1)
186
181
  })
187
182
  })
188
183
 
189
184
  describe("manage client library version", () => {
190
185
  it("should be able to update the app client library version", async () => {
191
- console.log(config.getAppId())
192
186
  await request
193
187
  .post(`/api/applications/${config.getAppId()}/client/update`)
194
188
  .set(config.defaultHeaders())
@@ -196,6 +190,7 @@ describe("/applications", () => {
196
190
  .expect(200)
197
191
  expect(events.app.versionUpdated).toBeCalledTimes(1)
198
192
  })
193
+
199
194
  it("should be able to revert the app client library version", async () => {
200
195
  // We need to first update the version so that we can then revert
201
196
  await request
@@ -234,4 +229,85 @@ describe("/applications", () => {
234
229
  expect(getRes.body.application.updatedAt).toBeDefined()
235
230
  })
236
231
  })
232
+
233
+ describe("sync", () => {
234
+ it("app should sync correctly", async () => {
235
+ const res = await request
236
+ .post(`/api/applications/${config.getAppId()}/sync`)
237
+ .set(config.defaultHeaders())
238
+ .expect("Content-Type", /json/)
239
+ .expect(200)
240
+ expect(res.body.message).toEqual("App sync completed successfully.")
241
+ })
242
+
243
+ it("app should not sync if production", async () => {
244
+ const res = await request
245
+ .post(`/api/applications/app_123456/sync`)
246
+ .set(config.defaultHeaders())
247
+ .expect("Content-Type", /json/)
248
+ .expect(400)
249
+ expect(res.body.message).toEqual(
250
+ "This action cannot be performed for production apps"
251
+ )
252
+ })
253
+
254
+ it("app should not sync if sync is disabled", async () => {
255
+ env._set("DISABLE_AUTO_PROD_APP_SYNC", true)
256
+ const res = await request
257
+ .post(`/api/applications/${config.getAppId()}/sync`)
258
+ .set(config.defaultHeaders())
259
+ .expect("Content-Type", /json/)
260
+ .expect(200)
261
+ expect(res.body.message).toEqual(
262
+ "App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable."
263
+ )
264
+ env._set("DISABLE_AUTO_PROD_APP_SYNC", false)
265
+ })
266
+ })
267
+
268
+ describe("unpublish", () => {
269
+ it("should unpublish app with dev app ID", async () => {
270
+ const appId = config.getAppId()
271
+ await request
272
+ .post(`/api/applications/${appId}/unpublish`)
273
+ .set(config.defaultHeaders())
274
+ .expect(204)
275
+ expect(events.app.unpublished).toBeCalledTimes(1)
276
+ })
277
+
278
+ it("should unpublish app with prod app ID", async () => {
279
+ const appId = config.getProdAppId()
280
+ await request
281
+ .post(`/api/applications/${appId}/unpublish`)
282
+ .set(config.defaultHeaders())
283
+ .expect(204)
284
+ expect(events.app.unpublished).toBeCalledTimes(1)
285
+ })
286
+ })
287
+
288
+ describe("delete", () => {
289
+ it("should delete published app and dev apps with dev app ID", async () => {
290
+ await config.createApp("to-delete")
291
+ const appId = config.getAppId()
292
+ await request
293
+ .delete(`/api/applications/${appId}`)
294
+ .set(config.defaultHeaders())
295
+ .expect("Content-Type", /json/)
296
+ .expect(200)
297
+ expect(events.app.deleted).toBeCalledTimes(1)
298
+ expect(events.app.unpublished).toBeCalledTimes(1)
299
+ })
300
+
301
+ it("should delete published app and dev app with prod app ID", async () => {
302
+ await config.createApp("to-delete")
303
+ const appId = config.getProdAppId()
304
+ await request
305
+ .delete(`/api/applications/${appId}`)
306
+ .set(config.defaultHeaders())
307
+ .expect("Content-Type", /json/)
308
+ .expect(200)
309
+ expect(events.app.deleted).toBeCalledTimes(1)
310
+ expect(events.app.unpublished).toBeCalledTimes(1)
311
+ })
312
+ })
237
313
  })
@@ -8,10 +8,10 @@ jest.mock("@budibase/backend-core", () => {
8
8
  }
9
9
  })
10
10
 
11
- const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
12
- const setup = require("./utilities")
13
- const { events } = require("@budibase/backend-core")
14
-
11
+ import * as setup from "./utilities"
12
+ import { events } from "@budibase/backend-core"
13
+ import sdk from "../../../sdk"
14
+ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
15
15
  describe("/backups", () => {
16
16
  let request = setup.getRequest()
17
17
  let config = setup.getConfig()
@@ -30,7 +30,7 @@ describe("/backups", () => {
30
30
  .expect(200)
31
31
  expect(res.text).toBeDefined()
32
32
  expect(res.headers["content-type"]).toEqual("application/gzip")
33
- expect(events.app.exported.mock.calls.length).toBe(1)
33
+ expect(events.app.exported).toBeCalledTimes(1)
34
34
  })
35
35
 
36
36
  it("should apply authorization to endpoint", async () => {
@@ -41,4 +41,15 @@ describe("/backups", () => {
41
41
  })
42
42
  })
43
43
  })
44
- })
44
+
45
+ describe("calculateBackupStats", () => {
46
+ it("should be able to calculate the backup statistics", async () => {
47
+ config.createAutomation()
48
+ config.createScreen()
49
+ let res = await sdk.backups.calculateBackupStats(config.getAppId())
50
+ expect(res.automations).toEqual(1)
51
+ expect(res.datasources).toEqual(1)
52
+ expect(res.screens).toEqual(1)
53
+ })
54
+ })
55
+ })
@@ -0,0 +1,65 @@
1
+ import { db as dbCore } from "@budibase/backend-core"
2
+ import { AppStatus } from "../../../db/utils"
3
+
4
+ import * as setup from "./utilities"
5
+
6
+ describe("/cloud", () => {
7
+ let request = setup.getRequest()
8
+ let config = setup.getConfig()
9
+
10
+ afterAll(setup.afterAll)
11
+
12
+ beforeEach(async () => {
13
+ await config.init()
14
+ })
15
+
16
+ afterEach(async () => {
17
+ // clear all mocks
18
+ jest.clearAllMocks()
19
+ })
20
+
21
+ describe("import", () => {
22
+ it("should be able to import apps", async () => {
23
+ // first we need to delete any existing apps on the system so it looks clean otherwise the
24
+ // import will not run
25
+ await request
26
+ .post(
27
+ `/api/applications/${dbCore.getProdAppID(
28
+ config.getAppId()
29
+ )}/unpublish`
30
+ )
31
+ .set(config.defaultHeaders())
32
+ .expect(204)
33
+ await request
34
+ .delete(`/api/applications/${config.getAppId()}`)
35
+ .set(config.defaultHeaders())
36
+ .expect("Content-Type", /json/)
37
+ .expect(200)
38
+
39
+ // get a count of apps before the import
40
+ const preImportApps = await request
41
+ .get(`/api/applications?status=${AppStatus.ALL}`)
42
+ .set(config.defaultHeaders())
43
+ .expect("Content-Type", /json/)
44
+ .expect(200)
45
+
46
+ // Perform the import
47
+ const res = await request
48
+ .post(`/api/cloud/import`)
49
+ .attach("importFile", "src/api/routes/tests/data/export-test.tar.gz")
50
+ .set(config.defaultHeaders())
51
+ .expect(200)
52
+ expect(res.body.message).toEqual("Apps successfully imported.")
53
+
54
+ // get a count of apps after the import
55
+ const postImportApps = await request
56
+ .get(`/api/applications?status=${AppStatus.ALL}`)
57
+ .set(config.defaultHeaders())
58
+ .expect("Content-Type", /json/)
59
+ .expect(200)
60
+
61
+ // There are two apps in the file that was imported so check for this
62
+ expect(postImportApps.body.length).toEqual(2)
63
+ })
64
+ })
65
+ })
@@ -1,16 +1,16 @@
1
1
  jest.mock("pg")
2
+ import * as setup from "./utilities"
3
+ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
4
+ import { checkCacheForDynamicVariable } from "../../../threads/utils"
5
+ import { events } from "@budibase/backend-core"
2
6
 
3
- let setup = require("./utilities")
4
7
  let { basicDatasource } = setup.structures
5
- let { checkBuilderEndpoint } = require("./utilities/TestFunctions")
6
8
  const pg = require("pg")
7
- const { checkCacheForDynamicVariable } = require("../../../threads/utils")
8
- const { events } = require("@budibase/backend-core")
9
9
 
10
10
  describe("/datasources", () => {
11
11
  let request = setup.getRequest()
12
12
  let config = setup.getConfig()
13
- let datasource
13
+ let datasource: any
14
14
 
15
15
  afterAll(setup.afterAll)
16
16
 
@@ -26,7 +26,7 @@ describe("/datasources", () => {
26
26
  .post(`/api/datasources`)
27
27
  .send(basicDatasource())
28
28
  .set(config.defaultHeaders())
29
- .expect('Content-Type', /json/)
29
+ .expect("Content-Type", /json/)
30
30
  .expect(200)
31
31
 
32
32
  expect(res.body.datasource.name).toEqual("Test")
@@ -42,7 +42,7 @@ describe("/datasources", () => {
42
42
  .put(`/api/datasources/${datasource._id}`)
43
43
  .send(datasource)
44
44
  .set(config.defaultHeaders())
45
- .expect('Content-Type', /json/)
45
+ .expect("Content-Type", /json/)
46
46
  .expect(200)
47
47
 
48
48
  expect(res.body.datasource.name).toEqual("Updated Test")
@@ -51,25 +51,34 @@ describe("/datasources", () => {
51
51
  })
52
52
 
53
53
  describe("dynamic variables", () => {
54
- async function preview(datasource, fields) {
54
+ async function preview(
55
+ datasource: any,
56
+ fields: { path: string; queryString: string }
57
+ ) {
55
58
  return config.previewQuery(request, config, datasource, fields)
56
59
  }
57
60
 
58
61
  it("should invalidate changed or removed variables", async () => {
59
62
  const { datasource, query } = await config.dynamicVariableDatasource()
60
63
  // preview once to cache variables
61
- await preview(datasource, { path: "www.test.com", queryString: "test={{ variable3 }}" })
64
+ await preview(datasource, {
65
+ path: "www.test.com",
66
+ queryString: "test={{ variable3 }}",
67
+ })
62
68
  // check variables in cache
63
- let contents = await checkCacheForDynamicVariable(query._id, "variable3")
69
+ let contents = await checkCacheForDynamicVariable(
70
+ query._id,
71
+ "variable3"
72
+ )
64
73
  expect(contents.rows.length).toEqual(1)
65
-
74
+
66
75
  // update the datasource to remove the variables
67
76
  datasource.config.dynamicVariables = []
68
77
  const res = await request
69
78
  .put(`/api/datasources/${datasource._id}`)
70
79
  .send(datasource)
71
80
  .set(config.defaultHeaders())
72
- .expect('Content-Type', /json/)
81
+ .expect("Content-Type", /json/)
73
82
  .expect(200)
74
83
  expect(res.body.errors).toBeUndefined()
75
84
 
@@ -85,7 +94,7 @@ describe("/datasources", () => {
85
94
  const res = await request
86
95
  .get(`/api/datasources`)
87
96
  .set(config.defaultHeaders())
88
- .expect('Content-Type', /json/)
97
+ .expect("Content-Type", /json/)
89
98
  .expect(200)
90
99
 
91
100
  const datasources = res.body
@@ -160,7 +169,7 @@ describe("/datasources", () => {
160
169
  const res = await request
161
170
  .get(`/api/datasources`)
162
171
  .set(config.defaultHeaders())
163
- .expect('Content-Type', /json/)
172
+ .expect("Content-Type", /json/)
164
173
  .expect(200)
165
174
 
166
175
  expect(res.body.length).toEqual(1)
@@ -174,6 +183,5 @@ describe("/datasources", () => {
174
183
  url: `/api/datasources/${datasource._id}/${datasource._rev}`,
175
184
  })
176
185
  })
177
-
178
186
  })
179
187
  })
@@ -92,7 +92,7 @@ describe("/permission", () => {
92
92
  describe("check public user allowed", () => {
93
93
  it("should be able to read the row", async () => {
94
94
  // replicate changes before checking permissions
95
- await config.deploy()
95
+ await config.publish()
96
96
 
97
97
  const res = await request
98
98
  .get(`/api/${table._id}/rows`)
@@ -0,0 +1,179 @@
1
+ let mockObjectStore = jest.fn().mockImplementation(() => {
2
+ return [{ name: "test.js" }]
3
+ })
4
+
5
+ let deleteFolder = jest.fn().mockImplementation()
6
+ jest.mock("@budibase/backend-core", () => {
7
+ const core = jest.requireActual("@budibase/backend-core")
8
+ return {
9
+ ...core,
10
+ objectStore: {
11
+ ...core.objectStore,
12
+ upload: jest.fn(),
13
+ uploadDirectory: mockObjectStore,
14
+ deleteFolder: deleteFolder,
15
+ },
16
+ }
17
+ })
18
+
19
+ import { events } from "@budibase/backend-core"
20
+ import * as setup from "./utilities"
21
+
22
+ describe("/plugins", () => {
23
+ let request = setup.getRequest()
24
+ let config = setup.getConfig()
25
+
26
+ afterAll(setup.afterAll)
27
+
28
+ beforeEach(async () => {
29
+ await config.init()
30
+ jest.clearAllMocks()
31
+ })
32
+
33
+ const createPlugin = async (status?: number) => {
34
+ return request
35
+ .post(`/api/plugin/upload`)
36
+ .attach("file", "src/api/routes/tests/data/comment-box-1.0.2.tar.gz")
37
+ .set(config.defaultHeaders())
38
+ .expect("Content-Type", /json/)
39
+ .expect(status ? status : 200)
40
+ }
41
+
42
+ const getPlugins = async (status?: number) => {
43
+ return request
44
+ .get(`/api/plugin`)
45
+ .set(config.defaultHeaders())
46
+ .expect("Content-Type", /json/)
47
+ .expect(status ? status : 200)
48
+ }
49
+
50
+ describe("upload", () => {
51
+ it("should be able to upload a plugin", async () => {
52
+ let res = await createPlugin()
53
+ expect(res.body).toBeDefined()
54
+ expect(res.body.plugins).toBeDefined()
55
+ expect(res.body.plugins[0]._id).toEqual("plg_comment-box")
56
+ expect(events.plugin.imported).toHaveBeenCalledTimes(1)
57
+ })
58
+
59
+ it("should not be able to create a plugin if there is an error", async () => {
60
+ mockObjectStore.mockImplementationOnce(() => {
61
+ throw new Error()
62
+ })
63
+ let res = await createPlugin(400)
64
+ expect(res.body.message).toEqual("Failed to import plugin: Error")
65
+ expect(events.plugin.imported).toHaveBeenCalledTimes(0)
66
+ })
67
+ })
68
+
69
+ describe("fetch", () => {
70
+ it("should be able to fetch plugins", async () => {
71
+ await createPlugin()
72
+ const res = await getPlugins()
73
+ expect(res.body).toBeDefined()
74
+ expect(res.body[0]._id).toEqual("plg_comment-box")
75
+ })
76
+ })
77
+
78
+ describe("destroy", () => {
79
+ it("should be able to delete a plugin", async () => {
80
+ await createPlugin()
81
+ const res = await request
82
+ .delete(`/api/plugin/plg_comment-box`)
83
+ .set(config.defaultHeaders())
84
+ .expect("Content-Type", /json/)
85
+ .expect(200)
86
+ expect(res.body).toBeDefined()
87
+ expect(res.body.message).toEqual("Plugin plg_comment-box deleted.")
88
+
89
+ const plugins = await getPlugins()
90
+ expect(plugins.body).toBeDefined()
91
+ expect(plugins.body.length).toEqual(0)
92
+ expect(events.plugin.deleted).toHaveBeenCalledTimes(1)
93
+ })
94
+ it("should handle an error deleting a plugin", async () => {
95
+ deleteFolder.mockImplementationOnce(() => {
96
+ throw new Error()
97
+ })
98
+
99
+ await createPlugin()
100
+ const res = await request
101
+ .delete(`/api/plugin/plg_comment-box`)
102
+ .set(config.defaultHeaders())
103
+ .expect("Content-Type", /json/)
104
+ .expect(400)
105
+
106
+ expect(res.body.message).toEqual("Failed to delete plugin: Error")
107
+ expect(events.plugin.deleted).toHaveBeenCalledTimes(0)
108
+ const plugins = await getPlugins()
109
+ expect(plugins.body).toBeDefined()
110
+ expect(plugins.body.length).toEqual(1)
111
+ })
112
+ })
113
+
114
+ describe("github", () => {
115
+ const createGithubPlugin = async (status?: number, url?: string) => {
116
+ return await request
117
+ .post(`/api/plugin`)
118
+ .send({
119
+ source: "Github",
120
+ url,
121
+ githubToken: "token",
122
+ })
123
+ .set(config.defaultHeaders())
124
+ .expect("Content-Type", /json/)
125
+ .expect(status ? status : 200)
126
+ }
127
+ it("should be able to create a plugin from github", async () => {
128
+ const res = await createGithubPlugin(
129
+ 200,
130
+ "https://github.com/my-repo/budibase-comment-box.git"
131
+ )
132
+ expect(res.body).toBeDefined()
133
+ expect(res.body.plugin).toBeDefined()
134
+ expect(res.body.plugin._id).toEqual("plg_comment-box")
135
+ })
136
+ it("should fail if the url is not from github", async () => {
137
+ const res = await createGithubPlugin(
138
+ 400,
139
+ "https://notgithub.com/my-repo/budibase-comment-box"
140
+ )
141
+ expect(res.body.message).toEqual(
142
+ "Failed to import plugin: The plugin origin must be from Github"
143
+ )
144
+ })
145
+ })
146
+ describe("npm", () => {
147
+ it("should be able to create a plugin from npm", async () => {
148
+ const res = await request
149
+ .post(`/api/plugin`)
150
+ .send({
151
+ source: "NPM",
152
+ url: "https://www.npmjs.com/package/budibase-component",
153
+ })
154
+ .set(config.defaultHeaders())
155
+ .expect("Content-Type", /json/)
156
+ .expect(200)
157
+ expect(res.body).toBeDefined()
158
+ expect(res.body.plugin._id).toEqual("plg_budibase-component")
159
+ expect(events.plugin.imported).toHaveBeenCalled()
160
+ })
161
+ })
162
+
163
+ describe("url", () => {
164
+ it("should be able to create a plugin from a URL", async () => {
165
+ const res = await request
166
+ .post(`/api/plugin`)
167
+ .send({
168
+ source: "URL",
169
+ url: "https://www.someurl.com/comment-box/comment-box-1.0.2.tar.gz",
170
+ })
171
+ .set(config.defaultHeaders())
172
+ .expect("Content-Type", /json/)
173
+ .expect(200)
174
+ expect(res.body).toBeDefined()
175
+ expect(res.body.plugin._id).toEqual("plg_comment-box")
176
+ expect(events.plugin.imported).toHaveBeenCalledTimes(1)
177
+ })
178
+ })
179
+ })
@@ -9,7 +9,6 @@ const route = "/test"
9
9
  // there are checks which are disabled in test env,
10
10
  // these checks need to be enabled for this test
11
11
 
12
-
13
12
  describe("/routing", () => {
14
13
  let request = setup.getRequest()
15
14
  let config = setup.getConfig()
@@ -26,7 +25,7 @@ describe("/routing", () => {
26
25
  screen2.routing.roleId = BUILTIN_ROLE_IDS.POWER
27
26
  screen2.routing.route = route
28
27
  screen2 = await config.createScreen(screen2)
29
- await config.deploy()
28
+ await config.publish()
30
29
  })
31
30
 
32
31
  describe("fetch", () => {
@@ -10,6 +10,7 @@ const {
10
10
  StaticQuotaName,
11
11
  MonthlyQuotaName,
12
12
  } = require("@budibase/types")
13
+ const { structures } = require("@budibase/backend-core/tests");
13
14
 
14
15
  describe("/rows", () => {
15
16
  let request = setup.getRequest()
@@ -494,12 +495,13 @@ describe("/rows", () => {
494
495
  describe("attachments", () => {
495
496
  it("should allow enriching attachment rows", async () => {
496
497
  const table = await config.createAttachmentTable()
498
+ const attachmentId = `${structures.uuid()}.csv`
497
499
  const row = await config.createRow({
498
500
  name: "test",
499
501
  description: "test",
500
502
  attachment: [
501
503
  {
502
- key: `${config.getAppId()}/attachments/test/thing.csv`,
504
+ key: `${config.getAppId()}/attachments/${attachmentId}`,
503
505
  },
504
506
  ],
505
507
  tableId: table._id,
@@ -509,7 +511,7 @@ describe("/rows", () => {
509
511
  context.doInAppContext(config.getAppId(), async () => {
510
512
  const enriched = await outputProcessing(table, [row])
511
513
  expect(enriched[0].attachment[0].url).toBe(
512
- `/prod-budi-app-assets/${config.getAppId()}/attachments/test/thing.csv`
514
+ `/files/signed/prod-budi-app-assets/${config.getProdAppId()}/attachments/${attachmentId}`
513
515
  )
514
516
  })
515
517
  })