import { describe, it, expect } from 'vitest';
import { TestConductor } from '@ensemble-edge/conductor/testing';
describe('scrape member', () => {
it('should scrape website', async () => {
const conductor = await TestConductor.create({
mocks: {
http: {
responses: {
'https://example.com': {
status: 200,
body: '<html><head><title>Test</title></head><body><h1>Hello</h1></body></html>'
}
}
}
}
});
const result = await conductor.executeMember('scrape', {
url: 'https://example.com'
});
expect(result).toBeSuccessful();
expect(result.output.title).toBe('Test');
expect(result.output.content).toContain('Hello');
});
it('should use CSS selector', async () => {
const conductor = await TestConductor.create({
mocks: {
http: {
responses: {
'https://example.com': {
body: '<html><body><article>Article content</article><aside>Sidebar</aside></body></html>'
}
}
}
}
});
const result = await conductor.executeMember('scrape', {
url: 'https://example.com',
selector: 'article'
});
expect(result.output.content).toContain('Article content');
expect(result.output.content).not.toContain('Sidebar');
});
it('should convert to markdown', async () => {
const conductor = await TestConductor.create({
mocks: {
http: {
responses: {
'https://example.com': {
body: '<html><body><h1>Title</h1><p>Paragraph</p></body></html>'
}
}
}
}
});
const result = await conductor.executeMember('scrape', {
url: 'https://example.com',
convertToMarkdown: true
});
expect(result.output.markdown).toContain('# Title');
expect(result.output.markdown).toContain('Paragraph');
});
});