diff --git a/spec/services/import/single.spec.ts b/spec/services/import/single.spec.ts deleted file mode 100644 index 07f3e1d27..000000000 --- a/spec/services/import/single.spec.ts +++ /dev/null @@ -1,216 +0,0 @@ -import 'jasmine'; -import importSingle from '../../../src/services/import/single.js'; -import importUtils from '../../../src/services/import/utils.js'; -import BNote from '../../../src/becca/entities/bnote.js'; -import TaskContext from '../../../src/services/task_context.js'; -import sql from '../../../src/services/sql.js'; -import cls from '../../../src/services/cls.js'; - -describe('HTML Import', () => { - let parentNote: BNote; - let taskContext: TaskContext; - - beforeAll(() => { - // Set up in-memory database for testing - process.env.TRILIUM_INTEGRATION_TEST = 'memory'; - }); - - beforeEach(() => { - return cls.init(() => { - return sql.transactional(() => { - // Create required tables - sql.execute(` - CREATE TABLE IF NOT EXISTS notes ( - noteId TEXT PRIMARY KEY, - title TEXT, - type TEXT, - mime TEXT, - isProtected INTEGER DEFAULT 0, - isDeleted INTEGER DEFAULT 0 - ) - `); - - sql.execute(` - CREATE TABLE IF NOT EXISTS note_contents ( - noteId TEXT PRIMARY KEY, - content TEXT, - hash TEXT, - utcDateModified TEXT - ) - `); - - sql.execute(` - CREATE TABLE IF NOT EXISTS entity_changes ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - entityName TEXT NOT NULL, - entityId TEXT NOT NULL, - hash TEXT NOT NULL, - isErased INTEGER NOT NULL, - isSynced INTEGER NOT NULL, - utcDateChanged TEXT NOT NULL, - changeId TEXT NOT NULL, - componentId TEXT, - instanceId TEXT - ) - `); - - // Create a mock parent note - parentNote = new BNote({ - noteId: 'testParent', - title: 'Test Parent', - type: 'text', - mime: 'text/html' - }); - - // Create a mock task context - taskContext = new TaskContext('test', 'test'); - // Set textImportedAsText to true to ensure HTML imports are processed - taskContext.data = { textImportedAsText: true }; - - // Insert parent note - sql.insert('notes', { - noteId: parentNote.noteId, - title: parentNote.title, - type: parentNote.type, - mime: parentNote.mime, - isProtected: 0, - isDeleted: 0 - }); - }); - }); - }); - - describe('extractHtmlTitle', () => { - it('should extract title from HTML content', () => { - const html = ` - - - Test Title - - -

Content

- - - `; - - const title = importUtils.extractHtmlTitle(html); - expect(title).toBe('Test Title'); - }); - - it('should return null if no title tag is present', () => { - const html = ` - - - - -

Content

- - - `; - - const title = importUtils.extractHtmlTitle(html); - expect(title).toBeNull(); - }); - }); - - describe('importSingleFile with HTML', () => { - it('should import HTML file with title from title tag', () => { - return cls.init(() => { - return sql.transactional(() => { - const file = { - originalname: 'test.html', - mimetype: 'text/html', - buffer: Buffer.from(` - - - HTML Title - - -

Test content

- - - `) - }; - - const note = importSingle.importSingleFile(taskContext, file, parentNote); - expect(note.title).toBe('HTML Title'); - expect(note.mime).toBe('text/html'); - }); - }); - }); - - it('should import HTML file with title from h1 when no title tag', () => { - return cls.init(() => { - return sql.transactional(() => { - const file = { - originalname: 'test.html', - mimetype: 'text/html', - buffer: Buffer.from(` - - -

Heading Title

-

Test content

- - - `) - }; - - const note = importSingle.importSingleFile(taskContext, file, parentNote); - expect(note.title).toBe('Heading Title'); - expect(note.mime).toBe('text/html'); - }); - }); - }); - - it('should import HTML file with filename as title when no title or h1', () => { - return cls.init(() => { - return sql.transactional(() => { - const file = { - originalname: 'test-document.html', - mimetype: 'text/html', - buffer: Buffer.from(` - - -

Test content without title

- - - `) - }; - - const note = importSingle.importSingleFile(taskContext, file, parentNote); - expect(note.title).toBe('test-document'); - expect(note.mime).toBe('text/html'); - }); - }); - }); - - it('should sanitize HTML content during import', () => { - return cls.init(() => { - return sql.transactional(() => { - const file = { - originalname: 'test.html', - mimetype: 'text/html', - buffer: Buffer.from(` - - - Test Title - - - -

Safe content

- - - - `) - }; - - const note = importSingle.importSingleFile(taskContext, file, parentNote); - expect(note.title).toBe('Test Title'); - const content = note.getContent(); - expect(content).not.toContain('