@budibase/server 2.3.18-alpha.9 → 2.3.18

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 (477) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/index.4488f38d.css +6 -0
  3. package/builder/assets/{index.956858d3.js → index.527a5fcb.js} +415 -422
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +11774 -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 +595 -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 +21777 -0
  361. package/dist/api/controllers/automation.js +2 -11
  362. package/dist/api/controllers/query/index.js +0 -2
  363. package/dist/api/controllers/row/ExternalRequest.js +2 -4
  364. package/dist/api/controllers/row/external.js +1 -12
  365. package/dist/api/controllers/table/external.js +8 -8
  366. package/dist/api/index.js +21 -1
  367. package/dist/api/routes/automation.js +1 -1
  368. package/dist/api/routes/public/tests/utils.js +33 -0
  369. package/dist/app.js +1 -7
  370. package/dist/constants/index.js +24 -4
  371. package/dist/db/defaultData/datasource_bb_default.js +5 -6
  372. package/dist/db/linkedRows/LinkController.js +8 -9
  373. package/dist/integrations/base/sql.js +3 -10
  374. package/dist/middleware/authorized.js +3 -5
  375. package/dist/middleware/builder.js +3 -6
  376. package/dist/package.json +8 -12
  377. package/dist/sdk/app/backups/exports.js +2 -8
  378. package/dist/sdk/app/datasources/datasources.js +0 -3
  379. package/dist/tsconfig.build.tsbuildinfo +1 -1
  380. package/dist/utilities/redis.js +0 -2
  381. package/jest.config.ts +22 -34
  382. package/package.json +9 -13
  383. package/specs/openapi.json +6 -6
  384. package/specs/openapi.yaml +3 -3
  385. package/specs/resources/query.js +1 -1
  386. package/specs/resources/table.js +1 -1
  387. package/src/api/controllers/automation.ts +2 -13
  388. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  389. package/src/api/controllers/query/index.ts +0 -2
  390. package/src/api/controllers/row/ExternalRequest.ts +2 -6
  391. package/src/api/controllers/row/external.ts +1 -13
  392. package/src/api/controllers/table/external.ts +2 -3
  393. package/src/api/index.ts +22 -3
  394. package/src/api/routes/automation.ts +1 -1
  395. package/src/api/routes/public/applications.ts +1 -0
  396. package/src/api/routes/public/tests/compare.spec.js +1 -1
  397. package/src/api/routes/public/tests/users.spec.js +1 -1
  398. package/src/api/routes/public/tests/utils.ts +8 -25
  399. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  400. package/src/api/routes/tests/analytics.spec.js +1 -4
  401. package/src/api/routes/tests/apikeys.spec.js +1 -1
  402. package/src/api/routes/tests/application.spec.ts +6 -20
  403. package/src/api/routes/tests/auth.spec.js +2 -2
  404. package/src/api/routes/tests/automation.spec.js +2 -6
  405. package/src/api/routes/tests/backup.spec.ts +14 -4
  406. package/src/api/routes/tests/{cloud.seq.spec.ts → cloud.spec.ts} +15 -11
  407. package/src/api/routes/tests/component.spec.js +1 -1
  408. package/src/api/routes/tests/datasource.spec.ts +3 -20
  409. package/src/api/routes/tests/dev.spec.js +1 -1
  410. package/src/api/routes/tests/integration.spec.js +1 -1
  411. package/src/api/routes/tests/layout.spec.js +1 -1
  412. package/src/api/routes/tests/metadata.spec.js +1 -1
  413. package/src/api/routes/tests/misc.spec.js +1 -1
  414. package/src/api/routes/tests/permissions.spec.js +1 -4
  415. package/src/api/routes/tests/{query.seq.spec.js → query.spec.js} +1 -22
  416. package/src/api/routes/tests/role.spec.js +1 -6
  417. package/src/api/routes/tests/routing.spec.js +1 -1
  418. package/src/api/routes/tests/row.spec.js +3 -11
  419. package/src/api/routes/tests/screen.spec.js +1 -1
  420. package/src/api/routes/tests/static.spec.js +13 -2
  421. package/src/api/routes/tests/table.spec.js +1 -1
  422. package/src/api/routes/tests/templates.spec.js +1 -1
  423. package/src/api/routes/tests/user.spec.js +12 -11
  424. package/src/api/routes/tests/utilities/TestFunctions.ts +2 -25
  425. package/src/api/routes/tests/utilities/index.ts +3 -5
  426. package/src/api/routes/tests/view.spec.js +1 -4
  427. package/src/api/routes/tests/webhook.spec.js +2 -11
  428. package/src/app.ts +1 -10
  429. package/src/automations/tests/automation.spec.js +4 -4
  430. package/src/automations/tests/bash.spec.js +1 -1
  431. package/src/automations/tests/discord.spec.js +1 -1
  432. package/src/automations/tests/executeQuery.spec.js +3 -2
  433. package/src/automations/tests/executeScript.spec.js +1 -1
  434. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  435. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  436. package/src/automations/tests/serverLog.spec.js +1 -1
  437. package/src/automations/tests/updateRow.spec.js +1 -1
  438. package/src/automations/tests/zapier.spec.js +1 -1
  439. package/src/constants/index.ts +23 -1
  440. package/src/db/defaultData/datasource_bb_default.ts +10 -6
  441. package/src/db/linkedRows/LinkController.ts +1 -2
  442. package/src/db/tests/linkController.spec.js +1 -4
  443. package/src/db/tests/linkTests.spec.js +1 -1
  444. package/src/integrations/base/sql.ts +5 -15
  445. package/src/integrations/oracle.ts +1 -1
  446. package/src/integrations/tests/couchdb.spec.ts +2 -0
  447. package/src/middleware/authorized.ts +4 -6
  448. package/src/middleware/builder.ts +3 -8
  449. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  450. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  451. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  452. package/src/migrations/tests/index.spec.ts +20 -13
  453. package/src/sdk/app/backups/exports.ts +2 -8
  454. package/src/sdk/app/datasources/datasources.ts +0 -3
  455. package/src/tests/jestEnv.ts +11 -8
  456. package/src/tests/jestSetup.ts +7 -9
  457. package/src/tests/utilities/TestConfiguration.ts +92 -166
  458. package/src/tests/utilities/structures.ts +2 -16
  459. package/src/utilities/redis.ts +0 -2
  460. package/tsconfig.build.json +0 -1
  461. package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
  462. package/builder/assets/index.22724f34.css +0 -6
  463. package/builder/assets/listScreenPreview.599c0aae.png +0 -0
  464. package/dist/ddApm.js +0 -11
  465. package/dist/elasticApm.js +0 -14
  466. package/dist/utilities/retry.js +0 -30
  467. package/jest-testcontainers-config.js +0 -8
  468. package/scripts/load/create-many-apps.js +0 -24
  469. package/scripts/load/create-many-rows.js +0 -30
  470. package/scripts/load/utils.js +0 -66
  471. package/scripts/test.sh +0 -12
  472. package/src/api/routes/tests/environmentVariables.spec.ts +0 -144
  473. package/src/ddApm.ts +0 -7
  474. package/src/elasticApm.ts +0 -10
  475. package/src/integration-test/postgres.spec.ts +0 -762
  476. package/src/tests/logging.ts +0 -34
  477. package/src/utilities/retry.ts +0 -18
@@ -1,762 +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
- let foreignRow: Row
423
- beforeEach(async () => {
424
- let [createdRow] = await populatePrimaryRows(1, {
425
- createForeignRow: true,
426
- })
427
- row = createdRow.row
428
- foreignRow = createdRow.foreignRow!
429
- })
430
-
431
- it("only foreign keys are retrieved", async () => {
432
- const res = await getRow(primaryPostgresTable._id, row.id)
433
-
434
- expect(res.status).toBe(200)
435
-
436
- expect(res.body).toEqual({
437
- ...row,
438
- _id: expect.any(String),
439
- _rev: expect.any(String),
440
- })
441
-
442
- expect(res.body.foreignField).toBeUndefined()
443
-
444
- expect(
445
- res.body[`fk_${auxPostgresTable.name}_foreignField`]
446
- ).toBeDefined()
447
- expect(res.body[`fk_${auxPostgresTable.name}_foreignField`]).toBe(
448
- foreignRow.id
449
- )
450
- })
451
- })
452
- })
453
-
454
- describe("POST /api/:tableId/search", () => {
455
- const search = (tableId: string | undefined, body?: object) =>
456
- makeRequest("post", `/api/${tableId}/search`, body)
457
-
458
- describe("search without parameters", () => {
459
- describe("given than a table has no rows", () => {
460
- it("search without query returns empty", async () => {
461
- const res = await search(primaryPostgresTable._id)
462
-
463
- expect(res.status).toBe(200)
464
-
465
- expect(res.body).toEqual({
466
- rows: [],
467
- bookmark: null,
468
- hasNextPage: false,
469
- })
470
- })
471
- })
472
-
473
- describe("given than a table has multiple rows", () => {
474
- const rowsCount = 6
475
- let rows: {
476
- row: Row
477
- rowData: PrimaryRowData
478
- }[]
479
- beforeEach(async () => {
480
- rows = await populatePrimaryRows(rowsCount)
481
- })
482
-
483
- it("search without query returns all of them", async () => {
484
- const res = await search(primaryPostgresTable._id)
485
-
486
- expect(res.status).toBe(200)
487
-
488
- expect(res.body).toEqual({
489
- rows: expect.arrayContaining(
490
- rows.map(r => expect.objectContaining(r.rowData))
491
- ),
492
- bookmark: null,
493
- hasNextPage: false,
494
- })
495
- expect(res.body.rows).toHaveLength(rowsCount)
496
- })
497
- })
498
-
499
- describe("given than multiple tables have multiple rows", () => {
500
- const rowsCount = 6
501
- beforeEach(async () => {
502
- const createRandomTableWithRows = async () =>
503
- await config.createRow({
504
- tableId: (await createDefaultPgTable())._id,
505
- title: generator.name(),
506
- })
507
-
508
- await createRandomTableWithRows()
509
- await createRandomTableWithRows()
510
-
511
- await populatePrimaryRows(rowsCount)
512
-
513
- await createRandomTableWithRows()
514
- })
515
- it("search only return the requested ones", async () => {
516
- const res = await search(primaryPostgresTable._id)
517
-
518
- expect(res.status).toBe(200)
519
-
520
- expect(res.body.rows).toHaveLength(rowsCount)
521
- })
522
- })
523
- })
524
-
525
- it("Querying by a string field returns the rows with field containing or starting by that value", async () => {
526
- const name = generator.name()
527
- const rowsToFilter = [
528
- ...Array(2).fill({
529
- name,
530
- description: generator.paragraph(),
531
- value: generator.age(),
532
- }),
533
- ...Array(2).fill({
534
- name: `${name}${utils.newid()}`,
535
- description: generator.paragraph(),
536
- value: generator.age(),
537
- }),
538
- ]
539
-
540
- await populatePrimaryRows(3)
541
- for (const row of rowsToFilter) {
542
- await createPrimaryRow({
543
- rowData: row,
544
- })
545
- }
546
- await populatePrimaryRows(1)
547
-
548
- const res = await search(primaryPostgresTable._id, {
549
- query: {
550
- string: {
551
- name,
552
- },
553
- },
554
- })
555
-
556
- expect(res.status).toBe(200)
557
-
558
- expect(res.body).toEqual({
559
- rows: expect.arrayContaining(rowsToFilter.map(expect.objectContaining)),
560
- bookmark: null,
561
- hasNextPage: false,
562
- })
563
- expect(res.body.rows).toHaveLength(4)
564
- })
565
-
566
- it("Querying respects the limit fields", async () => {
567
- await populatePrimaryRows(6)
568
-
569
- const res = await search(primaryPostgresTable._id, {
570
- limit: 2,
571
- })
572
-
573
- expect(res.status).toBe(200)
574
-
575
- expect(res.body.rows).toHaveLength(2)
576
- })
577
-
578
- describe("sort", () => {
579
- beforeEach(async () => {
580
- const defaultValue = generateRandomPrimaryRowData()
581
-
582
- await createPrimaryRow({
583
- rowData: {
584
- ...defaultValue,
585
- name: "d",
586
- value: 3,
587
- },
588
- })
589
- await createPrimaryRow({
590
- rowData: { ...defaultValue, name: "aaa", value: 40 },
591
- })
592
- await createPrimaryRow({
593
- rowData: { ...defaultValue, name: "ccccc", value: -5 },
594
- })
595
- await createPrimaryRow({
596
- rowData: { ...defaultValue, name: "bb", value: 0 },
597
- })
598
- })
599
-
600
- it("Querying respects the sort order when sorting ascending by a string value", async () => {
601
- const res = await search(primaryPostgresTable._id, {
602
- sort: "name",
603
- sortOrder: "ascending",
604
- sortType: "string",
605
- })
606
-
607
- expect(res.status).toBe(200)
608
- expect(res.body.rows).toEqual([
609
- expect.objectContaining({ name: "aaa" }),
610
- expect.objectContaining({ name: "bb" }),
611
- expect.objectContaining({ name: "ccccc" }),
612
- expect.objectContaining({ name: "d" }),
613
- ])
614
- })
615
-
616
- it("Querying respects the sort order when sorting descending by a string value", async () => {
617
- const res = await search(primaryPostgresTable._id, {
618
- sort: "name",
619
- sortOrder: "descending",
620
- sortType: "string",
621
- })
622
-
623
- expect(res.status).toBe(200)
624
- expect(res.body.rows).toEqual([
625
- expect.objectContaining({ name: "d" }),
626
- expect.objectContaining({ name: "ccccc" }),
627
- expect.objectContaining({ name: "bb" }),
628
- expect.objectContaining({ name: "aaa" }),
629
- ])
630
- })
631
-
632
- it("Querying respects the sort order when sorting ascending by a numeric value", async () => {
633
- const res = await search(primaryPostgresTable._id, {
634
- sort: "value",
635
- sortOrder: "ascending",
636
- sortType: "number",
637
- })
638
-
639
- expect(res.status).toBe(200)
640
- expect(res.body.rows).toEqual([
641
- expect.objectContaining({ value: -5 }),
642
- expect.objectContaining({ value: 0 }),
643
- expect.objectContaining({ value: 3 }),
644
- expect.objectContaining({ value: 40 }),
645
- ])
646
- })
647
-
648
- it("Querying respects the sort order when sorting descending by a numeric value", async () => {
649
- const res = await search(primaryPostgresTable._id, {
650
- sort: "value",
651
- sortOrder: "descending",
652
- sortType: "number",
653
- })
654
-
655
- expect(res.status).toBe(200)
656
- expect(res.body.rows).toEqual([
657
- expect.objectContaining({ value: 40 }),
658
- expect.objectContaining({ value: 3 }),
659
- expect.objectContaining({ value: 0 }),
660
- expect.objectContaining({ value: -5 }),
661
- ])
662
- })
663
- })
664
- })
665
-
666
- describe("GET /api/:tableId/:rowId/enrich", () => {
667
- const getAll = (tableId: string | undefined, rowId: string | undefined) =>
668
- makeRequest("get", `/api/${tableId}/${rowId}/enrich`)
669
- describe("given a row with relation data", () => {
670
- let row: Row, foreignRow: Row | undefined
671
-
672
- beforeEach(async () => {
673
- const rowsInfo = await createPrimaryRow({
674
- rowData: generateRandomPrimaryRowData(),
675
- createForeignRow: true,
676
- })
677
-
678
- row = rowsInfo.row
679
- foreignRow = rowsInfo.foreignRow
680
- })
681
-
682
- it("enrich populates the foreign field", async () => {
683
- const res = await getAll(primaryPostgresTable._id, row.id)
684
-
685
- expect(res.status).toBe(200)
686
-
687
- expect(foreignRow).toBeDefined()
688
- expect(res.body).toEqual({
689
- ...row,
690
- linkedField: [
691
- {
692
- ...foreignRow,
693
- },
694
- ],
695
- })
696
- })
697
- })
698
- })
699
-
700
- describe("GET /api/:tableId/rows", () => {
701
- const getAll = (tableId: string | undefined) =>
702
- makeRequest("get", `/api/${tableId}/rows`)
703
-
704
- describe("given a table with no rows", () => {
705
- it("get request returns empty", async () => {
706
- const res = await getAll(primaryPostgresTable._id)
707
-
708
- expect(res.status).toBe(200)
709
-
710
- expect(res.body).toHaveLength(0)
711
- })
712
- })
713
- describe("given a table with multiple rows", () => {
714
- const rowsCount = 6
715
- let rows: {
716
- row: Row
717
- foreignRow: Row | undefined
718
- rowData: PrimaryRowData
719
- }[]
720
- beforeEach(async () => {
721
- rows = await populatePrimaryRows(rowsCount)
722
- })
723
-
724
- it("get request returns all of them", async () => {
725
- const res = await getAll(primaryPostgresTable._id)
726
-
727
- expect(res.status).toBe(200)
728
-
729
- expect(res.body).toHaveLength(rowsCount)
730
- expect(res.body).toEqual(
731
- expect.arrayContaining(
732
- rows.map(r => expect.objectContaining(r.rowData))
733
- )
734
- )
735
- })
736
- })
737
-
738
- describe("given multiple tables with multiple rows", () => {
739
- const rowsCount = 6
740
-
741
- beforeEach(async () => {
742
- const createRandomTableWithRows = async () =>
743
- await config.createRow({
744
- tableId: (await createDefaultPgTable())._id,
745
- title: generator.name(),
746
- })
747
-
748
- await createRandomTableWithRows()
749
- await populatePrimaryRows(rowsCount)
750
- await createRandomTableWithRows()
751
- })
752
-
753
- it("get returns the requested ones", async () => {
754
- const res = await getAll(primaryPostgresTable._id)
755
-
756
- expect(res.status).toBe(200)
757
-
758
- expect(res.body).toHaveLength(rowsCount)
759
- })
760
- })
761
- })
762
- })