mysql-with-kysely
Version:
Use MySQL with kysely
69 lines (68 loc) • 2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FakeDuplicateError = exports.createMockMySqlHelper = void 0;
const jest_mock_extended_1 = require("jest-mock-extended");
const error_1 = require("@kanziw/error");
const index_1 = require("../index");
const createMockMySqlHelper = () => {
const mockMySql = (0, jest_mock_extended_1.mockDeep)();
const mockPoolConnection = (0, jest_mock_extended_1.mockDeep)();
mockMySql.getConnection.mockImplementation(() => Promise.resolve(mockPoolConnection));
mockMySql._mockPoolConnection = mockPoolConnection;
const sqlAndArgs = [];
let transactionCount = 0;
return {
db: (0, index_1.mysql)(mockMySql),
mockMySqlCall: (expectedSql, args, resp, { withBeginTransaction } = { withBeginTransaction: false }) => {
if (withBeginTransaction) {
transactionCount += 1;
}
sqlAndArgs.push([expectedSql, args]);
if (resp instanceof Error) {
mockMySql._mockPoolConnection.execute.mockRejectedValueOnce(resp);
return;
}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
mockMySql._mockPoolConnection.execute.mockResolvedValueOnce([resp]);
},
checkExecutedSqls: () => {
try {
mockMySql._mockPoolConnection.execute.mock.calls.forEach((call, idx) => {
try {
expect(call).toEqual(sqlAndArgs[idx]);
}
catch (unknownErr) {
const err = (0, error_1.wrapUnknownError)(unknownErr);
err.name = `${err.name} at idx: ${idx}`;
throw err;
}
});
expect(mockMySql._mockPoolConnection.execute.mock.calls.length).toBe(sqlAndArgs.length);
expect(mockMySql._mockPoolConnection.beginTransaction.mock.calls.length)
.toBe(transactionCount);
mockMySql._mockPoolConnection.execute.mockClear();
mockMySql._mockPoolConnection.beginTransaction.mockClear();
sqlAndArgs.splice(0);
transactionCount = 0;
}
catch (err) {
console.log(`
Invalid MySQL Mocking Founded. Executed sqls:
${mockMySql._mockPoolConnection.execute.mock.calls
.map(([executedSql]) => ` - ${executedSql}`)
.join('\n')}`);
throw err;
}
},
};
};
exports.createMockMySqlHelper = createMockMySqlHelper;
class FakeDuplicateError extends Error {
constructor() {
super(...arguments);
this.errno = 1062;
this.message = 'Mocked Duplicate Error';
}
}
exports.FakeDuplicateError = FakeDuplicateError;