summaryrefslogblamecommitdiffstats
path: root/t/lib/WWW/YNAB/MockUA.pm
blob: 1827111e50868ab64b75c61e09dfcff625a48d3b (plain) (tree)


























































































































































































































































































































































































                                                                                                





































                                                                             


























































































































































                                                                                                                                                  












































                                                                                                                                                            




























                                                                 
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": [
        {
          "id": "66666666-6666-6666-6666-666666666666",
          "date_first": "2018-06-05",
          "date_next": "2018-07-05",
          "frequency": "monthly",
          "amount": -100000,
          "memo": "cable",
          "flag_color": "purple",
          "account_id": "00000000-0000-0000-0000-111111111111",
          "payee_id": null,
          "category_id": "33333333-3333-3333-3333-666666666666",
          "transfer_account_id": null,
          "deleted": false
        }
      ],
      "scheduled_subtransactions": [
        {
          "id": "77777777-7777-7777-7777-777777777777",
          "scheduled_transaction_id": "66666666-6666-6666-6666-666666666666",
          "amount": -50000,
          "memo": "tv",
          "payee_id": null,
          "category_id": "33333333-3333-3333-3333-444444444444",
          "transfer_account_id": null,
          "deleted": false
        },
        {
          "id": "77777777-7777-7777-7777-888888888888",
          "scheduled_transaction_id": "66666666-6666-6666-6666-666666666666",
          "amount": -50000,
          "memo": "internet",
          "payee_id": null,
          "category_id": "33333333-3333-3333-3333-444444444444",
          "transfer_account_id": null,
          "deleted": false
        }
      ]
    },
    "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
    'https://api.youneedabudget.com/v1/budgets/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/scheduled_transactions/66666666-6666-6666-6666-666666666666' => <<'EOF',
{
  "data": {
    "scheduled_transaction": {
      "id": "66666666-6666-6666-6666-666666666666",
      "date_first": "2018-06-05",
      "date_next": "2018-07-05",
      "frequency": "monthly",
      "amount": -100000,
      "memo": "cable",
      "flag_color": "purple",
      "account_id": "00000000-0000-0000-0000-111111111111",
      "account_name": "Checking Account",
      "payee_id": null,
      "payee_name": null,
      "category_id": "33333333-3333-3333-3333-666666666666",
      "category_name": "Split (Multiple Categories)...",
      "transfer_account_id": null,
      "deleted": false,
      "subtransactions": [
        {
          "id": "77777777-7777-7777-7777-777777777777",
          "scheduled_transaction_id": "66666666-6666-6666-6666-666666666666",
          "amount": -50000,
          "memo": "tv",
          "payee_id": null,
          "category_id": "33333333-3333-3333-3333-444444444444",
          "transfer_account_id": null,
          "deleted": false
        },
        {
          "id": "77777777-7777-7777-7777-888888888888",
          "scheduled_transaction_id": "66666666-6666-6666-6666-666666666666",
          "amount": -50000,
          "memo": "internet",
          "payee_id": null,
          "category_id": "33333333-3333-3333-3333-444444444444",
          "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;