From 52451a708c462a799cc012b062761178b1c7bed6 Mon Sep 17 00:00:00 2001 From: halorrr Date: Sun, 28 Jan 2024 23:13:07 -0500 Subject: [PATCH] finish insert transaction call --- .../transactions/transaction_calls.rb | 4 +- .../insert_transactions_success.yml | 56 +++++++++++++++++++ .../transactions/transaction_calls_test.rb | 35 ++++++++++++ 3 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 test/cassettes/transactions/insert_transactions_success.yml diff --git a/lib/lunchmoney/transactions/transaction_calls.rb b/lib/lunchmoney/transactions/transaction_calls.rb index 0709cf6..8a254b9 100644 --- a/lib/lunchmoney/transactions/transaction_calls.rb +++ b/lib/lunchmoney/transactions/transaction_calls.rb @@ -91,13 +91,13 @@ def transaction(transaction_id, debit_as_negative: nil) sig do params( - transactions: T::Array[LunchMoney::Transaction], + transactions: T::Array[LunchMoney::UpdateTransaction], apply_rules: T.nilable(T::Boolean), skip_duplicates: T.nilable(T::Boolean), check_for_recurring: T.nilable(T::Boolean), debit_as_negative: T.nilable(T::Boolean), skip_balance_update: T.nilable(T::Boolean), - ).returns(T.any(T::Hash[String, T::Array[Integer]], LunchMoney::Errors)) + ).returns(T.any(T::Hash[Symbol, T::Array[Integer]], LunchMoney::Errors)) end def insert_transactions(transactions, apply_rules: nil, skip_duplicates: nil, check_for_recurring: nil, debit_as_negative: nil, skip_balance_update: nil) diff --git a/test/cassettes/transactions/insert_transactions_success.yml b/test/cassettes/transactions/insert_transactions_success.yml new file mode 100644 index 0000000..72aa720 --- /dev/null +++ b/test/cassettes/transactions/insert_transactions_success.yml @@ -0,0 +1,56 @@ +--- +http_interactions: +- request: + method: post + uri: https://dev.lunchmoney.app/v1/transactions + body: + encoding: UTF-8 + string: '{"transactions":[{"payee":"Gem Remote Testing","date":"2024-01-29","category_id":null,"notes":"Remote + test at 2024-01-29 03:57:08 UTC","amount":"81.09477003457965","tags":null,"currency":null,"asset_id":null,"recurring_id":null,"status":null,"external_id":null}]}' + headers: + User-Agent: + - Faraday v2.9.0 + Authorization: + - Bearer + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - Cowboy + Report-To: + - '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1706500628&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=BwaDYEFMX3SGd4eRqQYCRYQd0OBOPEv%2BzjShM33Q3sw%3D"}]}' + Reporting-Endpoints: + - heroku-nel=https://nel.heroku.com/reports?ts=1706500628&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=BwaDYEFMX3SGd4eRqQYCRYQd0OBOPEv%2BzjShM33Q3sw%3D + Nel: + - '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}' + Connection: + - keep-alive + X-Powered-By: + - Express + Vary: + - Origin, Accept-Encoding + Access-Control-Allow-Credentials: + - 'true' + Content-Type: + - application/json; charset=utf-8 + Content-Length: + - '19' + Etag: + - W/"13-hA+tP0s+l8nctBa62KT1I5/jsZE" + Date: + - Mon, 29 Jan 2024 03:57:08 GMT + Via: + - 1.1 vegur + body: + encoding: UTF-8 + string: '{"ids":[897191731]}' + recorded_at: Mon, 29 Jan 2024 03:57:08 GMT +recorded_with: VCR 6.2.0 diff --git a/test/lunchmoney/transactions/transaction_calls_test.rb b/test/lunchmoney/transactions/transaction_calls_test.rb index 4f06ddb..e2366bd 100644 --- a/test/lunchmoney/transactions/transaction_calls_test.rb +++ b/test/lunchmoney/transactions/transaction_calls_test.rb @@ -64,4 +64,39 @@ class TransactionCallsTest < ActiveSupport::TestCase assert_kind_of(LunchMoney::Error, error) end end + + test "insert_transactions returns a hash containing an array of ids on success response" do + VCR.use_cassette("transactions/insert_transactions_success") do + api_call = LunchMoney::TransactionCalls.new.insert_transactions([random_update_transaction]) + ids = T.cast(api_call, T::Hash[Symbol, T::Array[Integer]])[:ids] + + refute_nil(ids) + + T.unsafe(ids).each do |id| + assert_kind_of(Integer, id) + end + end + end + + test "insert_transactions returns an array of Error objects on error response" do + response = mock_faraday_lunchmoney_error_response + LunchMoney::TransactionCalls.any_instance.stubs(:post).returns(response) + + api_call = LunchMoney::TransactionCalls.new.insert_transactions([random_update_transaction]) + + T.unsafe(api_call).each do |error| + assert_kind_of(LunchMoney::Error, error) + end + end + + private + + sig { returns(LunchMoney::UpdateTransaction) } + def random_update_transaction + date = Time.now.utc.strftime("%F") + amount = rand(0.1..99.9).to_s + payee = "Gem Remote Testing" + notes = "Remote test at #{Time.now.utc}" + LunchMoney::UpdateTransaction.new(date:, amount:, payee:, notes:) + end end