@budibase/server 1.0.145 → 1.0.148
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__/@google-cloud/firestore.ts +36 -0
- package/__mocks__/pg.ts +1 -9
- package/builder/assets/{index.6b7d3283.js → index.63d4b14b.js} +2 -2
- package/builder/index.html +1 -1
- package/coverage/clover.xml +94 -101
- package/coverage/coverage-final.json +2 -2
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +1 -1
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +18 -18
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +2 -2
- package/coverage/lcov-report/db/utils.js.html +18 -72
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +19 -19
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- package/coverage/lcov-report/middleware/index.html +1 -1
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +1 -1
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +187 -201
- package/dist/api/controllers/row/ExternalRequest.js +3 -2
- package/dist/db/utils.js +3 -21
- package/dist/integrations/firebase.js +9 -9
- package/dist/integrations/index.js +1 -0
- package/dist/integrations/postgres.js +15 -11
- package/dist/package.json +5 -5
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/api/controllers/row/ExternalRequest.ts +3 -2
- package/src/db/utils.js +4 -22
- package/src/integrations/firebase.ts +10 -10
- package/src/integrations/index.ts +1 -0
- package/src/integrations/postgres.ts +9 -11
- package/src/integrations/tests/firebase.spec.js +92 -0
- package/src/integrations/tests/postgres.spec.js +0 -4
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.148",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -68,10 +68,10 @@
|
|
|
68
68
|
"license": "GPL-3.0",
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
71
|
-
"@budibase/backend-core": "^1.0.
|
|
72
|
-
"@budibase/client": "^1.0.
|
|
73
|
-
"@budibase/pro": "1.0.
|
|
74
|
-
"@budibase/string-templates": "^1.0.
|
|
71
|
+
"@budibase/backend-core": "^1.0.148",
|
|
72
|
+
"@budibase/client": "^1.0.148",
|
|
73
|
+
"@budibase/pro": "1.0.147",
|
|
74
|
+
"@budibase/string-templates": "^1.0.148",
|
|
75
75
|
"@bull-board/api": "^3.7.0",
|
|
76
76
|
"@bull-board/koa": "^3.7.0",
|
|
77
77
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -180,5 +180,5 @@
|
|
|
180
180
|
"optionalDependencies": {
|
|
181
181
|
"oracledb": "^5.3.0"
|
|
182
182
|
},
|
|
183
|
-
"gitHead": "
|
|
183
|
+
"gitHead": "80145b6929f388551d6342c6b1722a6b09d221ac"
|
|
184
184
|
}
|
|
@@ -175,9 +175,10 @@ module External {
|
|
|
175
175
|
const thisRow: Row = {}
|
|
176
176
|
// filter the row down to what is actually the row (not joined)
|
|
177
177
|
for (let fieldName of Object.keys(table.schema)) {
|
|
178
|
-
const
|
|
178
|
+
const pathValue = row[`${table.name}.${fieldName}`]
|
|
179
|
+
const value = pathValue != null ? pathValue : row[fieldName]
|
|
179
180
|
// all responses include "select col as table.col" so that overlaps are handled
|
|
180
|
-
if (value) {
|
|
181
|
+
if (value != null) {
|
|
181
182
|
thisRow[fieldName] = value
|
|
182
183
|
}
|
|
183
184
|
}
|
package/src/db/utils.js
CHANGED
|
@@ -9,6 +9,8 @@ const {
|
|
|
9
9
|
StaticDatabases,
|
|
10
10
|
isDevAppID,
|
|
11
11
|
isProdAppID,
|
|
12
|
+
getDevelopmentAppID,
|
|
13
|
+
generateAppID,
|
|
12
14
|
} = require("@budibase/backend-core/db")
|
|
13
15
|
|
|
14
16
|
const UNICODE_MAX = "\ufff0"
|
|
@@ -80,6 +82,8 @@ exports.UNICODE_MAX = UNICODE_MAX
|
|
|
80
82
|
exports.SearchIndexes = SearchIndexes
|
|
81
83
|
exports.AppStatus = AppStatus
|
|
82
84
|
exports.BudibaseInternalDB = BudibaseInternalDB
|
|
85
|
+
exports.generateAppID = generateAppID
|
|
86
|
+
exports.generateDevAppID = getDevelopmentAppID
|
|
83
87
|
|
|
84
88
|
exports.generateRoleID = generateRoleID
|
|
85
89
|
exports.getRoleParams = getRoleParams
|
|
@@ -243,28 +247,6 @@ exports.getLinkParams = (otherProps = {}) => {
|
|
|
243
247
|
return getDocParams(DocumentTypes.LINK, null, otherProps)
|
|
244
248
|
}
|
|
245
249
|
|
|
246
|
-
/**
|
|
247
|
-
* Generates a new app ID.
|
|
248
|
-
* @returns {string} The new app ID which the app doc can be stored under.
|
|
249
|
-
*/
|
|
250
|
-
exports.generateAppID = (tenantId = null) => {
|
|
251
|
-
let id = `${DocumentTypes.APP}${SEPARATOR}`
|
|
252
|
-
if (tenantId) {
|
|
253
|
-
id += `${tenantId}${SEPARATOR}`
|
|
254
|
-
}
|
|
255
|
-
return `${id}${newid()}`
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Generates a development app ID from a real app ID.
|
|
260
|
-
* @returns {string} the dev app ID which can be used for dev database.
|
|
261
|
-
*/
|
|
262
|
-
exports.generateDevAppID = appId => {
|
|
263
|
-
const prefix = `${DocumentTypes.APP}${SEPARATOR}`
|
|
264
|
-
const rest = appId.split(prefix)[1]
|
|
265
|
-
return `${DocumentTypes.APP_DEV}${SEPARATOR}${rest}`
|
|
266
|
-
}
|
|
267
|
-
|
|
268
250
|
/**
|
|
269
251
|
* Generates a new layout ID.
|
|
270
252
|
* @returns {string} The new layout ID which the layout doc can be stored under.
|
|
@@ -92,13 +92,13 @@ module Firebase {
|
|
|
92
92
|
|
|
93
93
|
class FirebaseIntegration implements IntegrationBase {
|
|
94
94
|
private config: FirebaseConfig
|
|
95
|
-
private
|
|
95
|
+
private client: Firestore
|
|
96
96
|
|
|
97
97
|
constructor(config: FirebaseConfig) {
|
|
98
98
|
this.config = config
|
|
99
99
|
if (config.serviceAccount) {
|
|
100
100
|
const serviceAccount = JSON.parse(config.serviceAccount)
|
|
101
|
-
this.
|
|
101
|
+
this.client = new Firestore({
|
|
102
102
|
projectId: serviceAccount.project_id,
|
|
103
103
|
credentials: {
|
|
104
104
|
client_email: serviceAccount.client_email,
|
|
@@ -106,7 +106,7 @@ module Firebase {
|
|
|
106
106
|
},
|
|
107
107
|
})
|
|
108
108
|
} else {
|
|
109
|
-
this.
|
|
109
|
+
this.client = new Firestore({
|
|
110
110
|
projectId: config.projectId,
|
|
111
111
|
credentials: {
|
|
112
112
|
client_email: config.email,
|
|
@@ -118,7 +118,7 @@ module Firebase {
|
|
|
118
118
|
|
|
119
119
|
async create(query: { json: object; extra: { [key: string]: string } }) {
|
|
120
120
|
try {
|
|
121
|
-
const documentReference = this.
|
|
121
|
+
const documentReference = this.client
|
|
122
122
|
.collection(query.extra.collection)
|
|
123
123
|
.doc()
|
|
124
124
|
await documentReference.set({ ...query.json, id: documentReference.id })
|
|
@@ -133,7 +133,7 @@ module Firebase {
|
|
|
133
133
|
async read(query: { json: object; extra: { [key: string]: string } }) {
|
|
134
134
|
try {
|
|
135
135
|
let snapshot
|
|
136
|
-
const collectionRef = this.
|
|
136
|
+
const collectionRef = this.client.collection(query.extra.collection)
|
|
137
137
|
if (
|
|
138
138
|
query.extra.filterField &&
|
|
139
139
|
query.extra.filter &&
|
|
@@ -164,19 +164,19 @@ module Firebase {
|
|
|
164
164
|
extra: { [key: string]: string }
|
|
165
165
|
}) {
|
|
166
166
|
try {
|
|
167
|
-
await this.
|
|
167
|
+
await this.client
|
|
168
168
|
.collection(query.extra.collection)
|
|
169
169
|
.doc(query.json.id)
|
|
170
170
|
.update(query.json)
|
|
171
171
|
|
|
172
172
|
return (
|
|
173
|
-
await this.
|
|
173
|
+
await this.client
|
|
174
174
|
.collection(query.extra.collection)
|
|
175
175
|
.doc(query.json.id)
|
|
176
176
|
.get()
|
|
177
177
|
).data()
|
|
178
178
|
} catch (err) {
|
|
179
|
-
console.error("Error writing to
|
|
179
|
+
console.error("Error writing to Firestore", err)
|
|
180
180
|
throw err
|
|
181
181
|
}
|
|
182
182
|
}
|
|
@@ -186,13 +186,13 @@ module Firebase {
|
|
|
186
186
|
extra: { [key: string]: string }
|
|
187
187
|
}) {
|
|
188
188
|
try {
|
|
189
|
-
await this.
|
|
189
|
+
await this.client
|
|
190
190
|
.collection(query.extra.collection)
|
|
191
191
|
.doc(query.json.id)
|
|
192
192
|
.delete()
|
|
193
193
|
return true
|
|
194
194
|
} catch (err) {
|
|
195
|
-
console.error("Error
|
|
195
|
+
console.error("Error deleting from Firestore", err)
|
|
196
196
|
throw err
|
|
197
197
|
}
|
|
198
198
|
}
|
|
@@ -46,6 +46,7 @@ const INTEGRATIONS = {
|
|
|
46
46
|
[SourceNames.FIREBASE]: firebase.integration,
|
|
47
47
|
[SourceNames.GOOGLE_SHEETS]: googlesheets.integration,
|
|
48
48
|
[SourceNames.REDIS]: redis.integration,
|
|
49
|
+
[SourceNames.FIREBASE]: firebase.integration,
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
// optionally add oracle integration if the oracle binary can be installed
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import { DatasourcePlus } from "./base/datasourcePlus"
|
|
17
17
|
|
|
18
18
|
module PostgresModule {
|
|
19
|
-
const {
|
|
19
|
+
const { Client } = require("pg")
|
|
20
20
|
const Sql = require("./base/sql")
|
|
21
21
|
const { escapeDangerousCharacters } = require("../utilities")
|
|
22
22
|
|
|
@@ -104,7 +104,6 @@ module PostgresModule {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
class PostgresIntegration extends Sql implements DatasourcePlus {
|
|
107
|
-
static pool: any
|
|
108
107
|
private readonly client: any
|
|
109
108
|
private readonly config: PostgresConfig
|
|
110
109
|
private index: number = 1
|
|
@@ -136,11 +135,7 @@ module PostgresModule {
|
|
|
136
135
|
}
|
|
137
136
|
: undefined,
|
|
138
137
|
}
|
|
139
|
-
|
|
140
|
-
this.pool = new Pool(newConfig)
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
this.client = this.pool
|
|
138
|
+
this.client = new Client(newConfig)
|
|
144
139
|
this.setSchema()
|
|
145
140
|
}
|
|
146
141
|
|
|
@@ -171,16 +166,17 @@ module PostgresModule {
|
|
|
171
166
|
} catch (err) {
|
|
172
167
|
// @ts-ignore
|
|
173
168
|
throw new Error(err)
|
|
169
|
+
} finally {
|
|
170
|
+
await this.client.end()
|
|
174
171
|
}
|
|
175
172
|
}
|
|
176
173
|
|
|
177
|
-
setSchema() {
|
|
174
|
+
async setSchema() {
|
|
175
|
+
await this.client.connect()
|
|
178
176
|
if (!this.config.schema) {
|
|
179
177
|
this.config.schema = "public"
|
|
180
178
|
}
|
|
181
|
-
this.client.
|
|
182
|
-
client.query(`SET search_path TO ${this.config.schema}`)
|
|
183
|
-
})
|
|
179
|
+
this.client.query(`SET search_path TO ${this.config.schema}`)
|
|
184
180
|
this.COLUMNS_SQL = `select * from information_schema.columns where table_schema = '${this.config.schema}'`
|
|
185
181
|
}
|
|
186
182
|
|
|
@@ -208,6 +204,8 @@ module PostgresModule {
|
|
|
208
204
|
}
|
|
209
205
|
} catch (err) {
|
|
210
206
|
tableKeys = {}
|
|
207
|
+
} finally {
|
|
208
|
+
await this.client.close()
|
|
211
209
|
}
|
|
212
210
|
|
|
213
211
|
const columnsResponse = await this.client.query(this.COLUMNS_SQL)
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const firebase = require("@google-cloud/firestore")
|
|
2
|
+
const FirebaseIntegration = require("../firebase")
|
|
3
|
+
jest.mock("@google-cloud/firestore")
|
|
4
|
+
|
|
5
|
+
class TestConfiguration {
|
|
6
|
+
constructor(config = {}) {
|
|
7
|
+
this.integration = new FirebaseIntegration.integration(config)
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
describe("Firebase Integration", () => {
|
|
12
|
+
let config
|
|
13
|
+
let tableName = "Users"
|
|
14
|
+
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
config = new TestConfiguration({
|
|
17
|
+
serviceAccount: "{}"
|
|
18
|
+
})
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it("calls the create method with the correct params", async () => {
|
|
22
|
+
await config.integration.create({
|
|
23
|
+
table: tableName,
|
|
24
|
+
json: {
|
|
25
|
+
Name: "Test Name"
|
|
26
|
+
},
|
|
27
|
+
extra: {
|
|
28
|
+
collection: "test"
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
expect(config.integration.client.collection).toHaveBeenCalledWith("test")
|
|
32
|
+
expect(config.integration.client.set).toHaveBeenCalledWith({
|
|
33
|
+
Name: "Test Name",
|
|
34
|
+
id: "test_id"
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it("calls the read method with the correct params", async () => {
|
|
39
|
+
const response = await config.integration.read({
|
|
40
|
+
table: tableName,
|
|
41
|
+
json: {
|
|
42
|
+
Name: "Test"
|
|
43
|
+
},
|
|
44
|
+
extra: {
|
|
45
|
+
collection: "test",
|
|
46
|
+
filterField: "field",
|
|
47
|
+
filter: "==",
|
|
48
|
+
filterValue: "value",
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
expect(config.integration.client.collection).toHaveBeenCalledWith("test")
|
|
52
|
+
expect(config.integration.client.where).toHaveBeenCalledWith("field", "==", "value")
|
|
53
|
+
expect(response).toEqual([{ result: "test"}])
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
it("calls the update method with the correct params", async () => {
|
|
57
|
+
const response = await config.integration.update({
|
|
58
|
+
table: tableName,
|
|
59
|
+
json: {
|
|
60
|
+
id: "test",
|
|
61
|
+
Name: "Test"
|
|
62
|
+
},
|
|
63
|
+
extra: {
|
|
64
|
+
collection: "test"
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
expect(config.integration.client.collection).toHaveBeenCalledWith("test")
|
|
68
|
+
expect(config.integration.client.update).toHaveBeenCalledWith({
|
|
69
|
+
Name: "Test",
|
|
70
|
+
id: "test"
|
|
71
|
+
})
|
|
72
|
+
expect(response).toEqual({
|
|
73
|
+
result: "test"
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it("calls the delete method with the correct params", async () => {
|
|
78
|
+
const response = await config.integration.delete({
|
|
79
|
+
table: tableName,
|
|
80
|
+
json: {
|
|
81
|
+
id: "test",
|
|
82
|
+
Name: "Test"
|
|
83
|
+
},
|
|
84
|
+
extra: {
|
|
85
|
+
collection: "test"
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
expect(config.integration.client.collection).toHaveBeenCalledWith("test")
|
|
89
|
+
expect(config.integration.client.doc).toHaveBeenCalledWith("test")
|
|
90
|
+
expect(config.integration.client.delete).toHaveBeenCalled()
|
|
91
|
+
})
|
|
92
|
+
})
|
|
@@ -15,10 +15,6 @@ describe("Postgres Integration", () => {
|
|
|
15
15
|
config = new TestConfiguration()
|
|
16
16
|
})
|
|
17
17
|
|
|
18
|
-
it("calls the connection callback", async () => {
|
|
19
|
-
expect(pg.on).toHaveBeenCalledWith('connect', expect.anything())
|
|
20
|
-
})
|
|
21
|
-
|
|
22
18
|
it("calls the create method with the correct params", async () => {
|
|
23
19
|
const sql = "insert into users (name, age) values ('Joe', 123);"
|
|
24
20
|
await config.integration.create({
|