import { describe, it, expect, beforeEach } from 'vitest';
import { ContextExtractor } from '../src/lib/extractor';
describe('ContextExtractor', () => {
let extractor: ContextExtractor;
beforeEach(() => {
extractor = new ContextExtractor();
});
it('extracts nothing for unknown platforms', () => {
expect(extractor.extract('unknown')).toBe('');
});
it('extracts ChatGPT conversation turns', () => {
document.body.innerHTML = `
Hello AI
Hi there!
`;
const result = extractor.extract('chatgpt');
expect(result).toContain('[user]: Hello AI');
expect(result).toContain('[assistant]: Hi there!');
});
it('falls back to article elements for ChatGPT', () => {
document.body.innerHTML = `
First messageSecond message
`;
const result = extractor.extract('chatgpt');
expect(result).toContain('[user]: First message');
expect(result).toContain('[assistant]: Second message');
});
it('extracts Claude messages', () => {
document.body.innerHTML = `
How do I refactor this?
Here is a suggestion...
`;
const result = extractor.extract('claude');
expect(result).toContain('[human]: How do I refactor this?');
expect(result).toContain('[assistant]: Here is a suggestion...');
});
it('extracts Cursor chat', () => {
document.body.innerHTML = `
Fix this bug
The issue is...
`;
const result = extractor.extract('cursor');
expect(result).toContain('[user]: Fix this bug');
expect(result).toContain('[assistant]: The issue is...');
});
it('removes buttons and timestamps from content', () => {
document.body.innerHTML = `
Some code
2:30 PM
`;
const result = extractor.extract('chatgpt');
expect(result).toContain('Some code');
expect(result).not.toContain('Copy');
expect(result).not.toContain('2:30 PM');
});
it('returns empty string when no elements found', () => {
document.body.innerHTML = '
Empty page
';
expect(extractor.extract('chatgpt')).toBe('');
});
it('skips very short text', () => {
document.body.innerHTML = `
Hi
`;
const result = extractor.extract('chatgpt');
expect(result).toBe('');
});
});