trying stuff to mock mysql

This commit is contained in:
grimhilt 2023-04-04 15:13:38 +02:00
parent de94bd4bab
commit 9c16e06446
8 changed files with 2165 additions and 18 deletions

View File

@ -2,12 +2,11 @@ import mysql from "mysql";
import logger from "../system/Logger"; import logger from "../system/Logger";
require("dotenv").config(); require("dotenv").config();
// todo remove export const db = mysql.createConnection({
export const db = mysql.createConnection({
host: process.env.HOST_DB, host: process.env.HOST_DB,
user: process.env.USER_DB, user: process.env.USER_DB,
password: process.env.PASSWORD_DB, password: process.env.PASSWORD_DB,
database: process.env.NAME_DB, database: (process.env.NODE_ENV === "test") ? process.env.NAME_DB_TEST : process.env.NAME_DB,
}); });
db.connect(function (err) { db.connect(function (err) {

View File

@ -1,5 +1,5 @@
import { transformEmojis } from "../utils/string"; import { transformEmojis } from "../utils/string";
import { db, execQueryAsync, execQueryAsyncWithId, execQuery } from "./db"; import { execQueryAsync, execQueryAsyncWithId, execQuery } from "./db";
import { queryFromId, queryToId, queryCcId } from "./utils/addressQueries"; import { queryFromId, queryToId, queryCcId } from "./utils/addressQueries";
export async function getAllMembers(messageId: number) { export async function getAllMembers(messageId: number) {
@ -85,11 +85,10 @@ export async function registerThread(roomId: number, parentId: number, rootId: n
export async function isRoomGroup(roomId: number): Promise<boolean> { export async function isRoomGroup(roomId: number): Promise<boolean> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const query = `SELECT isGroup FROM app_room WHERE room_id = '${roomId}'`; const query = `SELECT isGroup FROM app_room WHERE room_id = ?`;
db.query(query, (err, results, fields) => { const values = [roomId];
if (err) reject(err); const results = execQueryAsync(query, values);
resolve(results[0].isGroup); return results[0].isGroup;
});
}); });
} }

2102
back/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -29,15 +29,21 @@
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"concurrently": "^8.0.1", "concurrently": "^8.0.1",
"jest": "^29.5.0", "jest": "^29.5.0",
"sql-mysql": "^1.2.0",
"sqlite3": "^5.1.6",
"sqlparser": "^0.1.7",
"ts-jest": "^29.0.5", "ts-jest": "^29.0.5",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typescript": "^4.9.5" "typescript": "^4.9.5"
}, },
"jest": { "jest": {
"preset": "ts-jest", "preset": "ts-jest",
"setupFiles": [
"<rootDir>/test/.jest/setEnvVars.js"
],
"testEnvironment": "node", "testEnvironment": "node",
"testMatch": [ "testMatch": [
"<rootDir>/test//**/*-test.[jt]s?(x)" "<rootDir>/test//**/*-test.[jt]s?(x)"
] ]
} }
} }

View File

@ -0,0 +1 @@
process.env.NODE_ENV = "test";

View File

@ -1,3 +1,11 @@
import mysql from "mysql";
jest.mock("mysql");
mysql.createConnection = jest.fn();
mysql.createConnection.mockImplementation(() => {
return { connect: () => new Promise((resolve, rejects) => resolve(true)) };
});
import { generateAttrs, generateUsers } from "../test-utils/test-attrsUtils"; import { generateAttrs, generateUsers } from "../test-utils/test-attrsUtils";
import registerMessageInApp, { roomType } from "../../mails/saveMessage"; import registerMessageInApp, { roomType } from "../../mails/saveMessage";
import { jest, describe, it, expect } from "@jest/globals"; import { jest, describe, it, expect } from "@jest/globals";
@ -5,7 +13,6 @@ import { jest, describe, it, expect } from "@jest/globals";
import { getAddresseId, getUserIdOfMailbox } from "../../db/utils/mail"; import { getAddresseId, getUserIdOfMailbox } from "../../db/utils/mail";
// todo esbuild // todo esbuild
// todo mock db // todo mock db
// new message from us // new message from us
// to multiple people -> room // to multiple people -> room
// if response has same member => group // if response has same member => group
@ -20,13 +27,12 @@ import { getAddresseId, getUserIdOfMailbox } from "../../db/utils/mail";
// // make it better // // make it better
// if multiple members reply -> group // if multiple members reply -> group
// if only me reply -> channel // if only me reply -> channel
const users = generateUsers(5); const users = generateUsers(5);
const ownUser = users[0]; const ownUser = users[0];
const messageId = 1; const messageId = 1;
const boxId = 1; const boxId = 1;
jest.mock("../../db/mail", () => ({ jest.mock("../../db/utils/mail", () => ({
getAddresseId: jest.fn().mockImplementation((email) => { getAddresseId: jest.fn().mockImplementation((email) => {
const match = users.find((user) => user.user.mailbox + "@" + user.user.host == email); const match = users.find((user) => user.user.mailbox + "@" + user.user.host == email);
return new Promise((resolve, reject) => resolve(match?.id)); return new Promise((resolve, reject) => resolve(match?.id));
@ -36,6 +42,10 @@ jest.mock("../../db/mail", () => ({
}), }),
})); }));
beforeAll(async () => {
});
describe("saveMessage", () => { describe("saveMessage", () => {
describe("functions", () => { describe("functions", () => {
it("isFromUs", async () => { it("isFromUs", async () => {

View File

@ -1,5 +1,35 @@
export default class DB { const sqlite3 = require("sqlite3").verbose();
constructor() { const sqlMysql = require("sql-mysql");
export const db = new sqlite3.Database(":memory:");
} var Parser = require("sqlparser");
} import fs from "fs";
// const mysqlQuery = 'SELECT * FROM users WHERE age > 18';
// const sqliteQuery = sqlMysql.toSqlite(mysqlQuery);
// console.log(sqliteQuery)
export function initDatabase() {
return new Promise((resolve, reject) => {
const pathSQL = __dirname + "/../../../db/structureV2.sql";
// fs.readdir(__dirname + "/../../../db/structureV2.sql", (err, files) => {
// if (err) console.log(err);
// else {
// console.log("\nCurrent directory filenames:");
// files.forEach((file) => {
// console.log(file);
// });
// }
// });
const sqlTables = fs.readFileSync(pathSQL, "utf8");
// const sqliteTables = sqlMysql.toSqlite(sqlTables);
var sqliteTables = Parser.parse(sqlTables);
db.serialize(() => {
db.run(sqliteTables, (error) => {
if (error) {
reject(error);
} else {
resolve(true);
}
});
});
});
}