@budibase/server 2.3.17-alpha.1 → 2.3.17

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 (463) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/{index.2492f6c7.js → index.06e34d35.js} +364 -364
  3. package/builder/assets/{index.7e76c039.css → index.4488f38d.css} +1 -1
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +11771 -0
  6. package/coverage/coverage-final.json +284 -0
  7. package/coverage/lcov-report/base.css +224 -0
  8. package/coverage/lcov-report/block-navigation.js +87 -0
  9. package/coverage/lcov-report/favicon.png +0 -0
  10. package/coverage/lcov-report/index.html +1031 -0
  11. package/coverage/lcov-report/prettify.css +1 -0
  12. package/coverage/lcov-report/prettify.js +2 -0
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/sorter.js +196 -0
  15. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +190 -0
  16. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +247 -0
  17. package/coverage/lcov-report/src/api/controllers/application.ts.html +1987 -0
  18. package/coverage/lcov-report/src/api/controllers/auth.ts.html +301 -0
  19. package/coverage/lcov-report/src/api/controllers/automation.ts.html +940 -0
  20. package/coverage/lcov-report/src/api/controllers/backup.ts.html +148 -0
  21. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +442 -0
  22. package/coverage/lcov-report/src/api/controllers/component.ts.html +259 -0
  23. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +1135 -0
  24. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +262 -0
  25. package/coverage/lcov-report/src/api/controllers/deploy/index.html +131 -0
  26. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +694 -0
  27. package/coverage/lcov-report/src/api/controllers/dev.ts.html +472 -0
  28. package/coverage/lcov-report/src/api/controllers/index.html +431 -0
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +124 -0
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +226 -0
  31. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +211 -0
  32. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +127 -0
  33. package/coverage/lcov-report/src/api/controllers/permission.ts.html +619 -0
  34. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +130 -0
  35. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +310 -0
  36. package/coverage/lcov-report/src/api/controllers/plugin/index.html +206 -0
  37. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +499 -0
  38. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +253 -0
  39. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +97 -0
  40. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +121 -0
  41. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +136 -0
  42. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +385 -0
  43. package/coverage/lcov-report/src/api/controllers/public/index.html +191 -0
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +181 -0
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +191 -0
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +124 -0
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +202 -0
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +178 -0
  49. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +163 -0
  50. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +181 -0
  51. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +145 -0
  52. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +328 -0
  53. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +253 -0
  54. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +325 -0
  55. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +220 -0
  56. package/coverage/lcov-report/src/api/controllers/query/import/index.html +116 -0
  57. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +373 -0
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +131 -0
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +379 -0
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +157 -0
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +403 -0
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +146 -0
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +586 -0
  64. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +712 -0
  65. package/coverage/lcov-report/src/api/controllers/query/index.html +131 -0
  66. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +1000 -0
  67. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +235 -0
  68. package/coverage/lcov-report/src/api/controllers/role.ts.html +397 -0
  69. package/coverage/lcov-report/src/api/controllers/routing.ts.html +370 -0
  70. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +2305 -0
  71. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +931 -0
  72. package/coverage/lcov-report/src/api/controllers/row/index.html +206 -0
  73. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +541 -0
  74. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +1609 -0
  75. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +1678 -0
  76. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +577 -0
  77. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +556 -0
  78. package/coverage/lcov-report/src/api/controllers/screen.ts.html +463 -0
  79. package/coverage/lcov-report/src/api/controllers/script.ts.html +121 -0
  80. package/coverage/lcov-report/src/api/controllers/static/index.html +116 -0
  81. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +679 -0
  82. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +649 -0
  83. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +1153 -0
  84. package/coverage/lcov-report/src/api/controllers/table/index.html +176 -0
  85. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +514 -0
  86. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +658 -0
  87. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1273 -0
  88. package/coverage/lcov-report/src/api/controllers/templates.ts.html +214 -0
  89. package/coverage/lcov-report/src/api/controllers/user.ts.html +634 -0
  90. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +214 -0
  91. package/coverage/lcov-report/src/api/controllers/view/index.html +161 -0
  92. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +661 -0
  93. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +580 -0
  94. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +694 -0
  95. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +385 -0
  96. package/coverage/lcov-report/src/api/index.html +116 -0
  97. package/coverage/lcov-report/src/api/index.ts.html +352 -0
  98. package/coverage/lcov-report/src/api/routes/analytics.ts.html +112 -0
  99. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +121 -0
  100. package/coverage/lcov-report/src/api/routes/application.ts.html +256 -0
  101. package/coverage/lcov-report/src/api/routes/auth.ts.html +109 -0
  102. package/coverage/lcov-report/src/api/routes/automation.ts.html +346 -0
  103. package/coverage/lcov-report/src/api/routes/backup.ts.html +127 -0
  104. package/coverage/lcov-report/src/api/routes/cloud.ts.html +139 -0
  105. package/coverage/lcov-report/src/api/routes/component.ts.html +127 -0
  106. package/coverage/lcov-report/src/api/routes/datasource.ts.html +265 -0
  107. package/coverage/lcov-report/src/api/routes/deploy.ts.html +145 -0
  108. package/coverage/lcov-report/src/api/routes/dev.ts.html +199 -0
  109. package/coverage/lcov-report/src/api/routes/index.html +551 -0
  110. package/coverage/lcov-report/src/api/routes/index.ts.html +298 -0
  111. package/coverage/lcov-report/src/api/routes/integration.ts.html +133 -0
  112. package/coverage/lcov-report/src/api/routes/layout.ts.html +133 -0
  113. package/coverage/lcov-report/src/api/routes/metadata.ts.html +199 -0
  114. package/coverage/lcov-report/src/api/routes/migrations.ts.html +127 -0
  115. package/coverage/lcov-report/src/api/routes/permission.ts.html +208 -0
  116. package/coverage/lcov-report/src/api/routes/plugin.ts.html +151 -0
  117. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +673 -0
  118. package/coverage/lcov-report/src/api/routes/public/index.html +191 -0
  119. package/coverage/lcov-report/src/api/routes/public/index.ts.html +493 -0
  120. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +116 -0
  121. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +340 -0
  122. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +313 -0
  123. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +598 -0
  124. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +586 -0
  125. package/coverage/lcov-report/src/api/routes/public/tests/index.html +116 -0
  126. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +169 -0
  127. package/coverage/lcov-report/src/api/routes/public/users.ts.html +511 -0
  128. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +238 -0
  129. package/coverage/lcov-report/src/api/routes/public/utils/index.html +116 -0
  130. package/coverage/lcov-report/src/api/routes/query.ts.html +268 -0
  131. package/coverage/lcov-report/src/api/routes/role.ts.html +157 -0
  132. package/coverage/lcov-report/src/api/routes/routing.ts.html +127 -0
  133. package/coverage/lcov-report/src/api/routes/row.ts.html +883 -0
  134. package/coverage/lcov-report/src/api/routes/screen.ts.html +154 -0
  135. package/coverage/lcov-report/src/api/routes/script.ts.html +115 -0
  136. package/coverage/lcov-report/src/api/routes/static.ts.html +280 -0
  137. package/coverage/lcov-report/src/api/routes/table.ts.html +595 -0
  138. package/coverage/lcov-report/src/api/routes/templates.ts.html +133 -0
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +550 -0
  140. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +131 -0
  141. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +367 -0
  142. package/coverage/lcov-report/src/api/routes/user.ts.html +238 -0
  143. package/coverage/lcov-report/src/api/routes/utils/index.html +116 -0
  144. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +805 -0
  145. package/coverage/lcov-report/src/api/routes/view.ts.html +187 -0
  146. package/coverage/lcov-report/src/api/routes/webhook.ts.html +166 -0
  147. package/coverage/lcov-report/src/app.ts.html +424 -0
  148. package/coverage/lcov-report/src/automations/actions.ts.html +316 -0
  149. package/coverage/lcov-report/src/automations/automationUtils.ts.html +562 -0
  150. package/coverage/lcov-report/src/automations/bullboard.ts.html +199 -0
  151. package/coverage/lcov-report/src/automations/index.html +191 -0
  152. package/coverage/lcov-report/src/automations/index.ts.html +163 -0
  153. package/coverage/lcov-report/src/automations/logging/index.html +116 -0
  154. package/coverage/lcov-report/src/automations/logging/index.ts.html +199 -0
  155. package/coverage/lcov-report/src/automations/steps/bash.ts.html +319 -0
  156. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +382 -0
  157. package/coverage/lcov-report/src/automations/steps/delay.ts.html +217 -0
  158. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +349 -0
  159. package/coverage/lcov-report/src/automations/steps/discord.ts.html +397 -0
  160. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +370 -0
  161. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +325 -0
  162. package/coverage/lcov-report/src/automations/steps/filter.ts.html +394 -0
  163. package/coverage/lcov-report/src/automations/steps/index.html +371 -0
  164. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +409 -0
  165. package/coverage/lcov-report/src/automations/steps/loop.ts.html +241 -0
  166. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +499 -0
  167. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +664 -0
  168. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +355 -0
  169. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +256 -0
  170. package/coverage/lcov-report/src/automations/steps/slack.ts.html +340 -0
  171. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +439 -0
  172. package/coverage/lcov-report/src/automations/steps/utils.ts.html +223 -0
  173. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +403 -0
  174. package/coverage/lcov-report/src/automations/tests/utilities/index.html +116 -0
  175. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +265 -0
  176. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +196 -0
  177. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +193 -0
  178. package/coverage/lcov-report/src/automations/triggerInfo/index.html +206 -0
  179. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +130 -0
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +196 -0
  181. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +220 -0
  182. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +220 -0
  183. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +208 -0
  184. package/coverage/lcov-report/src/automations/triggers.ts.html +553 -0
  185. package/coverage/lcov-report/src/automations/utils.ts.html +886 -0
  186. package/coverage/lcov-report/src/constants/index.html +146 -0
  187. package/coverage/lcov-report/src/constants/index.ts.html +697 -0
  188. package/coverage/lcov-report/src/constants/layouts.ts.html +526 -0
  189. package/coverage/lcov-report/src/constants/screens.ts.html +229 -0
  190. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +2059 -0
  191. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +541 -0
  192. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +427 -0
  193. package/coverage/lcov-report/src/db/defaultData/index.html +176 -0
  194. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +403 -0
  195. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +559 -0
  196. package/coverage/lcov-report/src/db/dynamoClient.ts.html +526 -0
  197. package/coverage/lcov-report/src/db/inMemoryView.ts.html +250 -0
  198. package/coverage/lcov-report/src/db/index.html +176 -0
  199. package/coverage/lcov-report/src/db/index.ts.html +133 -0
  200. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +1417 -0
  201. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +265 -0
  202. package/coverage/lcov-report/src/db/linkedRows/index.html +161 -0
  203. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +736 -0
  204. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +460 -0
  205. package/coverage/lcov-report/src/db/newid.ts.html +100 -0
  206. package/coverage/lcov-report/src/db/utils.ts.html +913 -0
  207. package/coverage/lcov-report/src/definitions/automations.ts.html +184 -0
  208. package/coverage/lcov-report/src/definitions/index.html +116 -0
  209. package/coverage/lcov-report/src/environment.ts.html +472 -0
  210. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +259 -0
  211. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +172 -0
  212. package/coverage/lcov-report/src/events/index.html +161 -0
  213. package/coverage/lcov-report/src/events/index.ts.html +100 -0
  214. package/coverage/lcov-report/src/events/utils.ts.html +319 -0
  215. package/coverage/lcov-report/src/index.html +191 -0
  216. package/coverage/lcov-report/src/index.ts.html +133 -0
  217. package/coverage/lcov-report/src/integrations/airtable.ts.html +529 -0
  218. package/coverage/lcov-report/src/integrations/arangodb.ts.html +415 -0
  219. package/coverage/lcov-report/src/integrations/base/index.html +161 -0
  220. package/coverage/lcov-report/src/integrations/base/query.ts.html +139 -0
  221. package/coverage/lcov-report/src/integrations/base/sql.ts.html +2017 -0
  222. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +691 -0
  223. package/coverage/lcov-report/src/integrations/base/utils.ts.html +121 -0
  224. package/coverage/lcov-report/src/integrations/couchdb.ts.html +484 -0
  225. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +745 -0
  226. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +646 -0
  227. package/coverage/lcov-report/src/integrations/firebase.ts.html +646 -0
  228. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1315 -0
  229. package/coverage/lcov-report/src/integrations/index.html +371 -0
  230. package/coverage/lcov-report/src/integrations/index.ts.html +460 -0
  231. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1012 -0
  232. package/coverage/lcov-report/src/integrations/mongodb.ts.html +1999 -0
  233. package/coverage/lcov-report/src/integrations/mysql.ts.html +979 -0
  234. package/coverage/lcov-report/src/integrations/oracle.ts.html +1387 -0
  235. package/coverage/lcov-report/src/integrations/postgres.ts.html +1087 -0
  236. package/coverage/lcov-report/src/integrations/queries/index.html +116 -0
  237. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +328 -0
  238. package/coverage/lcov-report/src/integrations/redis.ts.html +550 -0
  239. package/coverage/lcov-report/src/integrations/rest.ts.html +1372 -0
  240. package/coverage/lcov-report/src/integrations/s3.ts.html +862 -0
  241. package/coverage/lcov-report/src/integrations/snowflake.ts.html +376 -0
  242. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +85 -0
  243. package/coverage/lcov-report/src/integrations/tests/index.html +116 -0
  244. package/coverage/lcov-report/src/integrations/utils.ts.html +1036 -0
  245. package/coverage/lcov-report/src/middleware/appInfo.ts.html +145 -0
  246. package/coverage/lcov-report/src/middleware/authorized.ts.html +472 -0
  247. package/coverage/lcov-report/src/middleware/builder.ts.html +361 -0
  248. package/coverage/lcov-report/src/middleware/currentapp.ts.html +508 -0
  249. package/coverage/lcov-report/src/middleware/index.html +236 -0
  250. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +205 -0
  251. package/coverage/lcov-report/src/middleware/publicApi.ts.html +148 -0
  252. package/coverage/lcov-report/src/middleware/resourceId.ts.html +283 -0
  253. package/coverage/lcov-report/src/middleware/selfhost.ts.html +121 -0
  254. package/coverage/lcov-report/src/middleware/utils.ts.html +112 -0
  255. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +166 -0
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +163 -0
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +151 -0
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +206 -0
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +172 -0
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +226 -0
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +151 -0
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +151 -0
  263. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +166 -0
  264. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +532 -0
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +286 -0
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +146 -0
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +265 -0
  268. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +232 -0
  269. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +724 -0
  270. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +161 -0
  271. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +106 -0
  272. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +235 -0
  273. package/coverage/lcov-report/src/migrations/functions/index.html +161 -0
  274. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +130 -0
  275. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +520 -0
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +161 -0
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +94 -0
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +127 -0
  279. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +115 -0
  280. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +169 -0
  281. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +124 -0
  282. package/coverage/lcov-report/src/migrations/index.html +116 -0
  283. package/coverage/lcov-report/src/migrations/index.ts.html +430 -0
  284. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +205 -0
  285. package/coverage/lcov-report/src/migrations/tests/index.html +131 -0
  286. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +283 -0
  287. package/coverage/lcov-report/src/sdk/app/applications/index.html +146 -0
  288. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +106 -0
  289. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +268 -0
  290. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +136 -0
  291. package/coverage/lcov-report/src/sdk/app/automations/index.html +131 -0
  292. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +100 -0
  293. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +214 -0
  294. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +91 -0
  295. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +604 -0
  296. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +640 -0
  297. package/coverage/lcov-report/src/sdk/app/backups/index.html +176 -0
  298. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +112 -0
  299. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +292 -0
  300. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +562 -0
  301. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  302. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  303. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  304. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +100 -0
  305. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +235 -0
  306. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +265 -0
  307. package/coverage/lcov-report/src/sdk/app/rows/index.html +146 -0
  308. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +106 -0
  309. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +139 -0
  310. package/coverage/lcov-report/src/sdk/app/tables/index.html +116 -0
  311. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +274 -0
  312. package/coverage/lcov-report/src/sdk/index.html +116 -0
  313. package/coverage/lcov-report/src/sdk/index.ts.html +151 -0
  314. package/coverage/lcov-report/src/sdk/users/index.html +131 -0
  315. package/coverage/lcov-report/src/sdk/users/index.ts.html +100 -0
  316. package/coverage/lcov-report/src/sdk/users/utils.ts.html +277 -0
  317. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  318. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  319. package/coverage/lcov-report/src/startup.ts.html +484 -0
  320. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +2032 -0
  321. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +127 -0
  322. package/coverage/lcov-report/src/tests/utilities/index.html +161 -0
  323. package/coverage/lcov-report/src/tests/utilities/index.ts.html +118 -0
  324. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +856 -0
  325. package/coverage/lcov-report/src/threads/automation.ts.html +1555 -0
  326. package/coverage/lcov-report/src/threads/index.html +161 -0
  327. package/coverage/lcov-report/src/threads/index.ts.html +418 -0
  328. package/coverage/lcov-report/src/threads/query.ts.html +1000 -0
  329. package/coverage/lcov-report/src/threads/utils.ts.html +373 -0
  330. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +94 -0
  331. package/coverage/lcov-report/src/utilities/centralPath.ts.html +151 -0
  332. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  333. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +547 -0
  334. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  335. package/coverage/lcov-report/src/utilities/fileSystem/index.html +206 -0
  336. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +100 -0
  337. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  338. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +142 -0
  339. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  340. package/coverage/lcov-report/src/utilities/global.ts.html +499 -0
  341. package/coverage/lcov-report/src/utilities/index.html +251 -0
  342. package/coverage/lcov-report/src/utilities/index.ts.html +487 -0
  343. package/coverage/lcov-report/src/utilities/redis.ts.html +343 -0
  344. package/coverage/lcov-report/src/utilities/routing/index.html +116 -0
  345. package/coverage/lcov-report/src/utilities/routing/index.ts.html +181 -0
  346. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +146 -0
  347. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +922 -0
  348. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +373 -0
  349. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +373 -0
  350. package/coverage/lcov-report/src/utilities/schema.ts.html +508 -0
  351. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +169 -0
  352. package/coverage/lcov-report/src/utilities/security.ts.html +280 -0
  353. package/coverage/lcov-report/src/utilities/usageQuota/index.html +131 -0
  354. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +325 -0
  355. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +139 -0
  356. package/coverage/lcov-report/src/utilities/users.ts.html +232 -0
  357. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +646 -0
  358. package/coverage/lcov-report/src/watch.ts.html +196 -0
  359. package/coverage/lcov-report/src/websocket.ts.html +163 -0
  360. package/coverage/lcov.info +21770 -0
  361. package/dist/api/controllers/query/index.js +0 -2
  362. package/dist/api/controllers/row/ExternalRequest.js +2 -4
  363. package/dist/api/controllers/row/external.js +1 -12
  364. package/dist/api/controllers/table/external.js +8 -8
  365. package/dist/api/routes/public/tests/utils.js +33 -0
  366. package/dist/app.js +1 -7
  367. package/dist/automations/steps/discord.js +29 -11
  368. package/dist/automations/steps/integromat.js +31 -13
  369. package/dist/automations/steps/slack.js +27 -9
  370. package/dist/automations/steps/zapier.js +32 -14
  371. package/dist/constants/index.js +24 -4
  372. package/dist/db/defaultData/datasource_bb_default.js +5 -6
  373. package/dist/db/linkedRows/LinkController.js +8 -9
  374. package/dist/integrations/base/sql.js +3 -10
  375. package/dist/package.json +6 -9
  376. package/dist/sdk/app/backups/exports.js +2 -8
  377. package/dist/sdk/app/datasources/datasources.js +0 -3
  378. package/dist/tsconfig.build.tsbuildinfo +1 -1
  379. package/jest.config.ts +11 -28
  380. package/package.json +7 -10
  381. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  382. package/src/api/controllers/query/index.ts +0 -2
  383. package/src/api/controllers/row/ExternalRequest.ts +2 -6
  384. package/src/api/controllers/row/external.ts +1 -13
  385. package/src/api/controllers/table/external.ts +2 -3
  386. package/src/api/routes/public/applications.ts +1 -0
  387. package/src/api/routes/public/tests/compare.spec.js +1 -1
  388. package/src/api/routes/public/tests/users.spec.js +1 -1
  389. package/src/api/routes/public/tests/utils.ts +8 -25
  390. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  391. package/src/api/routes/tests/analytics.spec.js +1 -4
  392. package/src/api/routes/tests/apikeys.spec.js +1 -1
  393. package/src/api/routes/tests/application.spec.ts +6 -20
  394. package/src/api/routes/tests/auth.spec.js +2 -2
  395. package/src/api/routes/tests/automation.spec.js +2 -6
  396. package/src/api/routes/tests/backup.spec.ts +13 -4
  397. package/src/api/routes/tests/{cloud.seq.spec.ts → cloud.spec.ts} +15 -11
  398. package/src/api/routes/tests/component.spec.js +1 -1
  399. package/src/api/routes/tests/datasource.spec.ts +3 -20
  400. package/src/api/routes/tests/dev.spec.js +1 -1
  401. package/src/api/routes/tests/integration.spec.js +1 -1
  402. package/src/api/routes/tests/layout.spec.js +1 -1
  403. package/src/api/routes/tests/metadata.spec.js +1 -1
  404. package/src/api/routes/tests/misc.spec.js +1 -1
  405. package/src/api/routes/tests/permissions.spec.js +1 -4
  406. package/src/api/routes/tests/{query.seq.spec.js → query.spec.js} +1 -22
  407. package/src/api/routes/tests/role.spec.js +1 -6
  408. package/src/api/routes/tests/routing.spec.js +1 -1
  409. package/src/api/routes/tests/row.spec.js +3 -11
  410. package/src/api/routes/tests/screen.spec.js +1 -1
  411. package/src/api/routes/tests/static.spec.js +1 -2
  412. package/src/api/routes/tests/table.spec.js +1 -1
  413. package/src/api/routes/tests/templates.spec.js +1 -1
  414. package/src/api/routes/tests/user.spec.js +12 -12
  415. package/src/api/routes/tests/utilities/TestFunctions.ts +2 -25
  416. package/src/api/routes/tests/utilities/index.ts +3 -5
  417. package/src/api/routes/tests/view.spec.js +1 -4
  418. package/src/api/routes/tests/webhook.spec.js +2 -11
  419. package/src/app.ts +1 -10
  420. package/src/automations/steps/discord.ts +27 -11
  421. package/src/automations/steps/integromat.ts +29 -13
  422. package/src/automations/steps/slack.ts +25 -9
  423. package/src/automations/steps/zapier.ts +30 -14
  424. package/src/automations/tests/automation.spec.js +4 -4
  425. package/src/automations/tests/bash.spec.js +1 -1
  426. package/src/automations/tests/discord.spec.js +1 -1
  427. package/src/automations/tests/executeQuery.spec.js +3 -2
  428. package/src/automations/tests/executeScript.spec.js +1 -1
  429. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  430. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  431. package/src/automations/tests/serverLog.spec.js +1 -1
  432. package/src/automations/tests/updateRow.spec.js +1 -1
  433. package/src/automations/tests/zapier.spec.js +1 -1
  434. package/src/constants/index.ts +23 -1
  435. package/src/db/defaultData/datasource_bb_default.ts +10 -6
  436. package/src/db/linkedRows/LinkController.ts +1 -2
  437. package/src/db/tests/linkController.spec.js +1 -4
  438. package/src/db/tests/linkTests.spec.js +1 -1
  439. package/src/integrations/base/sql.ts +5 -15
  440. package/src/integrations/oracle.ts +1 -1
  441. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  442. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  443. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  444. package/src/migrations/tests/index.spec.ts +20 -13
  445. package/src/sdk/app/backups/exports.ts +2 -8
  446. package/src/sdk/app/datasources/datasources.ts +0 -3
  447. package/src/tests/jestEnv.ts +6 -2
  448. package/src/tests/jestSetup.ts +7 -8
  449. package/src/tests/utilities/TestConfiguration.ts +50 -126
  450. package/src/tests/utilities/structures.ts +2 -16
  451. package/tsconfig.build.json +0 -1
  452. package/dist/ddApm.js +0 -11
  453. package/dist/elasticApm.js +0 -14
  454. package/dist/utilities/retry.js +0 -30
  455. package/jest-testcontainers-config.js +0 -8
  456. package/scripts/load/create-many-apps.js +0 -24
  457. package/scripts/load/create-many-rows.js +0 -30
  458. package/scripts/load/utils.js +0 -66
  459. package/src/api/routes/tests/environmentVariables.spec.ts +0 -144
  460. package/src/ddApm.ts +0 -7
  461. package/src/elasticApm.ts +0 -10
  462. package/src/integration-test/postgres.spec.ts +0 -752
  463. package/src/utilities/retry.ts +0 -18
@@ -1,752 +0,0 @@
1
- import {
2
- generateMakeRequest,
3
- MakeRequestResponse,
4
- } from "../api/routes/public/tests/utils"
5
-
6
- import * as setup from "../api/routes/tests/utilities"
7
- import {
8
- Datasource,
9
- FieldType,
10
- RelationshipTypes,
11
- Row,
12
- SourceName,
13
- Table,
14
- } from "@budibase/types"
15
- import _ from "lodash"
16
- import { generator } from "@budibase/backend-core/tests"
17
- import { utils } from "@budibase/backend-core"
18
- import { GenericContainer } from "testcontainers"
19
-
20
- const config = setup.getConfig()!
21
-
22
- jest.setTimeout(30000)
23
-
24
- jest.unmock("pg")
25
-
26
- describe("row api - postgres", () => {
27
- let makeRequest: MakeRequestResponse,
28
- postgresDatasource: Datasource,
29
- primaryPostgresTable: Table,
30
- auxPostgresTable: Table
31
-
32
- let host: string
33
- let port: number
34
-
35
- beforeAll(async () => {
36
- const container = await new GenericContainer("postgres")
37
- .withExposedPorts(5432)
38
- .withEnv("POSTGRES_PASSWORD", "password")
39
- .start()
40
-
41
- host = container.getContainerIpAddress()
42
- port = container.getMappedPort(5432)
43
-
44
- await config.init()
45
- const apiKey = await config.generateApiKey()
46
-
47
- makeRequest = generateMakeRequest(apiKey, true)
48
- })
49
-
50
- beforeEach(async () => {
51
- postgresDatasource = await config.createDatasource({
52
- datasource: {
53
- type: "datasource",
54
- source: SourceName.POSTGRES,
55
- plus: true,
56
- config: {
57
- host,
58
- port,
59
- database: "postgres",
60
- user: "postgres",
61
- password: "password",
62
- schema: "public",
63
- ssl: false,
64
- rejectUnauthorized: false,
65
- ca: false,
66
- },
67
- },
68
- })
69
-
70
- auxPostgresTable = await config.createTable({
71
- name: generator.word({ length: 10 }),
72
- type: "external",
73
- primary: ["id"],
74
- schema: {
75
- id: {
76
- name: "id",
77
- type: FieldType.AUTO,
78
- constraints: {
79
- presence: true,
80
- },
81
- },
82
- title: {
83
- name: "title",
84
- type: FieldType.STRING,
85
- constraints: {
86
- presence: true,
87
- },
88
- },
89
- },
90
- sourceId: postgresDatasource._id,
91
- })
92
-
93
- primaryPostgresTable = await config.createTable({
94
- name: generator.word({ length: 10 }),
95
- type: "external",
96
- primary: ["id"],
97
- schema: {
98
- id: {
99
- name: "id",
100
- type: FieldType.AUTO,
101
- constraints: {
102
- presence: true,
103
- },
104
- },
105
- name: {
106
- name: "name",
107
- type: FieldType.STRING,
108
- constraints: {
109
- presence: true,
110
- },
111
- },
112
- description: {
113
- name: "description",
114
- type: FieldType.STRING,
115
- },
116
- value: {
117
- name: "value",
118
- type: FieldType.NUMBER,
119
- },
120
- linkedField: {
121
- type: FieldType.LINK,
122
- constraints: {
123
- type: "array",
124
- presence: false,
125
- },
126
- fieldName: "foreignField",
127
- name: "linkedField",
128
- relationshipType: RelationshipTypes.ONE_TO_MANY,
129
- tableId: auxPostgresTable._id,
130
- },
131
- },
132
- sourceId: postgresDatasource._id,
133
- })
134
- })
135
-
136
- afterAll(async () => {
137
- await config.end()
138
- })
139
-
140
- function generateRandomPrimaryRowData() {
141
- return {
142
- name: generator.name(),
143
- description: generator.paragraph(),
144
- value: generator.age(),
145
- }
146
- }
147
-
148
- type PrimaryRowData = {
149
- name: string
150
- description: string
151
- value: number
152
- }
153
-
154
- async function createPrimaryRow(opts: {
155
- rowData: PrimaryRowData
156
- createForeignRow?: boolean
157
- }) {
158
- let { rowData } = opts
159
- let foreignRow: Row | undefined
160
- if (opts?.createForeignRow) {
161
- foreignRow = await config.createRow({
162
- tableId: auxPostgresTable._id,
163
- title: generator.name(),
164
- })
165
-
166
- rowData = {
167
- ...rowData,
168
- [`fk_${auxPostgresTable.name}_foreignField`]: foreignRow.id,
169
- }
170
- }
171
-
172
- const row = await config.createRow({
173
- tableId: primaryPostgresTable._id,
174
- ...rowData,
175
- })
176
-
177
- return { row, foreignRow }
178
- }
179
-
180
- async function createDefaultPgTable() {
181
- return await config.createTable({
182
- name: generator.word({ length: 10 }),
183
- type: "external",
184
- primary: ["id"],
185
- schema: {
186
- id: {
187
- name: "id",
188
- type: FieldType.AUTO,
189
- constraints: {
190
- presence: true,
191
- },
192
- },
193
- },
194
- sourceId: postgresDatasource._id,
195
- })
196
- }
197
-
198
- async function populatePrimaryRows(
199
- count: number,
200
- opts?: {
201
- createForeignRow?: boolean
202
- }
203
- ) {
204
- return await Promise.all(
205
- Array(count)
206
- .fill({})
207
- .map(async () => {
208
- const rowData = generateRandomPrimaryRowData()
209
- return {
210
- rowData,
211
- ...(await createPrimaryRow({
212
- rowData,
213
- createForeignRow: opts?.createForeignRow,
214
- })),
215
- }
216
- })
217
- )
218
- }
219
-
220
- it("validate table schema", async () => {
221
- const res = await makeRequest(
222
- "get",
223
- `/api/datasources/${postgresDatasource._id}`
224
- )
225
-
226
- expect(res.status).toBe(200)
227
- expect(res.body).toEqual({
228
- config: {
229
- ca: false,
230
- database: "postgres",
231
- host,
232
- password: "--secret-value--",
233
- port,
234
- rejectUnauthorized: false,
235
- schema: "public",
236
- ssl: false,
237
- user: "postgres",
238
- },
239
- plus: true,
240
- source: "POSTGRES",
241
- type: "datasource",
242
- _id: expect.any(String),
243
- _rev: expect.any(String),
244
- createdAt: expect.any(String),
245
- updatedAt: expect.any(String),
246
- entities: expect.any(Object),
247
- })
248
- })
249
-
250
- describe("POST /api/:tableId/rows", () => {
251
- const createRow = (tableId: string | undefined, body: object) =>
252
- makeRequest("post", `/api/${tableId}/rows`, body)
253
-
254
- describe("given than no row exists", () => {
255
- it("adding a new one persists it", async () => {
256
- const newRow = generateRandomPrimaryRowData()
257
-
258
- const res = await createRow(primaryPostgresTable._id, newRow)
259
-
260
- expect(res.status).toBe(200)
261
-
262
- const persistedRows = await config.getRows(primaryPostgresTable._id!)
263
- expect(persistedRows).toHaveLength(1)
264
-
265
- const expected = {
266
- ...res.body,
267
- ...newRow,
268
- }
269
-
270
- expect(persistedRows).toEqual([expect.objectContaining(expected)])
271
- })
272
-
273
- it("multiple rows can be persisted", async () => {
274
- const numberOfRows = 10
275
- const newRows = Array(numberOfRows).fill(generateRandomPrimaryRowData())
276
-
277
- for (const newRow of newRows) {
278
- const res = await createRow(primaryPostgresTable._id, newRow)
279
- expect(res.status).toBe(200)
280
- }
281
-
282
- const persistedRows = await config.getRows(primaryPostgresTable._id!)
283
- expect(persistedRows).toHaveLength(numberOfRows)
284
- expect(persistedRows).toEqual(
285
- expect.arrayContaining(newRows.map(expect.objectContaining))
286
- )
287
- })
288
- })
289
- })
290
-
291
- describe("PATCH /api/:tableId/rows", () => {
292
- const updateRow = (tableId: string | undefined, body: Row) =>
293
- makeRequest("patch", `/api/${tableId}/rows`, body)
294
-
295
- describe("given than a row exists", () => {
296
- let row: Row
297
- beforeEach(async () => {
298
- let rowResponse = _.sample(await populatePrimaryRows(10))!
299
- row = rowResponse.row
300
- })
301
-
302
- it("updating it persists it", async () => {
303
- const newName = generator.name()
304
- const newValue = generator.age()
305
- const updatedRow = {
306
- ...row,
307
- name: newName,
308
- value: newValue,
309
- }
310
-
311
- const res = await updateRow(primaryPostgresTable._id, updatedRow)
312
-
313
- expect(res.status).toBe(200)
314
- expect(res.body).toEqual(updatedRow)
315
-
316
- const persistedRow = await config.getRow(
317
- primaryPostgresTable._id!,
318
- row.id
319
- )
320
-
321
- expect(persistedRow).toEqual(
322
- expect.objectContaining({
323
- id: row.id,
324
- name: newName,
325
- value: newValue,
326
- })
327
- )
328
- })
329
- })
330
- })
331
-
332
- describe("DELETE /api/:tableId/rows", () => {
333
- const deleteRow = (
334
- tableId: string | undefined,
335
- body: Row | { rows: Row[] }
336
- ) => makeRequest("delete", `/api/${tableId}/rows`, body)
337
-
338
- describe("given than multiple row exist", () => {
339
- const numberOfInitialRows = 5
340
- let rows: Row[]
341
- beforeEach(async () => {
342
- rows = (await populatePrimaryRows(numberOfInitialRows)).map(x => x.row)
343
- })
344
-
345
- it("delete request removes it", async () => {
346
- const row = _.sample(rows)!
347
- const res = await deleteRow(primaryPostgresTable._id, row)
348
-
349
- expect(res.status).toBe(200)
350
-
351
- const persistedRows = await config.getRows(primaryPostgresTable._id!)
352
- expect(persistedRows).toHaveLength(numberOfInitialRows - 1)
353
-
354
- expect(row.id).toBeDefined()
355
- expect(persistedRows).not.toContain(
356
- expect.objectContaining({ _id: row.id })
357
- )
358
- })
359
-
360
- it("multiple rows can be removed at once", async () => {
361
- let rowsToDelete = _.sampleSize(rows, 3)!
362
-
363
- const res = await deleteRow(primaryPostgresTable._id, {
364
- rows: rowsToDelete,
365
- })
366
-
367
- expect(res.status).toBe(200)
368
-
369
- const persistedRows = await config.getRows(primaryPostgresTable._id!)
370
- expect(persistedRows).toHaveLength(numberOfInitialRows - 3)
371
-
372
- for (const row of rowsToDelete) {
373
- expect(persistedRows).not.toContain(
374
- expect.objectContaining({ _id: row.id })
375
- )
376
- }
377
- })
378
- })
379
- })
380
-
381
- describe("GET /api/:tableId/rows/:rowId", () => {
382
- const getRow = (tableId: string | undefined, rowId?: string | undefined) =>
383
- makeRequest("get", `/api/${tableId}/rows/${rowId}`)
384
-
385
- describe("given than a table have a single row", () => {
386
- let rowData: PrimaryRowData, row: Row
387
- beforeEach(async () => {
388
- const [createdRow] = await populatePrimaryRows(1)
389
- rowData = createdRow.rowData
390
- row = createdRow.row
391
- })
392
-
393
- it("the row can be retrieved successfully", async () => {
394
- const res = await getRow(primaryPostgresTable._id, row.id)
395
-
396
- expect(res.status).toBe(200)
397
-
398
- expect(res.body).toEqual(expect.objectContaining(rowData))
399
- })
400
- })
401
-
402
- describe("given than a table have a multiple rows", () => {
403
- let rows: { row: Row; rowData: PrimaryRowData }[]
404
-
405
- beforeEach(async () => {
406
- rows = await populatePrimaryRows(10)
407
- })
408
-
409
- it("a single row can be retrieved successfully", async () => {
410
- const { rowData, row } = _.sample(rows)!
411
-
412
- const res = await getRow(primaryPostgresTable._id, row.id)
413
-
414
- expect(res.status).toBe(200)
415
-
416
- expect(res.body).toEqual(expect.objectContaining(rowData))
417
- })
418
- })
419
-
420
- describe("given a row with relation data", () => {
421
- let row: Row
422
- beforeEach(async () => {
423
- let [createdRow] = await populatePrimaryRows(1, {
424
- createForeignRow: true,
425
- })
426
- row = createdRow.row
427
- })
428
-
429
- it("foreign key fields are not retrieved", async () => {
430
- const res = await getRow(primaryPostgresTable._id, row.id)
431
-
432
- expect(res.status).toBe(200)
433
-
434
- expect(res.body).toEqual({
435
- ...row,
436
- _id: expect.any(String),
437
- _rev: expect.any(String),
438
- })
439
- expect(res.body.foreignField).toBeUndefined()
440
- })
441
- })
442
- })
443
-
444
- describe("POST /api/:tableId/search", () => {
445
- const search = (tableId: string | undefined, body?: object) =>
446
- makeRequest("post", `/api/${tableId}/search`, body)
447
-
448
- describe("search without parameters", () => {
449
- describe("given than a table has no rows", () => {
450
- it("search without query returns empty", async () => {
451
- const res = await search(primaryPostgresTable._id)
452
-
453
- expect(res.status).toBe(200)
454
-
455
- expect(res.body).toEqual({
456
- rows: [],
457
- bookmark: null,
458
- hasNextPage: false,
459
- })
460
- })
461
- })
462
-
463
- describe("given than a table has multiple rows", () => {
464
- const rowsCount = 6
465
- let rows: {
466
- row: Row
467
- rowData: PrimaryRowData
468
- }[]
469
- beforeEach(async () => {
470
- rows = await populatePrimaryRows(rowsCount)
471
- })
472
-
473
- it("search without query returns all of them", async () => {
474
- const res = await search(primaryPostgresTable._id)
475
-
476
- expect(res.status).toBe(200)
477
-
478
- expect(res.body).toEqual({
479
- rows: expect.arrayContaining(
480
- rows.map(r => expect.objectContaining(r.rowData))
481
- ),
482
- bookmark: null,
483
- hasNextPage: false,
484
- })
485
- expect(res.body.rows).toHaveLength(rowsCount)
486
- })
487
- })
488
-
489
- describe("given than multiple tables have multiple rows", () => {
490
- const rowsCount = 6
491
- beforeEach(async () => {
492
- const createRandomTableWithRows = async () =>
493
- await config.createRow({
494
- tableId: (await createDefaultPgTable())._id,
495
- title: generator.name(),
496
- })
497
-
498
- await createRandomTableWithRows()
499
- await createRandomTableWithRows()
500
-
501
- await populatePrimaryRows(rowsCount)
502
-
503
- await createRandomTableWithRows()
504
- })
505
- it("search only return the requested ones", async () => {
506
- const res = await search(primaryPostgresTable._id)
507
-
508
- expect(res.status).toBe(200)
509
-
510
- expect(res.body.rows).toHaveLength(rowsCount)
511
- })
512
- })
513
- })
514
-
515
- it("Querying by a string field returns the rows with field containing or starting by that value", async () => {
516
- const name = generator.name()
517
- const rowsToFilter = [
518
- ...Array(2).fill({
519
- name,
520
- description: generator.paragraph(),
521
- value: generator.age(),
522
- }),
523
- ...Array(2).fill({
524
- name: `${name}${utils.newid()}`,
525
- description: generator.paragraph(),
526
- value: generator.age(),
527
- }),
528
- ]
529
-
530
- await populatePrimaryRows(3)
531
- for (const row of rowsToFilter) {
532
- await createPrimaryRow({
533
- rowData: row,
534
- })
535
- }
536
- await populatePrimaryRows(1)
537
-
538
- const res = await search(primaryPostgresTable._id, {
539
- query: {
540
- string: {
541
- name,
542
- },
543
- },
544
- })
545
-
546
- expect(res.status).toBe(200)
547
-
548
- expect(res.body).toEqual({
549
- rows: expect.arrayContaining(rowsToFilter.map(expect.objectContaining)),
550
- bookmark: null,
551
- hasNextPage: false,
552
- })
553
- expect(res.body.rows).toHaveLength(4)
554
- })
555
-
556
- it("Querying respects the limit fields", async () => {
557
- await populatePrimaryRows(6)
558
-
559
- const res = await search(primaryPostgresTable._id, {
560
- limit: 2,
561
- })
562
-
563
- expect(res.status).toBe(200)
564
-
565
- expect(res.body.rows).toHaveLength(2)
566
- })
567
-
568
- describe("sort", () => {
569
- beforeEach(async () => {
570
- const defaultValue = generateRandomPrimaryRowData()
571
-
572
- await createPrimaryRow({
573
- rowData: {
574
- ...defaultValue,
575
- name: "d",
576
- value: 3,
577
- },
578
- })
579
- await createPrimaryRow({
580
- rowData: { ...defaultValue, name: "aaa", value: 40 },
581
- })
582
- await createPrimaryRow({
583
- rowData: { ...defaultValue, name: "ccccc", value: -5 },
584
- })
585
- await createPrimaryRow({
586
- rowData: { ...defaultValue, name: "bb", value: 0 },
587
- })
588
- })
589
-
590
- it("Querying respects the sort order when sorting ascending by a string value", async () => {
591
- const res = await search(primaryPostgresTable._id, {
592
- sort: "name",
593
- sortOrder: "ascending",
594
- sortType: "string",
595
- })
596
-
597
- expect(res.status).toBe(200)
598
- expect(res.body.rows).toEqual([
599
- expect.objectContaining({ name: "aaa" }),
600
- expect.objectContaining({ name: "bb" }),
601
- expect.objectContaining({ name: "ccccc" }),
602
- expect.objectContaining({ name: "d" }),
603
- ])
604
- })
605
-
606
- it("Querying respects the sort order when sorting descending by a string value", async () => {
607
- const res = await search(primaryPostgresTable._id, {
608
- sort: "name",
609
- sortOrder: "descending",
610
- sortType: "string",
611
- })
612
-
613
- expect(res.status).toBe(200)
614
- expect(res.body.rows).toEqual([
615
- expect.objectContaining({ name: "d" }),
616
- expect.objectContaining({ name: "ccccc" }),
617
- expect.objectContaining({ name: "bb" }),
618
- expect.objectContaining({ name: "aaa" }),
619
- ])
620
- })
621
-
622
- it("Querying respects the sort order when sorting ascending by a numeric value", async () => {
623
- const res = await search(primaryPostgresTable._id, {
624
- sort: "value",
625
- sortOrder: "ascending",
626
- sortType: "number",
627
- })
628
-
629
- expect(res.status).toBe(200)
630
- expect(res.body.rows).toEqual([
631
- expect.objectContaining({ value: -5 }),
632
- expect.objectContaining({ value: 0 }),
633
- expect.objectContaining({ value: 3 }),
634
- expect.objectContaining({ value: 40 }),
635
- ])
636
- })
637
-
638
- it("Querying respects the sort order when sorting descending by a numeric value", async () => {
639
- const res = await search(primaryPostgresTable._id, {
640
- sort: "value",
641
- sortOrder: "descending",
642
- sortType: "number",
643
- })
644
-
645
- expect(res.status).toBe(200)
646
- expect(res.body.rows).toEqual([
647
- expect.objectContaining({ value: 40 }),
648
- expect.objectContaining({ value: 3 }),
649
- expect.objectContaining({ value: 0 }),
650
- expect.objectContaining({ value: -5 }),
651
- ])
652
- })
653
- })
654
- })
655
-
656
- describe("GET /api/:tableId/:rowId/enrich", () => {
657
- const getAll = (tableId: string | undefined, rowId: string | undefined) =>
658
- makeRequest("get", `/api/${tableId}/${rowId}/enrich`)
659
- describe("given a row with relation data", () => {
660
- let row: Row, foreignRow: Row | undefined
661
-
662
- beforeEach(async () => {
663
- const rowsInfo = await createPrimaryRow({
664
- rowData: generateRandomPrimaryRowData(),
665
- createForeignRow: true,
666
- })
667
-
668
- row = rowsInfo.row
669
- foreignRow = rowsInfo.foreignRow
670
- })
671
-
672
- it("enrich populates the foreign field", async () => {
673
- const res = await getAll(primaryPostgresTable._id, row.id)
674
-
675
- expect(res.status).toBe(200)
676
-
677
- expect(foreignRow).toBeDefined()
678
- expect(res.body).toEqual({
679
- ...row,
680
- linkedField: [
681
- {
682
- ...foreignRow,
683
- },
684
- ],
685
- })
686
- })
687
- })
688
- })
689
-
690
- describe("GET /api/:tableId/rows", () => {
691
- const getAll = (tableId: string | undefined) =>
692
- makeRequest("get", `/api/${tableId}/rows`)
693
-
694
- describe("given a table with no rows", () => {
695
- it("get request returns empty", async () => {
696
- const res = await getAll(primaryPostgresTable._id)
697
-
698
- expect(res.status).toBe(200)
699
-
700
- expect(res.body).toHaveLength(0)
701
- })
702
- })
703
- describe("given a table with multiple rows", () => {
704
- const rowsCount = 6
705
- let rows: {
706
- row: Row
707
- foreignRow: Row | undefined
708
- rowData: PrimaryRowData
709
- }[]
710
- beforeEach(async () => {
711
- rows = await populatePrimaryRows(rowsCount)
712
- })
713
-
714
- it("get request returns all of them", async () => {
715
- const res = await getAll(primaryPostgresTable._id)
716
-
717
- expect(res.status).toBe(200)
718
-
719
- expect(res.body).toHaveLength(rowsCount)
720
- expect(res.body).toEqual(
721
- expect.arrayContaining(
722
- rows.map(r => expect.objectContaining(r.rowData))
723
- )
724
- )
725
- })
726
- })
727
-
728
- describe("given multiple tables with multiple rows", () => {
729
- const rowsCount = 6
730
-
731
- beforeEach(async () => {
732
- const createRandomTableWithRows = async () =>
733
- await config.createRow({
734
- tableId: (await createDefaultPgTable())._id,
735
- title: generator.name(),
736
- })
737
-
738
- await createRandomTableWithRows()
739
- await populatePrimaryRows(rowsCount)
740
- await createRandomTableWithRows()
741
- })
742
-
743
- it("get returns the requested ones", async () => {
744
- const res = await getAll(primaryPostgresTable._id)
745
-
746
- expect(res.status).toBe(200)
747
-
748
- expect(res.body).toHaveLength(rowsCount)
749
- })
750
- })
751
- })
752
- })