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;