mirror of
https://github.com/amitwh/markdown-converter.git
synced 2026-10-01 09:19:34 +05:30
74 lines
2.4 KiB
JavaScript
74 lines
2.4 KiB
JavaScript
/**
|
|
* @jest-environment node
|
|
*
|
|
* Adapter tests — figlet is mocked so we don't ship 400 KB of fonts into
|
|
* the test runner.
|
|
*/
|
|
jest.mock('figlet', () => {
|
|
const actual = jest.requireActual('figlet');
|
|
return {
|
|
__esModule: true,
|
|
default: actual,
|
|
textSync: jest.fn(() => 'MOCKED_FIGLET_OUTPUT'),
|
|
fontsSync: jest.fn(() => ['Standard', 'Big', 'Slant']),
|
|
};
|
|
});
|
|
|
|
const FigletAdapter = require('../../src/main/AsciiArt.figlet-adapter');
|
|
|
|
describe('AsciiArt.figlet-adapter', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
FigletAdapter._resetCache(); // test-only reset
|
|
});
|
|
|
|
test('loadFiglet returns the figlet module on first call', () => {
|
|
const mod = FigletAdapter.loadFiglet();
|
|
expect(mod).not.toBeNull();
|
|
expect(typeof mod.textSync).toBe('function');
|
|
});
|
|
|
|
test('listFigletFonts returns string[] from figlet.fontsSync()', () => {
|
|
const fonts = FigletAdapter.listFigletFonts();
|
|
expect(fonts).toEqual(['Standard', 'Big', 'Slant']);
|
|
});
|
|
|
|
test('listFigletFonts caches between calls', () => {
|
|
FigletAdapter.listFigletFonts();
|
|
FigletAdapter.listFigletFonts();
|
|
const figlet = require('figlet');
|
|
expect(figlet.fontsSync).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test('generateFiglet returns rendered string', () => {
|
|
const out = FigletAdapter.generateFiglet('HELLO', 'Big');
|
|
expect(out).toBe('MOCKED_FIGLET_OUTPUT');
|
|
const figlet = require('figlet');
|
|
expect(figlet.textSync).toHaveBeenCalledWith('HELLO', { font: 'Big' });
|
|
});
|
|
|
|
test('generateFiglet throws AsciiArtFigletError when figlet throws', () => {
|
|
const figlet = require('figlet');
|
|
figlet.textSync.mockImplementationOnce(() => {
|
|
throw new Error('unknown font');
|
|
});
|
|
expect(() => FigletAdapter.generateFiglet('X', 'Nope')).toThrow(
|
|
FigletAdapter.AsciiArtFigletError
|
|
);
|
|
});
|
|
|
|
test('returns null when figlet module fails to load', () => {
|
|
// simulate require failure by reloading after breaking the module cache
|
|
jest.isolateModules(() => {
|
|
jest.doMock('figlet', () => {
|
|
throw new Error('not found');
|
|
});
|
|
const Fresh = require('../../src/main/AsciiArt.figlet-adapter');
|
|
Fresh._resetCache();
|
|
expect(Fresh.loadFiglet()).toBeNull();
|
|
expect(Fresh.listFigletFonts()).toEqual([]);
|
|
expect(() => Fresh.generateFiglet('X', 'Big')).toThrow(Fresh.AsciiArtFigletError);
|
|
});
|
|
});
|
|
});
|