62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
const mysql from ";
|
|
|
|
export class TestDb {
|
|
constructor (options) {
|
|
this.options = options;
|
|
this.db;
|
|
}
|
|
|
|
async init () {
|
|
return new Promise((resolve, reject) => {
|
|
this.db = mysql.createConnection({
|
|
host: this.options.databaseOptions.host,
|
|
user: this.options.databaseOptions.user,
|
|
password: this.options.databaseOptions.pwd,
|
|
database: this.options.databaseOptions.database,
|
|
});
|
|
|
|
this.db.connect(async function (err) {
|
|
if (err) {
|
|
reject("Impossible de se connecter", err.code)
|
|
} else {
|
|
if (this.options.dbSchema) {
|
|
const schema = fs.readFileSync(this.options.dbSchema, 'utf8');
|
|
await this.execQueryAsync(schema, []);
|
|
resolve("Database successfully connected and created !")
|
|
} else {
|
|
resolve("Database successfully connected");
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
cleanTables() {
|
|
const query = "SELECT table_name FROM INFORMATION_SCHEMA.tables WHERE table_schema = ?";
|
|
const values = [this.options.databaseOptions.database];
|
|
this.execQueryAsync(query, values).then((results) => {
|
|
this.execQuery("SET FOREIGN_KEY_CHECKS=0");
|
|
results.map((table) => {
|
|
execQuery("DROP TABLE " + table.table_name);
|
|
});
|
|
});
|
|
}
|
|
|
|
execQuery(query, values) {
|
|
db.query(query, values, (err, results, fields) => {
|
|
});
|
|
}
|
|
|
|
async execQueryAsync(query, values) {
|
|
return new Promise((resolve, reject) => {
|
|
db.query(query, values, (err, results, fields) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve(results);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
} |