Files
sure/test/models/family/auto_categorizer_test.rb
soky srm 1234fd5568 FIX AI categorization & Twelvedata currency (#354)
* FIX AI categorization

* FIX twelve data API

Looking at api docs we were using the wrong field, currency is in meta tag.
2025-11-19 19:30:28 +01:00

44 lines
1.8 KiB
Ruby

require "test_helper"
class Family::AutoCategorizerTest < ActiveSupport::TestCase
include EntriesTestHelper, ProviderTestHelper
setup do
@family = families(:dylan_family)
@account = @family.accounts.create!(name: "Rule test", balance: 100, currency: "USD", accountable: Depository.new)
@llm_provider = mock
Provider::Registry.stubs(:get_provider).with(:openai).returns(@llm_provider)
end
test "auto-categorizes transactions" do
txn1 = create_transaction(account: @account, name: "McDonalds").transaction
txn2 = create_transaction(account: @account, name: "Amazon purchase").transaction
txn3 = create_transaction(account: @account, name: "Netflix subscription").transaction
test_category = @family.categories.create!(name: "Test category")
provider_response = provider_success_response([
AutoCategorization.new(transaction_id: txn1.id, category_name: test_category.name),
AutoCategorization.new(transaction_id: txn2.id, category_name: test_category.name),
AutoCategorization.new(transaction_id: txn3.id, category_name: nil)
])
@llm_provider.expects(:auto_categorize).returns(provider_response).once
assert_difference "DataEnrichment.count", 2 do
Family::AutoCategorizer.new(@family, transaction_ids: [ txn1.id, txn2.id, txn3.id ]).auto_categorize
end
assert_equal test_category, txn1.reload.category
assert_equal test_category, txn2.reload.category
assert_nil txn3.reload.category
# After auto-categorization, only successfully categorized transactions are locked
# txn3 remains enrichable since it didn't get a category (allows retry)
assert_equal 1, @account.transactions.reload.enrichable(:category_id).count
end
private
AutoCategorization = Provider::LlmConcept::AutoCategorization
end