UNPKG

mysql-with-kysely

Version:
69 lines (68 loc) 2.91 kB
"use strict"; 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;