@budibase/server 2.3.15 → 2.3.17-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__mocks__/aws-sdk.ts +1 -1
- package/builder/assets/{index.4488f38d.css → index.7e76c039.css} +1 -1
- package/builder/assets/{index.e88df740.js → index.e8838b62.js} +364 -364
- package/builder/index.html +2 -2
- package/dist/api/controllers/query/index.js +2 -0
- package/dist/api/controllers/row/ExternalRequest.js +4 -2
- package/dist/api/controllers/row/external.js +12 -1
- package/dist/api/controllers/table/external.js +8 -8
- package/dist/api/routes/public/tests/utils.js +29 -2
- package/dist/api/routes/tests/utilities/index.js +131 -0
- package/dist/app.js +7 -1
- package/dist/constants/index.js +4 -24
- package/dist/db/defaultData/datasource_bb_default.js +6 -5
- package/dist/db/linkedRows/LinkController.js +9 -8
- package/dist/ddApm.js +11 -0
- package/dist/elasticApm.js +14 -0
- package/dist/integrations/base/sql.js +10 -3
- package/dist/package.json +9 -6
- package/dist/sdk/app/backups/exports.js +8 -2
- package/dist/sdk/app/datasources/datasources.js +3 -0
- package/dist/tests/utilities/TestConfiguration.js +626 -0
- package/dist/tests/utilities/controllers.js +40 -0
- package/dist/tests/utilities/structures.js +234 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/retry.js +30 -0
- package/jest-testcontainers-config.js +8 -0
- package/jest.config.ts +28 -11
- package/package.json +10 -7
- package/scripts/load/create-many-apps.js +24 -0
- package/scripts/load/create-many-rows.js +30 -0
- package/scripts/load/utils.js +66 -0
- package/src/api/controllers/query/import/tests/index.spec.js +1 -1
- package/src/api/controllers/query/index.ts +2 -0
- package/src/api/controllers/row/ExternalRequest.ts +6 -2
- package/src/api/controllers/row/external.ts +13 -1
- package/src/api/controllers/table/external.ts +3 -2
- package/src/api/routes/public/applications.ts +0 -1
- package/src/api/routes/public/tests/compare.spec.js +1 -1
- package/src/api/routes/public/tests/users.spec.js +1 -1
- package/src/api/routes/public/tests/utils.ts +25 -8
- package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
- package/src/api/routes/tests/analytics.spec.js +4 -1
- package/src/api/routes/tests/apikeys.spec.js +1 -1
- package/src/api/routes/tests/application.spec.ts +20 -6
- package/src/api/routes/tests/auth.spec.js +2 -2
- package/src/api/routes/tests/automation.spec.js +6 -2
- package/src/api/routes/tests/backup.spec.ts +4 -13
- package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
- package/src/api/routes/tests/component.spec.js +1 -1
- package/src/api/routes/tests/datasource.spec.ts +20 -3
- package/src/api/routes/tests/dev.spec.js +1 -1
- package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
- package/src/api/routes/tests/integration.spec.js +1 -1
- package/src/api/routes/tests/layout.spec.js +1 -1
- package/src/api/routes/tests/metadata.spec.js +1 -1
- package/src/api/routes/tests/misc.spec.js +1 -1
- package/src/api/routes/tests/permissions.spec.js +4 -1
- package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
- package/src/api/routes/tests/role.spec.js +6 -1
- package/src/api/routes/tests/routing.spec.js +1 -1
- package/src/api/routes/tests/row.spec.js +11 -3
- package/src/api/routes/tests/screen.spec.js +1 -1
- package/src/api/routes/tests/static.spec.js +2 -1
- package/src/api/routes/tests/table.spec.js +1 -1
- package/src/api/routes/tests/templates.spec.js +1 -1
- package/src/api/routes/tests/user.spec.js +12 -12
- package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
- package/src/api/routes/tests/utilities/index.ts +5 -3
- package/src/api/routes/tests/view.spec.js +4 -1
- package/src/api/routes/tests/webhook.spec.js +11 -2
- package/src/app.ts +10 -1
- package/src/automations/tests/automation.spec.js +4 -4
- package/src/automations/tests/bash.spec.js +1 -1
- package/src/automations/tests/discord.spec.js +1 -1
- package/src/automations/tests/executeQuery.spec.js +2 -3
- package/src/automations/tests/executeScript.spec.js +1 -1
- package/src/automations/tests/outgoingWebhook.spec.js +1 -1
- package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
- package/src/automations/tests/serverLog.spec.js +1 -1
- package/src/automations/tests/updateRow.spec.js +1 -1
- package/src/automations/tests/zapier.spec.js +1 -1
- package/src/constants/index.ts +1 -23
- package/src/db/defaultData/datasource_bb_default.ts +6 -10
- package/src/db/linkedRows/LinkController.ts +2 -1
- package/src/db/tests/linkController.spec.js +4 -1
- package/src/db/tests/linkTests.spec.js +1 -1
- package/src/ddApm.ts +7 -0
- package/src/elasticApm.ts +10 -0
- package/src/integration-test/postgres.spec.ts +752 -0
- package/src/integrations/base/sql.ts +15 -5
- package/src/integrations/oracle.ts +1 -1
- package/src/migrations/functions/tests/appUrls.spec.js +1 -1
- package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
- package/src/migrations/tests/index.spec.ts +13 -20
- package/src/sdk/app/backups/exports.ts +8 -2
- package/src/sdk/app/datasources/datasources.ts +3 -0
- package/src/tests/jestEnv.ts +2 -6
- package/src/tests/jestSetup.ts +8 -7
- package/src/tests/utilities/TestConfiguration.ts +126 -50
- package/src/tests/utilities/structures.ts +16 -2
- package/src/utilities/retry.ts +18 -0
- package/coverage/clover.xml +0 -11755
- package/coverage/coverage-final.json +0 -284
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -1031
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
- package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
- package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
- package/coverage/lcov-report/src/api/controllers/index.html +0 -431
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
- package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
- package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
- package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
- package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
- package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
- package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
- package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -577
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
- package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
- package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
- package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
- package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
- package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
- package/coverage/lcov-report/src/api/index.html +0 -116
- package/coverage/lcov-report/src/api/index.ts.html +0 -352
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
- package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
- package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
- package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
- package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
- package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
- package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
- package/coverage/lcov-report/src/api/routes/index.html +0 -551
- package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
- package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
- package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
- package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
- package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
- package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
- package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
- package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
- package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
- package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
- package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
- package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
- package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
- package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
- package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
- package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
- package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
- package/coverage/lcov-report/src/app.ts.html +0 -424
- package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
- package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
- package/coverage/lcov-report/src/automations/index.html +0 -191
- package/coverage/lcov-report/src/automations/index.ts.html +0 -163
- package/coverage/lcov-report/src/automations/logging/index.html +0 -116
- package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -349
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
- package/coverage/lcov-report/src/automations/steps/index.html +0 -371
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -361
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -292
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -355
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
- package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
- package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
- package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
- package/coverage/lcov-report/src/constants/index.html +0 -146
- package/coverage/lcov-report/src/constants/index.ts.html +0 -697
- package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
- package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
- package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
- package/coverage/lcov-report/src/db/index.html +0 -176
- package/coverage/lcov-report/src/db/index.ts.html +0 -133
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
- package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
- package/coverage/lcov-report/src/db/newid.ts.html +0 -100
- package/coverage/lcov-report/src/db/utils.ts.html +0 -913
- package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
- package/coverage/lcov-report/src/definitions/index.html +0 -116
- package/coverage/lcov-report/src/environment.ts.html +0 -472
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
- package/coverage/lcov-report/src/events/index.html +0 -161
- package/coverage/lcov-report/src/events/index.ts.html +0 -100
- package/coverage/lcov-report/src/events/utils.ts.html +0 -319
- package/coverage/lcov-report/src/index.html +0 -191
- package/coverage/lcov-report/src/index.ts.html +0 -133
- package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
- package/coverage/lcov-report/src/integrations/base/index.html +0 -161
- package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
- package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
- package/coverage/lcov-report/src/integrations/index.html +0 -371
- package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
- package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
- package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
- package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
- package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
- package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
- package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
- package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
- package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
- package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
- package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
- package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
- package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
- package/coverage/lcov-report/src/middleware/index.html +0 -236
- package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
- package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
- package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
- package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
- package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
- package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
- package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
- package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
- package/coverage/lcov-report/src/migrations/index.html +0 -116
- package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
- package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
- package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
- package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
- package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
- package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
- package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
- package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
- package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
- package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
- package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
- package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
- package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
- package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
- package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
- package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
- package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
- package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
- package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
- package/coverage/lcov-report/src/sdk/index.html +0 -116
- package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
- package/coverage/lcov-report/src/sdk/users/index.html +0 -131
- package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
- package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
- package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
- package/coverage/lcov-report/src/startup.ts.html +0 -484
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
- package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
- package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
- package/coverage/lcov-report/src/threads/index.html +0 -161
- package/coverage/lcov-report/src/threads/index.ts.html +0 -418
- package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
- package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
- package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
- package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
- package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
- package/coverage/lcov-report/src/utilities/index.html +0 -251
- package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
- package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
- package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
- package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
- package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
- package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
- package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
- package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
- package/coverage/lcov-report/src/watch.ts.html +0 -196
- package/coverage/lcov-report/src/websocket.ts.html +0 -163
- package/coverage/lcov.info +0 -21750
|
@@ -90,10 +90,15 @@ function parseFilters(filters: SearchFilters | undefined): SearchFilters {
|
|
|
90
90
|
function generateSelectStatement(
|
|
91
91
|
json: QueryJson,
|
|
92
92
|
knex: Knex
|
|
93
|
-
): (string | Knex.Raw)[] {
|
|
93
|
+
): (string | Knex.Raw)[] | "*" {
|
|
94
94
|
const { resource, meta } = json
|
|
95
|
+
|
|
96
|
+
if (!resource) {
|
|
97
|
+
return "*"
|
|
98
|
+
}
|
|
99
|
+
|
|
95
100
|
const schema = meta?.table?.schema
|
|
96
|
-
return resource
|
|
101
|
+
return resource.fields.map(field => {
|
|
97
102
|
const fieldNames = field.split(/\./g)
|
|
98
103
|
const tableName = fieldNames[0]
|
|
99
104
|
const columnName = fieldNames[1]
|
|
@@ -405,11 +410,14 @@ class InternalBuilder {
|
|
|
405
410
|
delete parsedBody[key]
|
|
406
411
|
}
|
|
407
412
|
}
|
|
413
|
+
|
|
408
414
|
// mysql can't use returning
|
|
409
415
|
if (opts.disableReturning) {
|
|
410
416
|
return query.insert(parsedBody)
|
|
411
417
|
} else {
|
|
412
|
-
return query
|
|
418
|
+
return query
|
|
419
|
+
.insert(parsedBody)
|
|
420
|
+
.returning(generateSelectStatement(json, knex))
|
|
413
421
|
}
|
|
414
422
|
}
|
|
415
423
|
|
|
@@ -494,7 +502,9 @@ class InternalBuilder {
|
|
|
494
502
|
if (opts.disableReturning) {
|
|
495
503
|
return query.update(parsedBody)
|
|
496
504
|
} else {
|
|
497
|
-
return query
|
|
505
|
+
return query
|
|
506
|
+
.update(parsedBody)
|
|
507
|
+
.returning(generateSelectStatement(json, knex))
|
|
498
508
|
}
|
|
499
509
|
}
|
|
500
510
|
|
|
@@ -509,7 +519,7 @@ class InternalBuilder {
|
|
|
509
519
|
if (opts.disableReturning) {
|
|
510
520
|
return query.delete()
|
|
511
521
|
} else {
|
|
512
|
-
return query.delete().returning(
|
|
522
|
+
return query.delete().returning(generateSelectStatement(json, knex))
|
|
513
523
|
}
|
|
514
524
|
}
|
|
515
525
|
}
|
|
@@ -247,7 +247,7 @@ class OracleIntegration extends Sql implements DatasourcePlus {
|
|
|
247
247
|
)
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
private internalConvertType(column: OracleColumn): { type:
|
|
250
|
+
private internalConvertType(column: OracleColumn): { type: FieldTypes } {
|
|
251
251
|
if (this.isBooleanType(column)) {
|
|
252
252
|
return { type: FieldTypes.BOOLEAN }
|
|
253
253
|
}
|
|
@@ -10,8 +10,9 @@ import * as structures from "../../tests/utilities/structures"
|
|
|
10
10
|
import { MIGRATIONS } from "../"
|
|
11
11
|
import * as helpers from "./helpers"
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
const timestamp =
|
|
13
|
+
import tk from "timekeeper"
|
|
14
|
+
const timestamp = new Date().toISOString()
|
|
15
|
+
tk.freeze(timestamp)
|
|
15
16
|
|
|
16
17
|
const clearMigrations = async () => {
|
|
17
18
|
const dbs = [context.getDevAppDB(), context.getProdAppDB()]
|
|
@@ -92,24 +93,16 @@ describe("migrations", () => {
|
|
|
92
93
|
await clearMigrations()
|
|
93
94
|
const appId = config.prodAppId
|
|
94
95
|
const roles = { [appId]: "role_12345" }
|
|
95
|
-
await config.createUser(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
undefined,
|
|
106
|
-
undefined,
|
|
107
|
-
undefined,
|
|
108
|
-
undefined,
|
|
109
|
-
false,
|
|
110
|
-
false,
|
|
111
|
-
roles
|
|
112
|
-
) // non admin non builder
|
|
96
|
+
await config.createUser({
|
|
97
|
+
builder: false,
|
|
98
|
+
admin: true,
|
|
99
|
+
roles,
|
|
100
|
+
}) // admin only
|
|
101
|
+
await config.createUser({
|
|
102
|
+
builder: false,
|
|
103
|
+
admin: false,
|
|
104
|
+
roles,
|
|
105
|
+
}) // non admin non builder
|
|
113
106
|
await config.createTable()
|
|
114
107
|
await config.createRow()
|
|
115
108
|
await config.createRow()
|
|
@@ -45,12 +45,18 @@ function tarFilesToTmp(tmpDir: string, files: string[]) {
|
|
|
45
45
|
* @return {*} either a readable stream or a string
|
|
46
46
|
*/
|
|
47
47
|
export async function exportDB(dbName: string, opts: ExportOpts = {}) {
|
|
48
|
+
const exportOpts = {
|
|
49
|
+
filter: opts?.filter,
|
|
50
|
+
batch_size: 1000,
|
|
51
|
+
batch_limit: 5,
|
|
52
|
+
style: "main_only",
|
|
53
|
+
}
|
|
48
54
|
return dbCore.doWithDB(dbName, async (db: any) => {
|
|
49
55
|
// Write the dump to file if required
|
|
50
56
|
if (opts?.exportPath) {
|
|
51
57
|
const path = opts?.exportPath
|
|
52
58
|
const writeStream = fs.createWriteStream(path)
|
|
53
|
-
await db.dump(writeStream,
|
|
59
|
+
await db.dump(writeStream, exportOpts)
|
|
54
60
|
return path
|
|
55
61
|
} else {
|
|
56
62
|
// Stringify the dump in memory if required
|
|
@@ -59,7 +65,7 @@ export async function exportDB(dbName: string, opts: ExportOpts = {}) {
|
|
|
59
65
|
memStream.on("data", (chunk: any) => {
|
|
60
66
|
appString += chunk.toString()
|
|
61
67
|
})
|
|
62
|
-
await db.dump(memStream,
|
|
68
|
+
await db.dump(memStream, exportOpts)
|
|
63
69
|
return appString
|
|
64
70
|
}
|
|
65
71
|
})
|
|
@@ -88,6 +88,9 @@ export async function removeSecrets(datasources: Datasource[]) {
|
|
|
88
88
|
const definitions = await getDefinitions()
|
|
89
89
|
for (let datasource of datasources) {
|
|
90
90
|
const schema = definitions[datasource.source]
|
|
91
|
+
if (!schema) {
|
|
92
|
+
continue
|
|
93
|
+
}
|
|
91
94
|
if (datasource.config) {
|
|
92
95
|
// strip secrets from response, so they don't show in the network request
|
|
93
96
|
if (datasource.config.auth) {
|
package/src/tests/jestEnv.ts
CHANGED
|
@@ -3,11 +3,7 @@ import { tmpdir } from "os"
|
|
|
3
3
|
|
|
4
4
|
env._set("SELF_HOSTED", "1")
|
|
5
5
|
env._set("NODE_ENV", "jest")
|
|
6
|
-
env._set("
|
|
7
|
-
|
|
6
|
+
env._set("MULTI_TENANCY", "1")
|
|
7
|
+
// @ts-ignore
|
|
8
8
|
env._set("BUDIBASE_DIR", tmpdir("budibase-unittests"))
|
|
9
9
|
env._set("LOG_LEVEL", "silent")
|
|
10
|
-
env._set("PORT", 0)
|
|
11
|
-
env._set("MINIO_URL", "http://localhost")
|
|
12
|
-
env._set("MINIO_ACCESS_KEY", "test")
|
|
13
|
-
env._set("MINIO_SECRET_KEY", "test")
|
package/src/tests/jestSetup.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// use tk.reset() to use real dates in individual tests
|
|
5
|
-
const tk = require("timekeeper")
|
|
6
|
-
tk.freeze(mocks.date.MOCK_DATE)
|
|
1
|
+
import env from "../environment"
|
|
2
|
+
import { env as coreEnv } from "@budibase/backend-core"
|
|
3
|
+
import { testContainerUtils } from "@budibase/backend-core/tests"
|
|
7
4
|
|
|
8
5
|
if (!process.env.DEBUG) {
|
|
9
6
|
global.console.log = jest.fn() // console.log are ignored in tests
|
|
@@ -13,5 +10,9 @@ if (!process.env.DEBUG) {
|
|
|
13
10
|
if (!process.env.CI) {
|
|
14
11
|
// set a longer timeout in dev for debugging
|
|
15
12
|
// 100 seconds
|
|
16
|
-
jest.setTimeout(
|
|
13
|
+
jest.setTimeout(100 * 1000)
|
|
14
|
+
} else {
|
|
15
|
+
jest.setTimeout(10 * 1000)
|
|
17
16
|
}
|
|
17
|
+
|
|
18
|
+
testContainerUtils.setupEnv(env, coreEnv)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mocks } from "@budibase/backend-core/tests"
|
|
1
|
+
import { generator, mocks, structures } from "@budibase/backend-core/tests"
|
|
2
2
|
|
|
3
3
|
// init the licensing mock
|
|
4
4
|
import * as pro from "@budibase/pro"
|
|
@@ -10,6 +10,7 @@ mocks.licenses.useUnlimited()
|
|
|
10
10
|
import { init as dbInit } from "../../db"
|
|
11
11
|
dbInit()
|
|
12
12
|
import env from "../../environment"
|
|
13
|
+
import { env as coreEnv } from "@budibase/backend-core"
|
|
13
14
|
import {
|
|
14
15
|
basicTable,
|
|
15
16
|
basicRow,
|
|
@@ -38,17 +39,27 @@ import { cleanup } from "../../utilities/fileSystem"
|
|
|
38
39
|
import newid from "../../db/newid"
|
|
39
40
|
import { generateUserMetadataID } from "../../db/utils"
|
|
40
41
|
import { startup } from "../../startup"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
import supertest from "supertest"
|
|
43
|
+
import {
|
|
44
|
+
AuthToken,
|
|
45
|
+
Database,
|
|
46
|
+
Datasource,
|
|
47
|
+
Row,
|
|
48
|
+
SourceName,
|
|
49
|
+
Table,
|
|
50
|
+
} from "@budibase/types"
|
|
51
|
+
|
|
52
|
+
type DefaultUserValues = {
|
|
53
|
+
globalUserId: string
|
|
54
|
+
email: string
|
|
55
|
+
firstName: string
|
|
56
|
+
lastName: string
|
|
57
|
+
csrfToken: string
|
|
58
|
+
}
|
|
48
59
|
|
|
49
60
|
class TestConfiguration {
|
|
50
61
|
server: any
|
|
51
|
-
request:
|
|
62
|
+
request: supertest.SuperTest<supertest.Test> | undefined
|
|
52
63
|
started: boolean
|
|
53
64
|
appId: string | null
|
|
54
65
|
allApps: any[]
|
|
@@ -62,6 +73,8 @@ class TestConfiguration {
|
|
|
62
73
|
linkedTable: any
|
|
63
74
|
automation: any
|
|
64
75
|
datasource: any
|
|
76
|
+
tenantId: string | null
|
|
77
|
+
defaultUserValues: DefaultUserValues
|
|
65
78
|
|
|
66
79
|
constructor(openServer = true) {
|
|
67
80
|
if (openServer) {
|
|
@@ -76,6 +89,18 @@ class TestConfiguration {
|
|
|
76
89
|
}
|
|
77
90
|
this.appId = null
|
|
78
91
|
this.allApps = []
|
|
92
|
+
this.tenantId = null
|
|
93
|
+
this.defaultUserValues = this.populateDefaultUserValues()
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
populateDefaultUserValues(): DefaultUserValues {
|
|
97
|
+
return {
|
|
98
|
+
globalUserId: `us_${newid()}`,
|
|
99
|
+
email: generator.email(),
|
|
100
|
+
firstName: generator.first(),
|
|
101
|
+
lastName: generator.last(),
|
|
102
|
+
csrfToken: generator.hash(),
|
|
103
|
+
}
|
|
79
104
|
}
|
|
80
105
|
|
|
81
106
|
getRequest() {
|
|
@@ -100,10 +125,10 @@ class TestConfiguration {
|
|
|
100
125
|
|
|
101
126
|
getUserDetails() {
|
|
102
127
|
return {
|
|
103
|
-
globalId:
|
|
104
|
-
email:
|
|
105
|
-
firstName:
|
|
106
|
-
lastName:
|
|
128
|
+
globalId: this.defaultUserValues.globalUserId,
|
|
129
|
+
email: this.defaultUserValues.email,
|
|
130
|
+
firstName: this.defaultUserValues.firstName,
|
|
131
|
+
lastName: this.defaultUserValues.lastName,
|
|
107
132
|
}
|
|
108
133
|
}
|
|
109
134
|
|
|
@@ -111,7 +136,9 @@ class TestConfiguration {
|
|
|
111
136
|
if (!appId) {
|
|
112
137
|
appId = this.appId
|
|
113
138
|
}
|
|
114
|
-
|
|
139
|
+
|
|
140
|
+
const tenant = this.getTenantId()
|
|
141
|
+
return tenancy.doInTenant(tenant, () => {
|
|
115
142
|
// check if already in a context
|
|
116
143
|
if (context.getAppId() == null && appId !== null) {
|
|
117
144
|
return context.doInAppContext(appId, async () => {
|
|
@@ -127,6 +154,11 @@ class TestConfiguration {
|
|
|
127
154
|
|
|
128
155
|
// use a new id as the name to avoid name collisions
|
|
129
156
|
async init(appName = newid()) {
|
|
157
|
+
this.defaultUserValues = this.populateDefaultUserValues()
|
|
158
|
+
if (context.isMultiTenant()) {
|
|
159
|
+
this.tenantId = structures.tenant.id()
|
|
160
|
+
}
|
|
161
|
+
|
|
130
162
|
if (!this.started) {
|
|
131
163
|
await startup()
|
|
132
164
|
}
|
|
@@ -149,9 +181,30 @@ class TestConfiguration {
|
|
|
149
181
|
}
|
|
150
182
|
}
|
|
151
183
|
|
|
184
|
+
// MODES
|
|
185
|
+
#setMultiTenancy = (value: boolean) => {
|
|
186
|
+
env._set("MULTI_TENANCY", value)
|
|
187
|
+
coreEnv._set("MULTI_TENANCY", value)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
#setSelfHosted = (value: boolean) => {
|
|
191
|
+
env._set("SELF_HOSTED", value)
|
|
192
|
+
coreEnv._set("SELF_HOSTED", value)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
modeCloud = () => {
|
|
196
|
+
this.#setSelfHosted(false)
|
|
197
|
+
this.#setMultiTenancy(true)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
modeSelf = () => {
|
|
201
|
+
this.#setSelfHosted(true)
|
|
202
|
+
this.#setMultiTenancy(false)
|
|
203
|
+
}
|
|
204
|
+
|
|
152
205
|
// UTILS
|
|
153
206
|
|
|
154
|
-
|
|
207
|
+
_req(body: any, params: any, controlFunc: any) {
|
|
155
208
|
// create a fake request ctx
|
|
156
209
|
const request: any = {}
|
|
157
210
|
const appId = this.appId
|
|
@@ -159,7 +212,7 @@ class TestConfiguration {
|
|
|
159
212
|
// fake cookies, we don't need them
|
|
160
213
|
request.cookies = { set: () => {}, get: () => {} }
|
|
161
214
|
request.config = { jwtSecret: env.JWT_SECRET }
|
|
162
|
-
request.user = { appId, tenantId:
|
|
215
|
+
request.user = { appId, tenantId: this.getTenantId() }
|
|
163
216
|
request.query = {}
|
|
164
217
|
request.request = {
|
|
165
218
|
body,
|
|
@@ -175,15 +228,15 @@ class TestConfiguration {
|
|
|
175
228
|
|
|
176
229
|
// USER / AUTH
|
|
177
230
|
async globalUser({
|
|
178
|
-
id =
|
|
179
|
-
firstName =
|
|
180
|
-
lastName =
|
|
231
|
+
id = this.defaultUserValues.globalUserId,
|
|
232
|
+
firstName = this.defaultUserValues.firstName,
|
|
233
|
+
lastName = this.defaultUserValues.lastName,
|
|
181
234
|
builder = true,
|
|
182
235
|
admin = false,
|
|
183
|
-
email =
|
|
236
|
+
email = this.defaultUserValues.email,
|
|
184
237
|
roles,
|
|
185
238
|
}: any = {}) {
|
|
186
|
-
return tenancy.doWithGlobalDB(
|
|
239
|
+
return tenancy.doWithGlobalDB(this.getTenantId(), async (db: Database) => {
|
|
187
240
|
let existing
|
|
188
241
|
try {
|
|
189
242
|
existing = await db.get(id)
|
|
@@ -194,14 +247,14 @@ class TestConfiguration {
|
|
|
194
247
|
_id: id,
|
|
195
248
|
...existing,
|
|
196
249
|
roles: roles || {},
|
|
197
|
-
tenantId:
|
|
250
|
+
tenantId: this.getTenantId(),
|
|
198
251
|
firstName,
|
|
199
252
|
lastName,
|
|
200
253
|
}
|
|
201
254
|
await sessions.createASession(id, {
|
|
202
255
|
sessionId: "sessionid",
|
|
203
|
-
tenantId:
|
|
204
|
-
csrfToken:
|
|
256
|
+
tenantId: this.getTenantId(),
|
|
257
|
+
csrfToken: this.defaultUserValues.csrfToken,
|
|
205
258
|
})
|
|
206
259
|
if (builder) {
|
|
207
260
|
user.builder = { global: true }
|
|
@@ -215,21 +268,31 @@ class TestConfiguration {
|
|
|
215
268
|
}
|
|
216
269
|
const resp = await db.put(user)
|
|
217
270
|
return {
|
|
218
|
-
_rev: resp.
|
|
271
|
+
_rev: resp.rev,
|
|
219
272
|
...user,
|
|
220
273
|
}
|
|
221
274
|
})
|
|
222
275
|
}
|
|
223
276
|
|
|
224
277
|
async createUser(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
278
|
+
user: {
|
|
279
|
+
id?: string
|
|
280
|
+
firstName?: string
|
|
281
|
+
lastName?: string
|
|
282
|
+
email?: string
|
|
283
|
+
builder?: boolean
|
|
284
|
+
admin?: boolean
|
|
285
|
+
roles?: any
|
|
286
|
+
} = {}
|
|
232
287
|
) {
|
|
288
|
+
let { id, firstName, lastName, email, builder, admin, roles } = user
|
|
289
|
+
firstName = firstName || this.defaultUserValues.firstName
|
|
290
|
+
lastName = lastName || this.defaultUserValues.lastName
|
|
291
|
+
email = email || this.defaultUserValues.email
|
|
292
|
+
roles = roles || {}
|
|
293
|
+
if (builder == null) {
|
|
294
|
+
builder = true
|
|
295
|
+
}
|
|
233
296
|
const globalId = !id ? `us_${Math.random()}` : `us_${id}`
|
|
234
297
|
const resp = await this.globalUser({
|
|
235
298
|
id: globalId,
|
|
@@ -264,13 +327,13 @@ class TestConfiguration {
|
|
|
264
327
|
}
|
|
265
328
|
await sessions.createASession(userId, {
|
|
266
329
|
sessionId: "sessionid",
|
|
267
|
-
tenantId:
|
|
330
|
+
tenantId: this.getTenantId(),
|
|
268
331
|
})
|
|
269
332
|
// have to fake this
|
|
270
333
|
const authObj = {
|
|
271
334
|
userId,
|
|
272
335
|
sessionId: "sessionid",
|
|
273
|
-
tenantId:
|
|
336
|
+
tenantId: this.getTenantId(),
|
|
274
337
|
}
|
|
275
338
|
const app = {
|
|
276
339
|
roleId: roleId,
|
|
@@ -293,10 +356,11 @@ class TestConfiguration {
|
|
|
293
356
|
}
|
|
294
357
|
|
|
295
358
|
defaultHeaders(extras = {}) {
|
|
296
|
-
const
|
|
297
|
-
|
|
359
|
+
const tenantId = this.getTenantId()
|
|
360
|
+
const authObj: AuthToken = {
|
|
361
|
+
userId: this.defaultUserValues.globalUserId,
|
|
298
362
|
sessionId: "sessionid",
|
|
299
|
-
tenantId
|
|
363
|
+
tenantId,
|
|
300
364
|
}
|
|
301
365
|
const app = {
|
|
302
366
|
roleId: roles.BUILTIN_ROLE_IDS.ADMIN,
|
|
@@ -310,15 +374,20 @@ class TestConfiguration {
|
|
|
310
374
|
`${constants.Cookie.Auth}=${authToken}`,
|
|
311
375
|
`${constants.Cookie.CurrentApp}=${appToken}`,
|
|
312
376
|
],
|
|
313
|
-
[constants.Header.CSRF_TOKEN]:
|
|
377
|
+
[constants.Header.CSRF_TOKEN]: this.defaultUserValues.csrfToken,
|
|
314
378
|
...extras,
|
|
315
379
|
}
|
|
380
|
+
|
|
316
381
|
if (this.appId) {
|
|
317
382
|
headers[constants.Header.APP_ID] = this.appId
|
|
318
383
|
}
|
|
319
384
|
return headers
|
|
320
385
|
}
|
|
321
386
|
|
|
387
|
+
getTenantId() {
|
|
388
|
+
return this.tenantId || TENANT_ID
|
|
389
|
+
}
|
|
390
|
+
|
|
322
391
|
publicHeaders({ prodApp = true } = {}) {
|
|
323
392
|
const appId = prodApp ? this.prodAppId : this.appId
|
|
324
393
|
|
|
@@ -328,11 +397,16 @@ class TestConfiguration {
|
|
|
328
397
|
if (appId) {
|
|
329
398
|
headers[constants.Header.APP_ID] = appId
|
|
330
399
|
}
|
|
400
|
+
|
|
401
|
+
if (this.tenantId) {
|
|
402
|
+
headers[constants.Header.TENANT_ID] = this.tenantId
|
|
403
|
+
}
|
|
404
|
+
|
|
331
405
|
return headers
|
|
332
406
|
}
|
|
333
407
|
|
|
334
408
|
async roleHeaders({
|
|
335
|
-
email =
|
|
409
|
+
email = this.defaultUserValues.email,
|
|
336
410
|
roleId = roles.BUILTIN_ROLE_IDS.ADMIN,
|
|
337
411
|
builder = false,
|
|
338
412
|
prodApp = true,
|
|
@@ -342,8 +416,8 @@ class TestConfiguration {
|
|
|
342
416
|
|
|
343
417
|
// API
|
|
344
418
|
|
|
345
|
-
async generateApiKey(userId =
|
|
346
|
-
return tenancy.doWithGlobalDB(
|
|
419
|
+
async generateApiKey(userId = this.defaultUserValues.globalUserId) {
|
|
420
|
+
return tenancy.doWithGlobalDB(this.getTenantId(), async (db: any) => {
|
|
347
421
|
const id = dbCore.generateDevInfoID(userId)
|
|
348
422
|
let devInfo
|
|
349
423
|
try {
|
|
@@ -352,7 +426,7 @@ class TestConfiguration {
|
|
|
352
426
|
devInfo = { _id: id, userId }
|
|
353
427
|
}
|
|
354
428
|
devInfo.apiKey = encryption.encrypt(
|
|
355
|
-
`${
|
|
429
|
+
`${this.getTenantId()}${dbCore.SEPARATOR}${newid()}`
|
|
356
430
|
)
|
|
357
431
|
await db.put(devInfo)
|
|
358
432
|
return devInfo.apiKey
|
|
@@ -408,13 +482,13 @@ class TestConfiguration {
|
|
|
408
482
|
|
|
409
483
|
// TABLE
|
|
410
484
|
|
|
411
|
-
async updateTable(config?: any) {
|
|
485
|
+
async updateTable(config?: any): Promise<Table> {
|
|
412
486
|
config = config || basicTable()
|
|
413
487
|
this.table = await this._req(config, null, controllers.table.save)
|
|
414
488
|
return this.table
|
|
415
489
|
}
|
|
416
490
|
|
|
417
|
-
async createTable(config?:
|
|
491
|
+
async createTable(config?: Table) {
|
|
418
492
|
if (config != null && config._id) {
|
|
419
493
|
delete config._id
|
|
420
494
|
}
|
|
@@ -458,7 +532,7 @@ class TestConfiguration {
|
|
|
458
532
|
|
|
459
533
|
// ROW
|
|
460
534
|
|
|
461
|
-
async createRow(config:
|
|
535
|
+
async createRow(config?: Row): Promise<Row> {
|
|
462
536
|
if (!this.table) {
|
|
463
537
|
throw "Test requires table to be configured."
|
|
464
538
|
}
|
|
@@ -467,7 +541,7 @@ class TestConfiguration {
|
|
|
467
541
|
return this._req(config, { tableId }, controllers.row.save)
|
|
468
542
|
}
|
|
469
543
|
|
|
470
|
-
async getRow(tableId: string, rowId: string) {
|
|
544
|
+
async getRow(tableId: string, rowId: string): Promise<Row> {
|
|
471
545
|
return this._req(null, { tableId, rowId }, controllers.row.find)
|
|
472
546
|
}
|
|
473
547
|
|
|
@@ -549,7 +623,9 @@ class TestConfiguration {
|
|
|
549
623
|
|
|
550
624
|
// DATASOURCE
|
|
551
625
|
|
|
552
|
-
async createDatasource(config?:
|
|
626
|
+
async createDatasource(config?: {
|
|
627
|
+
datasource: Datasource
|
|
628
|
+
}): Promise<Datasource> {
|
|
553
629
|
config = config || basicDatasource()
|
|
554
630
|
const response = await this._req(config, null, controllers.datasource.save)
|
|
555
631
|
this.datasource = response.datasource
|
|
@@ -570,7 +646,7 @@ class TestConfiguration {
|
|
|
570
646
|
return this.createDatasource({
|
|
571
647
|
datasource: {
|
|
572
648
|
...basicDatasource().datasource,
|
|
573
|
-
source:
|
|
649
|
+
source: SourceName.REST,
|
|
574
650
|
config: cfg || {},
|
|
575
651
|
},
|
|
576
652
|
})
|
|
@@ -579,7 +655,7 @@ class TestConfiguration {
|
|
|
579
655
|
async dynamicVariableDatasource() {
|
|
580
656
|
let datasource = await this.restDatasource()
|
|
581
657
|
const basedOnQuery = await this.createQuery({
|
|
582
|
-
...basicQuery(datasource._id),
|
|
658
|
+
...basicQuery(datasource._id!),
|
|
583
659
|
fields: {
|
|
584
660
|
path: "www.google.com",
|
|
585
661
|
},
|
|
@@ -607,7 +683,7 @@ class TestConfiguration {
|
|
|
607
683
|
datasource: any,
|
|
608
684
|
fields: any,
|
|
609
685
|
params: any,
|
|
610
|
-
verb
|
|
686
|
+
verb?: string
|
|
611
687
|
) {
|
|
612
688
|
return request
|
|
613
689
|
.post(`/api/queries/preview`)
|
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
Automation,
|
|
8
8
|
AutomationActionStepId,
|
|
9
9
|
AutomationTriggerStepId,
|
|
10
|
+
Datasource,
|
|
11
|
+
SourceName,
|
|
10
12
|
} from "@budibase/types"
|
|
11
13
|
|
|
12
14
|
const { v4: uuidv4 } = require("uuid")
|
|
@@ -207,12 +209,12 @@ export function basicRole() {
|
|
|
207
209
|
}
|
|
208
210
|
}
|
|
209
211
|
|
|
210
|
-
export function basicDatasource() {
|
|
212
|
+
export function basicDatasource(): { datasource: Datasource } {
|
|
211
213
|
return {
|
|
212
214
|
datasource: {
|
|
213
215
|
type: "datasource",
|
|
214
216
|
name: "Test",
|
|
215
|
-
source:
|
|
217
|
+
source: SourceName.POSTGRES,
|
|
216
218
|
config: {},
|
|
217
219
|
},
|
|
218
220
|
}
|
|
@@ -255,3 +257,15 @@ export function basicWebhook(automationId: string) {
|
|
|
255
257
|
},
|
|
256
258
|
}
|
|
257
259
|
}
|
|
260
|
+
|
|
261
|
+
export function basicEnvironmentVariable(
|
|
262
|
+
name: string,
|
|
263
|
+
prod: string,
|
|
264
|
+
dev?: string
|
|
265
|
+
) {
|
|
266
|
+
return {
|
|
267
|
+
name,
|
|
268
|
+
production: prod,
|
|
269
|
+
development: dev || prod,
|
|
270
|
+
}
|
|
271
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export async function retry<T extends (...arg0: any[]) => any>(
|
|
2
|
+
fn: T,
|
|
3
|
+
maxTry: number = 5,
|
|
4
|
+
retryCount = 1
|
|
5
|
+
): Promise<Awaited<ReturnType<T>>> {
|
|
6
|
+
const currRetry = typeof retryCount === "number" ? retryCount : 1
|
|
7
|
+
try {
|
|
8
|
+
const result = await fn()
|
|
9
|
+
return result
|
|
10
|
+
} catch (e) {
|
|
11
|
+
console.log(`Retry ${currRetry} failed.`)
|
|
12
|
+
if (currRetry > maxTry) {
|
|
13
|
+
console.log(`All ${maxTry} retry attempts exhausted`)
|
|
14
|
+
throw e
|
|
15
|
+
}
|
|
16
|
+
return retry(fn, maxTry, currRetry + 1)
|
|
17
|
+
}
|
|
18
|
+
}
|