diff --git a/lib/lunchmoney/api.rb b/lib/lunchmoney/api.rb index 1a5bd4a..c62de42 100644 --- a/lib/lunchmoney/api.rb +++ b/lib/lunchmoney/api.rb @@ -208,6 +208,16 @@ def budget_calls # @example [Get All Assets](https://lunchmoney.dev/#get-all-assets) # api = LunchMoney::Api.new # api.assets + # @example [Create Asset](https://lunchmoney.dev/#create-asset) + # api = LunchMoney::Api.new + # api.create_asset( + # type_name: "cash", + # name: "Create Asset Test", + # balance: "10.00", + # ) + # @example [Update Asset](https://lunchmoney.dev/#update-asset) + # api = LunchMoney::Api.new + # api.update_asset(93746, balance: "99.99") sig { returns(LunchMoney::Calls::Base) } def asset_calls with_valid_api_key do diff --git a/lib/lunchmoney/objects/asset.rb b/lib/lunchmoney/objects/asset.rb index a92f0c3..d427df6 100644 --- a/lib/lunchmoney/objects/asset.rb +++ b/lib/lunchmoney/objects/asset.rb @@ -35,6 +35,7 @@ class Asset < LunchMoney::Objects::Object "employee compensation", "other liability", "other asset", + "depository", ], T::Array[String], ) diff --git a/test/cassettes/assets/create_asset_success.yml b/test/cassettes/assets/create_asset_success.yml new file mode 100644 index 0000000..058043e --- /dev/null +++ b/test/cassettes/assets/create_asset_success.yml @@ -0,0 +1,56 @@ +--- +http_interactions: +- request: + method: post + uri: https://dev.lunchmoney.app/v1/assets + body: + encoding: UTF-8 + string: '{"type_name":"cash","name":"Create Asset Test","balance":"10.00","subtype_name":null,"display_name":null,"balance_as_of":null,"currency":null,"institution_name":null,"closed_on":null,"exclude_transactions":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=1706814815&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=f2BBwMeu8dp7BaA7%2FBuW9Cgi3dQPUrRm%2FMwVhpkABdw%3D"}]}' + Reporting-Endpoints: + - heroku-nel=https://nel.heroku.com/reports?ts=1706814815&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=f2BBwMeu8dp7BaA7%2FBuW9Cgi3dQPUrRm%2FMwVhpkABdw%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: + - '294' + Etag: + - W/"126-Hkpdff51Y9fahx2W5K2OnmlxQfs" + Date: + - Thu, 01 Feb 2024 19:13:35 GMT + Via: + - 1.1 vegur + body: + encoding: UTF-8 + string: '{"id":93746,"type_name":"depository","subtype_name":null,"name":"Create + Asset Test","display_name":null,"balance":"10.0000","balance_as_of":"2024-02-01T19:13:35.714Z","closed_on":null,"created_at":"2024-02-01T19:13:35.715Z","currency":"cad","institution_name":null,"exclude_transactions":false}' + recorded_at: Thu, 01 Feb 2024 19:13:35 GMT +recorded_with: VCR 6.2.0 diff --git a/test/cassettes/assets/update_asset_success.yml b/test/cassettes/assets/update_asset_success.yml new file mode 100644 index 0000000..ef8356f --- /dev/null +++ b/test/cassettes/assets/update_asset_success.yml @@ -0,0 +1,56 @@ +--- +http_interactions: +- request: + method: put + uri: https://dev.lunchmoney.app/v1/assets/93746 + body: + encoding: UTF-8 + string: '{"type_name":null,"name":null,"balance":"99.99","subtype_name":null,"display_name":null,"balance_as_of":null,"currency":null,"institution_name":null,"closed_on":null,"exclude_transactions":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=1706815145&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=UKWGfVf7ep58%2FB6nXlsfIWhvtQ0agOCk4Cjw26OXPM8%3D"}]}' + Reporting-Endpoints: + - heroku-nel=https://nel.heroku.com/reports?ts=1706815145&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=UKWGfVf7ep58%2FB6nXlsfIWhvtQ0agOCk4Cjw26OXPM8%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: + - '288' + Etag: + - W/"120-WsKdH6hsY8FVR5eES+WXWiMZRb0" + Date: + - Thu, 01 Feb 2024 19:19:05 GMT + Via: + - 1.1 vegur + body: + encoding: UTF-8 + string: '{"id":93746,"type_name":"cash","subtype_name":null,"name":"Create Asset + Test","display_name":null,"balance":"99.9900","balance_as_of":"2024-02-01T19:19:05.771Z","closed_on":null,"currency":"cad","institution_name":null,"exclude_transactions":false,"created_at":"2024-02-01T19:13:35.715Z"}' + recorded_at: Thu, 01 Feb 2024 19:19:05 GMT +recorded_with: VCR 6.2.0 diff --git a/test/lunchmoney/calls/assets_test.rb b/test/lunchmoney/calls/assets_test.rb index d862ae2..584877b 100644 --- a/test/lunchmoney/calls/assets_test.rb +++ b/test/lunchmoney/calls/assets_test.rb @@ -29,6 +29,48 @@ class AssetsTest < ActiveSupport::TestCase assert_kind_of(LunchMoney::Errors, api_call) end + + test "create_asset returns an Asset object on success response" do + VCR.use_cassette("assets/create_asset_success") do + api_call = LunchMoney::Calls::Assets.new.create_asset( + type_name: "cash", + name: "Create Asset Test", + balance: "10.00", + ) + + assert_kind_of(LunchMoney::Objects::Asset, api_call) + end + end + + test "create_asset returns an array of Error objects on error response" do + response = mock_faraday_lunchmoney_error_response + LunchMoney::Calls::Assets.any_instance.stubs(:post).returns(response) + + api_call = LunchMoney::Calls::Assets.new.create_asset( + type_name: "cash", + name: "Create Asset Test", + balance: "10.00", + ) + + assert_kind_of(LunchMoney::Errors, api_call) + end + + test "update_asset returns an Asset object on success response" do + VCR.use_cassette("assets/update_asset_success") do + api_call = LunchMoney::Calls::Assets.new.update_asset(93746, balance: "99.99") + + assert_kind_of(LunchMoney::Objects::Asset, api_call) + end + end + + test "update_asset returns an array of Error objects on error response" do + response = mock_faraday_lunchmoney_error_response + LunchMoney::Calls::Assets.any_instance.stubs(:put).returns(response) + + api_call = LunchMoney::Calls::Assets.new.update_asset(93746, balance: "99.99") + + assert_kind_of(LunchMoney::Errors, api_call) + end end end end