## Summary - Fix captain response builder not getting triggered for cases where responses are created as completed. ## Testing Instructions - Test articles with firecrawl - Test articles without firecrawl - Test PDF documents --------- Co-authored-by: Pranav <pranav@chatwoot.com>
65 lines
2.2 KiB
Ruby
65 lines
2.2 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Captain::Tools::FirecrawlParserJob, type: :job do
|
|
describe '#perform' do
|
|
let(:assistant) { create(:captain_assistant) }
|
|
let(:payload) do
|
|
{
|
|
markdown: 'Launch Week I is here! 🚀',
|
|
metadata: {
|
|
'title' => 'Home - Firecrawl',
|
|
'ogTitle' => 'Firecrawl',
|
|
'url' => 'https://www.firecrawl.dev/'
|
|
}
|
|
}
|
|
end
|
|
|
|
it 'creates a new document when one does not exist' do
|
|
expect do
|
|
described_class.perform_now(assistant_id: assistant.id, payload: payload)
|
|
end.to change(assistant.documents, :count).by(1)
|
|
|
|
document = assistant.documents.last
|
|
expect(document).to have_attributes(
|
|
content: payload[:markdown],
|
|
name: payload[:metadata]['title'],
|
|
external_link: 'https://www.firecrawl.dev',
|
|
status: 'available'
|
|
)
|
|
end
|
|
|
|
it 'updates existing document when one exists' do
|
|
existing_document = create(:captain_document,
|
|
assistant: assistant,
|
|
account: assistant.account,
|
|
external_link: 'https://www.firecrawl.dev',
|
|
content: 'old content',
|
|
name: 'old title',
|
|
status: :in_progress)
|
|
|
|
expect do
|
|
described_class.perform_now(assistant_id: assistant.id, payload: payload)
|
|
end.not_to change(assistant.documents, :count)
|
|
|
|
existing_document.reload
|
|
# Payload URL ends with '/', but we persist the canonical URL without it.
|
|
expect(existing_document).to have_attributes(
|
|
external_link: 'https://www.firecrawl.dev',
|
|
content: payload[:markdown],
|
|
name: payload[:metadata]['title'],
|
|
status: 'available'
|
|
)
|
|
end
|
|
|
|
context 'when an error occurs' do
|
|
it 'raises an error with a descriptive message' do
|
|
allow(Captain::Assistant).to receive(:find).and_raise(ActiveRecord::RecordNotFound)
|
|
|
|
expect do
|
|
described_class.perform_now(assistant_id: -1, payload: payload)
|
|
end.to raise_error(/Failed to parse FireCrawl data/)
|
|
end
|
|
end
|
|
end
|
|
end
|