UNPKG

genankjs

Version:

generate anki card

118 lines 3.98 kB
// tests/package.test.ts import { describe, it, expect, beforeEach, vi } from 'vitest'; import { Package } from '../package.js'; import { Deck } from '../deck.js'; import { Note } from '../note.js'; import { Model } from '../model.js'; vi.mock('fs'); describe('Package', () => { let pkg; let deck; let model; let note; beforeEach(() => { pkg = new Package(); model = new Model({ modelId: 123456, name: 'Basic', fields: [{ name: 'Front' }, { name: 'Back' }], templates: [ { name: 'Card 1', qfmt: '{{Front}}', afmt: '{{Back}}', }, ], }); note = new Note({ modelId: 123456, fields: ['Hello', 'World'], }); deck = new Deck({ name: 'Test Deck', }); deck.addNote(note, model); }); describe('constructor', () => { it('should create an empty package', () => { const emptyPkg = new Package(); expect(emptyPkg.decks).toEqual([]); expect(emptyPkg.models).toEqual([]); expect(emptyPkg.media).toEqual([]); }); it('should create a package with media', () => { const media = [ { name: 'image.jpg', data: Buffer.from('fake-image-data'), }, ]; const pkgWithMedia = new Package({ media }); expect(pkgWithMedia.media).toEqual(media); }); }); describe('addDeck', () => { it('should add a deck to the package', () => { pkg.addDeck(deck); expect(pkg.decks).toHaveLength(1); expect(pkg.decks[0]).toBe(deck); }); }); describe('addModel', () => { it('should add a model to the package', () => { pkg.addModel(model); expect(pkg.models).toHaveLength(1); expect(pkg.models[0]).toBe(model); }); }); describe('addMedia', () => { it('should add a media file', () => { const mediaFile = { name: 'test.jpg', data: Buffer.from('test-data'), }; pkg.addMedia(mediaFile); expect(pkg.media).toHaveLength(1); expect(pkg.media[0]).toBe(mediaFile); }); }); describe('addMediaFiles', () => { it('should add multiple media files', () => { const mediaFiles = [ { name: 'image1.jpg', data: Buffer.from('data1') }, { name: 'image2.jpg', data: Buffer.from('data2') }, ]; pkg.addMediaFiles(mediaFiles); expect(pkg.media).toHaveLength(2); }); }); describe('writeToBuffer', () => { it('should create a buffer with package data', async () => { pkg.addDeck(deck); pkg.addModel(model); const buffer = await pkg.writeToBuffer(); expect(buffer).toBeInstanceOf(Buffer); expect(buffer.length).toBeGreaterThan(0); }); it('should handle media files', async () => { pkg.addDeck(deck); pkg.addModel(model); pkg.addMedia({ name: 'test.jpg', data: Buffer.from('image-data'), }); const buffer = await pkg.writeToBuffer(); expect(buffer).toBeInstanceOf(Buffer); }); }); describe('writeToFile', () => { it('should write package to file', async () => { const mockWriteFileSync = vi.mocked(await import('fs')).writeFileSync; pkg.addDeck(deck); pkg.addModel(model); await pkg.writeToFile('test.apkg'); expect(mockWriteFileSync).toHaveBeenCalledWith('test.apkg', expect.any(Buffer)); }); }); }); //# sourceMappingURL=package.test.js.map