From d656edad4014014d259cf897b32c57734c40a4ea Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 12 May 2023 12:35:07 +0200 Subject: [PATCH] Implement the check as part of the integration --- packages/server/src/integrations/couchdb.ts | 20 +++---- .../integrations/validators/postgres.spec.ts | 60 +++++++++++++++++++ 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/packages/server/src/integrations/couchdb.ts b/packages/server/src/integrations/couchdb.ts index 1c6c978612..a4692c7cd6 100644 --- a/packages/server/src/integrations/couchdb.ts +++ b/packages/server/src/integrations/couchdb.ts @@ -67,6 +67,15 @@ class CouchDBIntegration implements IntegrationBase { this.client = dbCore.DatabaseWithConnection(config.database, config.url) } + async testConnection() { + try { + const result = await this.query("exists", "validation error", {}) + return result === true + } catch (e: any) { + return { error: e.message as string } + } + } + async query( command: string, errorMsg: string, @@ -125,18 +134,7 @@ class CouchDBIntegration implements IntegrationBase { } } -async function validateConnection(config: CouchDBConfig) { - const integration = new CouchDBIntegration(config) - try { - const result = await integration.query("exists", "validation error", {}) - return result === true - } catch (e: any) { - return { error: e.message as string } - } -} - export default { schema: SCHEMA, integration: CouchDBIntegration, - validateConnection, } diff --git a/qa-core/src/integrations/validators/postgres.spec.ts b/qa-core/src/integrations/validators/postgres.spec.ts index 6e1219540b..78bda902d2 100644 --- a/qa-core/src/integrations/validators/postgres.spec.ts +++ b/qa-core/src/integrations/validators/postgres.spec.ts @@ -3,6 +3,8 @@ import postgres from "../../../../packages/server/src/integrations/postgres" import { generator } from "@budibase/backend-core/tests" +import couchdb from "../../../../packages/server/src/integrations/couchdb" + jest.unmock("pg") describe("datasource validators", () => { @@ -52,4 +54,62 @@ describe("datasource validators", () => { }) }) }) + + describe("couchdb", () => { + let url: string + + beforeAll(async () => { + const user = generator.first() + const password = generator.hash() + + const container = await new GenericContainer("budibase/couchdb") + .withExposedPorts(5984) + .withEnv("COUCHDB_USER", user) + .withEnv("COUCHDB_PASSWORD", password) + .start() + + const host = container.getContainerIpAddress() + const port = container.getMappedPort(5984) + + await container.exec([ + `curl`, + `-u`, + `${user}:${password}`, + `-X`, + `PUT`, + `localhost:5984/db`, + ]) + url = `http://${user}:${password}@${host}:${port}` + }) + + it("test valid connection string", async () => { + const integration = new couchdb.integration({ + url, + database: "db", + }) + const result = await integration.testConnection() + expect(result).toBe(true) + }) + + it("test invalid database", async () => { + const integration = new couchdb.integration({ + url, + database: "random_db", + }) + const result = await integration.testConnection() + expect(result).toBe(false) + }) + + it("test invalid url", async () => { + const integration = new couchdb.integration({ + url: "http://invalid:123", + database: "any", + }) + const result = await integration.testConnection() + expect(result).toEqual({ + error: + "request to http://invalid:123/any failed, reason: getaddrinfo ENOTFOUND invalid", + }) + }) + }) })