mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 20:14:08 +00:00
Mercury integration (#723)
* Initial mercury impl * FIX both mercury and generator class * Finish mercury integration and provider generator * Fix schema * Fix linter and tags * Update routes.rb * Avoid schema drift --------- Signed-off-by: soky srm <sokysrm@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
6
test/fixtures/mercury_accounts.yml
vendored
Normal file
6
test/fixtures/mercury_accounts.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
checking_account:
|
||||
mercury_item: one
|
||||
account_id: "merc_acc_checking_1"
|
||||
name: "Mercury Checking"
|
||||
currency: USD
|
||||
current_balance: 10000.00
|
||||
6
test/fixtures/mercury_items.yml
vendored
Normal file
6
test/fixtures/mercury_items.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
one:
|
||||
family: dylan_family
|
||||
name: "Test Mercury Connection"
|
||||
token: "test_mercury_token_123"
|
||||
base_url: "https://api-sandbox.mercury.com/api/v1"
|
||||
status: good
|
||||
49
test/models/mercury_item_test.rb
Normal file
49
test/models/mercury_item_test.rb
Normal file
@@ -0,0 +1,49 @@
|
||||
require "test_helper"
|
||||
|
||||
class MercuryItemTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@mercury_item = mercury_items(:one)
|
||||
end
|
||||
|
||||
test "fixture is valid" do
|
||||
assert @mercury_item.valid?
|
||||
end
|
||||
|
||||
test "belongs to family" do
|
||||
assert_equal families(:dylan_family), @mercury_item.family
|
||||
end
|
||||
|
||||
test "credentials_configured returns true when token present" do
|
||||
assert @mercury_item.credentials_configured?
|
||||
end
|
||||
|
||||
test "credentials_configured returns false when token blank" do
|
||||
@mercury_item.token = nil
|
||||
assert_not @mercury_item.credentials_configured?
|
||||
end
|
||||
|
||||
test "effective_base_url returns custom url when set" do
|
||||
assert_equal "https://api-sandbox.mercury.com/api/v1", @mercury_item.effective_base_url
|
||||
end
|
||||
|
||||
test "effective_base_url returns default when base_url blank" do
|
||||
@mercury_item.base_url = nil
|
||||
assert_equal "https://api.mercury.com/api/v1", @mercury_item.effective_base_url
|
||||
end
|
||||
|
||||
test "mercury_provider returns Provider::Mercury instance" do
|
||||
provider = @mercury_item.mercury_provider
|
||||
assert_instance_of Provider::Mercury, provider
|
||||
assert_equal @mercury_item.token, provider.token
|
||||
end
|
||||
|
||||
test "mercury_provider returns nil when credentials not configured" do
|
||||
@mercury_item.token = nil
|
||||
assert_nil @mercury_item.mercury_provider
|
||||
end
|
||||
|
||||
test "syncer returns MercuryItem::Syncer instance" do
|
||||
syncer = @mercury_item.send(:syncer)
|
||||
assert_instance_of MercuryItem::Syncer, syncer
|
||||
end
|
||||
end
|
||||
38
test/models/provider/mercury_adapter_test.rb
Normal file
38
test/models/provider/mercury_adapter_test.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
require "test_helper"
|
||||
|
||||
class Provider::MercuryAdapterTest < ActiveSupport::TestCase
|
||||
test "supports Depository accounts" do
|
||||
assert_includes Provider::MercuryAdapter.supported_account_types, "Depository"
|
||||
end
|
||||
|
||||
test "does not support Investment accounts" do
|
||||
assert_not_includes Provider::MercuryAdapter.supported_account_types, "Investment"
|
||||
end
|
||||
|
||||
test "returns connection configs for any family" do
|
||||
# Mercury is a per-family provider - any family can connect
|
||||
family = families(:dylan_family)
|
||||
configs = Provider::MercuryAdapter.connection_configs(family: family)
|
||||
|
||||
assert_equal 1, configs.length
|
||||
assert_equal "mercury", configs.first[:key]
|
||||
assert_equal "Mercury", configs.first[:name]
|
||||
assert configs.first[:can_connect]
|
||||
end
|
||||
|
||||
test "build_provider returns nil when family is nil" do
|
||||
assert_nil Provider::MercuryAdapter.build_provider(family: nil)
|
||||
end
|
||||
|
||||
test "build_provider returns nil when family has no mercury items" do
|
||||
family = families(:empty)
|
||||
assert_nil Provider::MercuryAdapter.build_provider(family: family)
|
||||
end
|
||||
|
||||
test "build_provider returns Mercury provider when credentials configured" do
|
||||
family = families(:dylan_family)
|
||||
provider = Provider::MercuryAdapter.build_provider(family: family)
|
||||
|
||||
assert_instance_of Provider::Mercury, provider
|
||||
end
|
||||
end
|
||||
29
test/models/provider/mercury_test.rb
Normal file
29
test/models/provider/mercury_test.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
require "test_helper"
|
||||
|
||||
class Provider::MercuryTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@provider = Provider::Mercury.new("test_token", base_url: "https://api-sandbox.mercury.com/api/v1")
|
||||
end
|
||||
|
||||
test "initializes with token and default base_url" do
|
||||
provider = Provider::Mercury.new("my_token")
|
||||
assert_equal "my_token", provider.token
|
||||
assert_equal "https://api.mercury.com/api/v1", provider.base_url
|
||||
end
|
||||
|
||||
test "initializes with custom base_url" do
|
||||
assert_equal "test_token", @provider.token
|
||||
assert_equal "https://api-sandbox.mercury.com/api/v1", @provider.base_url
|
||||
end
|
||||
|
||||
test "MercuryError includes error_type" do
|
||||
error = Provider::Mercury::MercuryError.new("Test error", :unauthorized)
|
||||
assert_equal "Test error", error.message
|
||||
assert_equal :unauthorized, error.error_type
|
||||
end
|
||||
|
||||
test "MercuryError defaults error_type to unknown" do
|
||||
error = Provider::Mercury::MercuryError.new("Test error")
|
||||
assert_equal :unknown, error.error_type
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user