mirror of
https://github.com/we-promise/sure.git
synced 2026-04-07 14:31:25 +00:00
101 lines
2.9 KiB
Ruby
101 lines
2.9 KiB
Ruby
require "test_helper"
|
|
|
|
class ProcessPdfJobTest < ActiveJob::TestCase
|
|
include ActionMailer::TestHelper
|
|
|
|
setup do
|
|
@import = imports(:pdf)
|
|
@family = @import.family
|
|
end
|
|
|
|
test "skips non-PdfImport imports" do
|
|
transaction_import = imports(:transaction)
|
|
|
|
ProcessPdfJob.perform_now(transaction_import)
|
|
|
|
assert_equal "pending", transaction_import.reload.status
|
|
end
|
|
|
|
test "skips if PDF not uploaded" do
|
|
assert_not @import.pdf_uploaded?
|
|
|
|
ProcessPdfJob.perform_now(@import)
|
|
|
|
assert_equal "pending", @import.reload.status
|
|
end
|
|
|
|
test "skips if already processed" do
|
|
processed_import = imports(:pdf_processed)
|
|
|
|
ProcessPdfJob.perform_now(processed_import)
|
|
|
|
# Should not change status since already complete
|
|
assert_equal "complete", processed_import.reload.status
|
|
end
|
|
|
|
test "uploads non-bank PDF to vector store with classified type metadata" do
|
|
pdf_content = attach_pdf!(@import)
|
|
process_result = Struct.new(:document_type).new("financial_document")
|
|
|
|
@import.expects(:process_with_ai).once.returns(process_result)
|
|
@import.stubs(:send_next_steps_email)
|
|
@import.expects(:extract_transactions).never
|
|
|
|
@family.expects(:upload_document).with do |file_content:, filename:, metadata:|
|
|
assert_equal pdf_content, file_content
|
|
assert_equal "sample_bank_statement.pdf", filename
|
|
assert_equal({ "type" => "financial_document" }, metadata)
|
|
true
|
|
end.returns(family_documents(:tax_return))
|
|
|
|
ProcessPdfJob.perform_now(@import)
|
|
|
|
assert_equal "complete", @import.reload.status
|
|
end
|
|
|
|
test "uploads bank statement PDF to vector store with classified type metadata" do
|
|
pdf_content = attach_pdf!(@import)
|
|
process_result = Struct.new(:document_type).new("bank_statement")
|
|
|
|
@import.expects(:process_with_ai).once.returns(process_result)
|
|
@import.expects(:extract_transactions).once do
|
|
@import.update!(
|
|
extracted_data: {
|
|
"transactions" => [
|
|
{
|
|
"date" => "2024-01-01",
|
|
"amount" => "10.00",
|
|
"name" => "Coffee Shop"
|
|
}
|
|
]
|
|
}
|
|
)
|
|
end
|
|
@import.expects(:sync_mappings).once
|
|
@import.stubs(:send_next_steps_email)
|
|
|
|
@family.expects(:upload_document).with do |file_content:, filename:, metadata:|
|
|
assert_equal pdf_content, file_content
|
|
assert_equal "sample_bank_statement.pdf", filename
|
|
assert_equal({ "type" => "bank_statement" }, metadata)
|
|
true
|
|
end.returns(family_documents(:tax_return))
|
|
|
|
ProcessPdfJob.perform_now(@import)
|
|
|
|
assert_equal "complete", @import.reload.status
|
|
end
|
|
|
|
private
|
|
|
|
def attach_pdf!(import)
|
|
pdf_content = file_fixture("imports/sample_bank_statement.pdf").binread
|
|
import.pdf_file.attach(
|
|
io: StringIO.new(pdf_content),
|
|
filename: "sample_bank_statement.pdf",
|
|
content_type: "application/pdf"
|
|
)
|
|
pdf_content
|
|
end
|
|
end
|