fix(database): mock db
This commit is contained in:
parent
01e5e1cbac
commit
db3285d452
@ -1,6 +1,6 @@
|
||||
import { generatePrefixByPath, mockDatabase } from './index';
|
||||
import { Collection } from '../collection';
|
||||
import { Database } from '../database';
|
||||
import { generatePrefixByPath, mockDatabase } from './index';
|
||||
|
||||
test('collection disable authGenId', async () => {
|
||||
const db = mockDatabase();
|
||||
@ -15,6 +15,7 @@ test('collection disable authGenId', async () => {
|
||||
|
||||
await db.sync();
|
||||
expect(model.rawAttributes['id']).toBeUndefined();
|
||||
await db.close();
|
||||
});
|
||||
|
||||
test('new collection', async () => {
|
||||
|
@ -1,4 +1,6 @@
|
||||
import { uid } from '@nocobase/utils';
|
||||
import merge from 'deepmerge';
|
||||
import { Sequelize } from 'sequelize';
|
||||
import { Database, DatabaseOptions } from '../database';
|
||||
|
||||
export function generatePrefixByPath() {
|
||||
@ -12,12 +14,15 @@ export function generatePrefixByPath() {
|
||||
return key;
|
||||
}
|
||||
|
||||
export function getConfig(config = {}, options?: any): DatabaseOptions {
|
||||
return merge(
|
||||
{
|
||||
dialect: 'sqlite',
|
||||
storage: options?.storage || ':memory:',
|
||||
logging: options?.logging || false,
|
||||
export function getConfig(config: any = {}, options?: any): DatabaseOptions {
|
||||
if (process.env.DB_DIALECT === 'sqlite') {
|
||||
const defaults = {
|
||||
dialect: process.env.DB_DIALECT as any,
|
||||
storage: ':memory:',
|
||||
logging: process.env.DB_LOG_SQL === 'on' ? console.log : false,
|
||||
// sync: {
|
||||
// force: true,
|
||||
// },
|
||||
hooks: {
|
||||
beforeDefine(model, options) {
|
||||
options.tableName = `${generatePrefixByPath()}_${
|
||||
@ -25,10 +30,63 @@ export function getConfig(config = {}, options?: any): DatabaseOptions {
|
||||
}`;
|
||||
},
|
||||
},
|
||||
};
|
||||
return merge(defaults, config, options);
|
||||
}
|
||||
const database = `mock_${uid()}`;
|
||||
let dbExists = false;
|
||||
const defaults = {
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT as any,
|
||||
dialect: process.env.DB_DIALECT as any,
|
||||
logging: process.env.DB_LOG_SQL === 'on' ? console.log : false,
|
||||
dialectOptions: {
|
||||
charset: 'utf8mb4',
|
||||
collate: 'utf8mb4_unicode_ci',
|
||||
},
|
||||
config || {},
|
||||
options,
|
||||
) as any;
|
||||
hooks: {
|
||||
beforeDefine(model, options) {
|
||||
options.tableName = `${generatePrefixByPath()}_${
|
||||
options.tableName || options.modelName || options.name.plural
|
||||
}`;
|
||||
},
|
||||
async beforeSync({ sequelize }: any) {
|
||||
if (config.database) {
|
||||
return;
|
||||
}
|
||||
if (dbExists) {
|
||||
return;
|
||||
}
|
||||
return;
|
||||
const db = new Sequelize({
|
||||
username: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
database: process.env.DB_DATABASE,
|
||||
host: process.env.DB_HOST,
|
||||
port: process.env.DB_PORT as any,
|
||||
dialect: process.env.DB_DIALECT as any,
|
||||
logging: process.env.DB_LOG_SQL === 'on' ? console.log : false,
|
||||
dialectOptions: {
|
||||
charset: 'utf8mb4',
|
||||
collate: 'utf8mb4_unicode_ci',
|
||||
},
|
||||
});
|
||||
await db.query(`CREATE DATABASE "${database}";`);
|
||||
await db.close();
|
||||
sequelize.options.database = database;
|
||||
sequelize.config.database = database;
|
||||
const ConnectionManager = sequelize.dialect.connectionManager.constructor;
|
||||
const connectionManager = new ConnectionManager(sequelize.dialect, sequelize);
|
||||
sequelize.dialect.connectionManager = connectionManager;
|
||||
sequelize.connectionManager = connectionManager;
|
||||
dbExists = true;
|
||||
},
|
||||
},
|
||||
};
|
||||
return merge(defaults, config, options);
|
||||
}
|
||||
|
||||
export function mockDatabase(options?: DatabaseOptions): Database {
|
||||
|
Loading…
Reference in New Issue
Block a user