From 191680ce49a2228710f0bfc6f6236e4f5bd0628b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 24 Jun 2018 02:33:57 -0400 Subject: add some tests --- t/lib/WWW/YNAB/MockUA.pm | 565 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 565 insertions(+) create mode 100644 t/lib/WWW/YNAB/MockUA.pm (limited to 't/lib/WWW/YNAB/MockUA.pm') diff --git a/t/lib/WWW/YNAB/MockUA.pm b/t/lib/WWW/YNAB/MockUA.pm new file mode 100644 index 0000000..24519cd --- /dev/null +++ b/t/lib/WWW/YNAB/MockUA.pm @@ -0,0 +1,565 @@ +package WWW::YNAB::MockUA; +use Moose; + +extends 'HTTP::Tiny'; + +our $VERSION = 1; + +our %responses = ( + 'https://api.youneedabudget.com/v1/budgets' => <<'EOF', +{ + "data": { + "budgets": [ + { + "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "name": "My Budget", + "last_modified_on": "2018-06-23T17:04:12+00:00", + "date_format": { + "format": "YYYY-MM-DD" + }, + "currency_format": { + "iso_code": "USD", + "example_format": "123,456.78", + "decimal_digits": 2, + "decimal_separator": ".", + "symbol_first": true, + "group_separator": ",", + "currency_symbol": "$", + "display_symbol": true + }, + "first_month": "2016-06-01", + "last_month": "2018-07-01" + } + ] + } +} +EOF + 'https://api.youneedabudget.com/v1/user' => <<'EOF', +{ + "data": { + "user": { + "id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" + } + } +} +EOF + 'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' => <<'EOF', +{ + "data": { + "budget": { + "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "name": "My Budget", + "last_modified_on": "2018-06-23T17:04:12+00:00", + "date_format": { + "format": "YYYY-MM-DD" + }, + "currency_format": { + "iso_code": "USD", + "example_format": "123,456.78", + "decimal_digits": 2, + "decimal_separator": ".", + "symbol_first": true, + "group_separator": ",", + "currency_symbol": "$", + "display_symbol": true + }, + "first_month": "2018-06-01", + "last_month": "2018-07-01", + "accounts": [ + { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Savings Account", + "type": "savings", + "on_budget": true, + "closed": false, + "note": null, + "balance": 12345670, + "cleared_balance": 12345670, + "uncleared_balance": 0, + "deleted": false + }, + { + "id": "00000000-0000-0000-0000-111111111111", + "name": "Checking Account", + "type": "checking", + "on_budget": true, + "closed": false, + "note": null, + "balance": 2345670, + "cleared_balance": 2345670, + "uncleared_balance": 0, + "deleted": false + }, + { + "id": "00000000-0000-0000-0000-222222222222", + "name": "Credit Card", + "type": "creditCard", + "on_budget": true, + "closed": false, + "note": null, + "balance": -6543210, + "cleared_balance": -5432100, + "uncleared_balance": -1111110, + "deleted": false + } + ], + "payees": [ + { + "id": "11111111-1111-1111-1111-111111111111", + "name": "a restaurant", + "transfer_account_id": null, + "deleted": false + }, + { + "id": "11111111-1111-1111-1111-222222222222", + "name": "the power company", + "transfer_account_id": null, + "deleted": false + }, + { + "id": "11111111-1111-1111-1111-333333333333", + "name": "candy shop", + "transfer_account_id": null, + "deleted": false + } + ], + "payee_locations": [], + "category_groups": [ + { + "id": "22222222-2222-2222-2222-222222222222", + "name": "Home", + "hidden": false, + "deleted": false + }, + { + "id": "22222222-2222-2222-2222-333333333333", + "name": "Food", + "hidden": false, + "deleted": false + } + ], + "categories": [ + { + "id": "33333333-3333-3333-3333-333333333333", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Restaurants", + "hidden": false, + "note": null, + "budgeted": 234560, + "activity": -34560, + "balance": 200000, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-444444444444", + "category_group_id": "22222222-2222-2222-2222-222222222222", + "name": "Utilities", + "hidden": false, + "note": null, + "budgeted": 123450, + "activity": -123450, + "balance": 0, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-555555555555", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Groceries", + "hidden": false, + "note": null, + "budgeted": 345670, + "activity": -123450, + "balance": 222220, + "deleted": false + } + ], + "months": [ + { + "month": "2018-08-01", + "note": null, + "to_be_budgeted": 0, + "age_of_money": 88, + "categories": [ + { + "id": "33333333-3333-3333-3333-444444444444", + "category_group_id": "22222222-2222-2222-2222-222222222222", + "name": "Utilities", + "hidden": false, + "note": null, + "budgeted": 0, + "activity": 0, + "balance": 123450, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-555555555555", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Groceries", + "hidden": false, + "note": null, + "budgeted": 0, + "activity": 0, + "balance": 234560, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-333333333333", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Restaurants", + "hidden": false, + "note": null, + "budgeted": 0, + "activity": 0, + "balance": 567890, + "deleted": false + } + ] + }, + { + "month": "2018-07-01", + "note": null, + "to_be_budgeted": 0, + "age_of_money": 88, + "categories": [ + { + "id": "33333333-3333-3333-3333-444444444444", + "category_group_id": "22222222-2222-2222-2222-222222222222", + "name": "Utilities", + "hidden": false, + "note": null, + "budgeted": 132450, + "activity": 0, + "balance": 132450, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-555555555555", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Groceries", + "hidden": false, + "note": null, + "budgeted": 212130, + "activity": 0, + "balance": 345210, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-333333333333", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Restaurants", + "hidden": false, + "note": null, + "budgeted": 152430, + "activity": 0, + "balance": 215340, + "deleted": false + } + ] + }, + { + "month": "2018-06-01", + "note": null, + "to_be_budgeted": 19279540, + "age_of_money": 88, + "categories": [ + { + "id": "33333333-3333-3333-3333-444444444444", + "category_group_id": "22222222-2222-2222-2222-222222222222", + "name": "Utilities", + "hidden": false, + "note": null, + "budgeted": 98760, + "activity": -98760, + "balance": 0, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-555555555555", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Groceries", + "hidden": false, + "note": null, + "budgeted": 167890, + "activity": -134560, + "balance": 33330, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-333333333333", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Restaurants", + "hidden": false, + "note": null, + "budgeted": 456780, + "activity": -54320, + "balance": 402460, + "deleted": false + } + ] + } + ], + "transactions": [ + { + "id": "44444444-4444-4444-4444-444444444444", + "date": "2018-06-18", + "amount": -98760, + "memo": null, + "cleared": "cleared", + "approved": true, + "flag_color": null, + "account_id": "00000000-0000-0000-0000-111111111111", + "payee_id": "11111111-1111-1111-1111-222222222222", + "category_id": "33333333-3333-3333-3333-444444444444", + "transfer_account_id": null, + "import_id": "YNAB:-98760:2018-06-18:1", + "deleted": false + }, + { + "id": "44444444-4444-4444-4444-555555555555", + "date": "2018-06-17", + "amount": -5000, + "memo": null, + "cleared": "cleared", + "approved": true, + "flag_color": null, + "account_id": "00000000-0000-0000-0000-222222222222", + "payee_id": "11111111-1111-1111-1111-333333333333", + "category_id": "33333333-3333-3333-3333-555555555555", + "transfer_account_id": null, + "import_id": "YNAB:-5000:2018-06-18:1", + "deleted": false + }, + { + "id": "44444444-4444-4444-4444-666666666666", + "date": "2018-06-02", + "amount": -200000, + "memo": null, + "cleared": "cleared", + "approved": true, + "flag_color": null, + "account_id": "00000000-0000-0000-0000-222222222222", + "payee_id": "11111111-1111-1111-1111-111111111111", + "category_id": "33333333-3333-3333-3333-666666666666", + "transfer_account_id": null, + "import_id": "YNAB:-200000:2018-05-31:1", + "deleted": false + } + ], + "subtransactions": [ + { + "id": "55555555-5555-5555-5555-555555555555", + "transaction_id": "44444444-4444-4444-4444-666666666666", + "amount": -100000, + "memo": null, + "payee_id": null, + "category_id": "33333333-3333-3333-3333-444444444444", + "transfer_account_id": null, + "deleted": false + }, + { + "id": "55555555-5555-5555-5555-666666666666", + "transaction_id": "44444444-4444-4444-4444-666666666666", + "amount": -50000, + "memo": null, + "payee_id": null, + "category_id": "33333333-3333-3333-3333-555555555555", + "transfer_account_id": null, + "deleted": false + }, + { + "id": "55555555-5555-5555-5555-777777777777", + "transaction_id": "44444444-4444-4444-4444-666666666666", + "amount": -50000, + "memo": null, + "payee_id": null, + "category_id": "33333333-3333-3333-3333-333333333333", + "transfer_account_id": null, + "deleted": false + } + ], + "scheduled_transactions": [], + "scheduled_subtransactions": [] + }, + "server_knowledge": 1 + } +} +EOF + 'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accounts/00000000-0000-0000-0000-222222222222' => <<'EOF', +{ + "data": { + "account": { + "id": "00000000-0000-0000-0000-222222222222", + "name": "Credit Card", + "type": "creditCard", + "on_budget": true, + "closed": false, + "note": null, + "balance": -6543210, + "cleared_balance": -5432100, + "uncleared_balance": -1111110, + "deleted": false + } + } +} +EOF + 'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/categories/33333333-3333-3333-3333-333333333333' => <<'EOF', +{ + "data": { + "category": { + "id": "33333333-3333-3333-3333-333333333333", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Restaurants", + "hidden": false, + "note": null, + "budgeted": 234560, + "activity": -34560, + "balance": 200000, + "deleted": false + } + } +} +EOF + 'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/payees/11111111-1111-1111-1111-333333333333' => <<'EOF', +{ + "data": { + "payee": { + "id": "11111111-1111-1111-1111-333333333333", + "name": "candy shop", + "transfer_account_id": null, + "deleted": false + } + } +} +EOF + 'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/months/2018-07-01' => <<'EOF', +{ + "data": { + "month": { + "month": "2018-07-01", + "note": null, + "to_be_budgeted": 0, + "age_of_money": 88, + "categories": [ + { + "id": "33333333-3333-3333-3333-555555555555", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Groceries", + "hidden": false, + "note": null, + "budgeted": 345670, + "activity": -123450, + "balance": 222220, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-333333333333", + "category_group_id": "22222222-2222-2222-2222-333333333333", + "name": "Restaurants", + "hidden": false, + "note": null, + "budgeted": 234560, + "activity": -34560, + "balance": 200000, + "deleted": false + }, + { + "id": "33333333-3333-3333-3333-444444444444", + "category_group_id": "22222222-2222-2222-2222-222222222222", + "name": "Utilities", + "hidden": false, + "note": null, + "budgeted": 123450, + "activity": -123450, + "balance": 0, + "deleted": false + } + ] + } + } +} +EOF + 'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/transactions/44444444-4444-4444-4444-666666666666' => <<'EOF', +{ + "data": { + "transaction": { + "id": "44444444-4444-4444-4444-666666666666", + "date": "2018-06-02", + "amount": -200000, + "memo": null, + "cleared": "cleared", + "approved": true, + "flag_color": null, + "account_id": "00000000-0000-0000-0000-222222222222", + "account_name": "Credit Card", + "payee_id": "11111111-1111-1111-1111-111111111111", + "payee_name": "a restaurant", + "category_id": "33333333-3333-3333-3333-666666666666", + "category_name": "Split (Multiple Categories)...", + "transfer_account_id": null, + "import_id": "YNAB:-200000:2018-05-31:1", + "deleted": false, + "subtransactions": [ + { + "id": "55555555-5555-5555-5555-555555555555", + "transaction_id": "44444444-4444-4444-4444-666666666666", + "amount": -100000, + "memo": null, + "payee_id": null, + "category_id": "33333333-3333-3333-3333-444444444444", + "transfer_account_id": null, + "deleted": false + }, + { + "id": "55555555-5555-5555-5555-666666666666", + "transaction_id": "44444444-4444-4444-4444-666666666666", + "amount": -50000, + "memo": null, + "payee_id": null, + "category_id": "33333333-3333-3333-3333-555555555555", + "transfer_account_id": null, + "deleted": false + }, + { + "id": "55555555-5555-5555-5555-777777777777", + "transaction_id": "44444444-4444-4444-4444-666666666666", + "amount": -50000, + "memo": null, + "payee_id": null, + "category_id": "33333333-3333-3333-3333-333333333333", + "transfer_account_id": null, + "deleted": false + } + ] + } + } +} +EOF +); + +sub get { + my $self = shift; + my ($uri, $params) = @_; + + $self->{__www_ynab_test_requests} ||= []; + push @{ $self->{__www_ynab_test_requests} }, [$uri, $params]; + + my $count = @{ $self->{__www_ynab_test_requests} }; + + return { + content => "$responses{$uri}", + headers => { + 'x-rate-limit' => "$count/200", + }, + success => 1, + } +} + +sub test_requests { + my $self = shift; + + @{ $self->{__www_ynab_test_requests} || [] } +} + +no Moose; + +1; -- cgit v1.2.3-54-g00ecf