From 85eeb424cc7c0dd348a82ee4fcdc8bf23900604f Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Wed, 21 Sep 2022 11:52:17 +0530 Subject: [PATCH] fix(nocodb): Fixed issues with test sakila project config where it was not taking the dbconfig from TestDbMngr --- packages/nocodb/tests/unit/TestDbMngr.ts | 35 ++++++++++--- packages/nocodb/tests/unit/factory/project.ts | 50 ++++++++++++------- packages/nocodb/tests/unit/init/index.ts | 2 +- 3 files changed, 62 insertions(+), 25 deletions(-) diff --git a/packages/nocodb/tests/unit/TestDbMngr.ts b/packages/nocodb/tests/unit/TestDbMngr.ts index c13199de3f..fb6a707ba7 100644 --- a/packages/nocodb/tests/unit/TestDbMngr.ts +++ b/packages/nocodb/tests/unit/TestDbMngr.ts @@ -12,17 +12,37 @@ export default class TestDbMngr { public static sakilaKnex: knex; public static defaultConnection = { - user: process.env['DB_USER'] || 'root', - password: process.env['DB_PASSWORD'] || 'password', - host: process.env['DB_HOST'] || 'localhost', - port: Number(process.env['DB_PORT']) || 3306, + user: 'root', + password: 'password', + host: 'localhost', + port: 3306, client: 'mysql2', } + public static connection: { + user: string; + password: string; + host: string; + port: number; + client: string; + } = TestDbMngr.defaultConnection; + public static dbConfig: DbConfig; + static populateConnectionConfig() { + const { user, password, host, port, client } = TestDbMngr.defaultConnection; + TestDbMngr.connection = { + user: process.env['DB_USER'] || user, + password: process.env['DB_PASSWORD'] || password, + host: process.env['DB_HOST'] || host, + port: Number(process.env['DB_PORT']) || port, + client + } + } + static async testConnection(config: DbConfig) { try { + console.log('Testing connection', TestDbMngr.connection); return await SqlMgrv2.testConnection(config); } catch (e) { console.log(e); @@ -31,15 +51,18 @@ export default class TestDbMngr { } static async init() { + TestDbMngr.populateConnectionConfig() + if(await TestDbMngr.isMysqlConfigured()){ await TestDbMngr.connectMysql(); } else { + console.log('Mysql is not configured. Switching to sqlite'); await TestDbMngr.switchToSqlite(); } } static async isMysqlConfigured() { - const { user, password, host, port, client } = TestDbMngr.defaultConnection; + const { user, password, host, port, client } = TestDbMngr.connection; const config = NcConfigFactory.urlToDbConfig(`${client}://${user}:${password}@${host}:${port}`); config.connection = { user, @@ -52,7 +75,7 @@ export default class TestDbMngr { } static async connectMysql() { - const { user, password, host, port, client } = TestDbMngr.defaultConnection; + const { user, password, host, port, client } = TestDbMngr.connection; if(!process.env[`DATABASE_URL`]){ process.env[`DATABASE_URL`] = `${client}://${user}:${password}@${host}:${port}/${TestDbMngr.dbName}`; } diff --git a/packages/nocodb/tests/unit/factory/project.ts b/packages/nocodb/tests/unit/factory/project.ts index 6e94ca58cc..92dbcbfd3e 100644 --- a/packages/nocodb/tests/unit/factory/project.ts +++ b/packages/nocodb/tests/unit/factory/project.ts @@ -1,27 +1,41 @@ import request from 'supertest'; import Project from '../../../src/lib/models/Project'; -import TestDbMngr from '../TestDbMngr'; -const externalProjectConfig = { - title: 'sakila', - bases: [ - { - type: 'mysql2', +const sakilaProjectConfig = (context) => { + let base; + + if(context.sakilaDbConfig.client === 'mysql2'){ + base = { + type: context.sakilaDbConfig.client, + config: { + client: context.sakilaDbConfig.client, + connection: context.sakilaDbConfig.connection + } + }; + } else { + base = { + type: context.sakilaDbConfig.client, config: { - client: 'mysql2', + client: context.sakilaDbConfig.client, connection: { - host: 'localhost', - port: '3306', - user: 'root', - password: 'password', - database: TestDbMngr.sakilaDbName, + client: context.sakilaDbConfig.client, + connection: context.sakilaDbConfig.connection, }, }, - inflection_column: 'camelize', - inflection_table: 'camelize', - }, - ], - external: true, + }; + } + + base = { + ...base, + inflection_column: 'camelize', + inflection_table: 'camelize', + }; + + return { + title: 'sakila', + bases: [base], + external: true, + } }; const defaultProjectValue = { @@ -47,7 +61,7 @@ const createSakilaProject = async (context) => { const response = await request(context.app) .post('/api/v1/db/meta/projects/') .set('xc-auth', context.token) - .send(externalProjectConfig); + .send(sakilaProjectConfig(context)); return (await Project.getByTitleOrId(response.body.id)) as Project; }; diff --git a/packages/nocodb/tests/unit/init/index.ts b/packages/nocodb/tests/unit/init/index.ts index 64474f8e13..55a25a926e 100644 --- a/packages/nocodb/tests/unit/init/index.ts +++ b/packages/nocodb/tests/unit/init/index.ts @@ -38,5 +38,5 @@ export default async function () { const { token } = await createUser({ app: server }, { roles: 'editor' }); - return { app: server, token, dbConfig: TestDbMngr.dbConfig }; + return { app: server, token, dbConfig: TestDbMngr.dbConfig, sakilaDbConfig: TestDbMngr.getSakilaDbConfig() }; }