mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
Breaks our Plaid sync process out into more manageable classes. Notably, this moves the sync process to a distinct, 2-step flow: 1. Import stage - we first make API calls and import Plaid data to "mirror" tables 2. Processing stage - read the raw data, apply business rules, build internal domain models and sync balances This provides several benefits: - Plaid syncs can now be "replayed" without fetching API data again - Mirror tables provide better audit and debugging capabilities - Eliminates the "all or nothing" sync behavior that is currently in place, which is brittle
23 lines
913 B
Ruby
23 lines
913 B
Ruby
require "test_helper"
|
|
require "ostruct"
|
|
|
|
class PlaidItem::ImporterTest < ActiveSupport::TestCase
|
|
setup do
|
|
@mock_provider = PlaidMock.new
|
|
@plaid_item = plaid_items(:one)
|
|
@importer = PlaidItem::Importer.new(@plaid_item, plaid_provider: @mock_provider)
|
|
end
|
|
|
|
test "imports item metadata" do
|
|
PlaidAccount::Importer.any_instance.expects(:import).times(PlaidMock::ACCOUNTS.count)
|
|
|
|
PlaidItem::Importer.new(@plaid_item, plaid_provider: @mock_provider).import
|
|
|
|
assert_equal PlaidMock::ITEM.institution_id, @plaid_item.institution_id
|
|
assert_equal PlaidMock::ITEM.available_products, @plaid_item.available_products
|
|
assert_equal PlaidMock::ITEM.billed_products, @plaid_item.billed_products
|
|
|
|
assert_equal PlaidMock::ITEM.item_id, @plaid_item.raw_payload["item_id"]
|
|
assert_equal PlaidMock::INSTITUTION.institution_id, @plaid_item.raw_institution_payload["institution_id"]
|
|
end
|
|
end
|