mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-24 15:49:39 +02:00
138 lines
4.3 KiB
Ruby
138 lines
4.3 KiB
Ruby
require "test_helper"
|
|
|
|
class PlaidItem::AccountsSnapshotTest < ActiveSupport::TestCase
|
|
setup do
|
|
@plaid_item = plaid_items(:one)
|
|
@plaid_item.plaid_accounts.destroy_all # Clean slate
|
|
|
|
@plaid_provider = mock
|
|
@snapshot = PlaidItem::AccountsSnapshot.new(@plaid_item, plaid_provider: @plaid_provider)
|
|
end
|
|
|
|
test "fetches accounts" do
|
|
@plaid_provider.expects(:get_item_accounts).with(@plaid_item.access_token).returns(
|
|
OpenStruct.new(accounts: [])
|
|
)
|
|
@snapshot.accounts
|
|
end
|
|
|
|
test "fetches transactions data if item supports transactions and any accounts present" do
|
|
@plaid_item.update!(available_products: [ "transactions" ], billed_products: [])
|
|
|
|
@snapshot.expects(:accounts).returns([
|
|
OpenStruct.new(
|
|
account_id: "123",
|
|
type: "depository"
|
|
)
|
|
]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).with(@plaid_item.access_token, next_cursor: nil).returns(
|
|
OpenStruct.new(
|
|
added: [],
|
|
modified: [],
|
|
removed: [],
|
|
cursor: "test_cursor_1"
|
|
)
|
|
).once
|
|
@plaid_provider.expects(:get_item_investments).never
|
|
@plaid_provider.expects(:get_item_liabilities).never
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
|
|
test "does not fetch transactions if no accounts" do
|
|
@plaid_item.update!(available_products: [ "transactions" ], billed_products: [])
|
|
|
|
@snapshot.expects(:accounts).returns([]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).never
|
|
@plaid_provider.expects(:get_item_investments).never
|
|
@plaid_provider.expects(:get_item_liabilities).never
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
|
|
test "updates next_cursor when fetching transactions" do
|
|
@plaid_item.update!(available_products: [ "transactions" ], billed_products: [], next_cursor: "test_cursor_1")
|
|
|
|
@snapshot.expects(:accounts).returns([
|
|
OpenStruct.new(
|
|
account_id: "123",
|
|
type: "depository"
|
|
)
|
|
]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).with(@plaid_item.access_token, next_cursor: "test_cursor_1").returns(
|
|
OpenStruct.new(
|
|
added: [],
|
|
modified: [],
|
|
removed: [],
|
|
cursor: "test_cursor_2"
|
|
)
|
|
).once
|
|
|
|
@plaid_provider.expects(:get_item_investments).never
|
|
@plaid_provider.expects(:get_item_liabilities).never
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
|
|
test "fetches investments data if item supports investments and investment accounts present" do
|
|
@plaid_item.update!(available_products: [ "investments" ], billed_products: [])
|
|
|
|
@snapshot.expects(:accounts).returns([
|
|
OpenStruct.new(
|
|
account_id: "123",
|
|
type: "investment"
|
|
)
|
|
]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).never
|
|
@plaid_provider.expects(:get_item_investments).with(@plaid_item.access_token).once
|
|
@plaid_provider.expects(:get_item_liabilities).never
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
|
|
test "does not fetch investments if no investment accounts" do
|
|
@plaid_item.update!(available_products: [ "investments" ], billed_products: [])
|
|
|
|
@snapshot.expects(:accounts).returns([]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).never
|
|
@plaid_provider.expects(:get_item_investments).never
|
|
@plaid_provider.expects(:get_item_liabilities).never
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
|
|
test "fetches liabilities data if item supports liabilities and liabilities accounts present" do
|
|
@plaid_item.update!(available_products: [ "liabilities" ], billed_products: [])
|
|
|
|
@snapshot.expects(:accounts).returns([
|
|
OpenStruct.new(
|
|
account_id: "123",
|
|
type: "loan",
|
|
subtype: "student"
|
|
)
|
|
]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).never
|
|
@plaid_provider.expects(:get_item_investments).never
|
|
@plaid_provider.expects(:get_item_liabilities).with(@plaid_item.access_token).once
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
|
|
test "does not fetch liabilities if no liabilities accounts" do
|
|
@plaid_item.update!(available_products: [ "liabilities" ], billed_products: [])
|
|
|
|
@snapshot.expects(:accounts).returns([]).at_least_once
|
|
|
|
@plaid_provider.expects(:get_transactions).never
|
|
@plaid_provider.expects(:get_item_investments).never
|
|
@plaid_provider.expects(:get_item_liabilities).never
|
|
|
|
@snapshot.get_account_data("123")
|
|
end
|
|
end
|