BEGIN {
  use Test::Most;
  eval "use Catalyst 5.90090; 1" || do {
    plan skip_all => "Need a newer version of Catalyst => $@";
  };
}

use Test::Lib;
use HTTP::Request::Common;
use Catalyst::Test 'Example';

{
  ok my $data = qq[
    {
      "person":{
        "username": "jjn",
        "first_name": "john",
        "last_name": "napiorkowski",
        "profile": {
          "id": 1,
          "address": "1351 Miliary Road",
          "city": "Little Falls",
          "state_id": 7,
          "zip": "42342",
          "phone_number": 6328641827,
          "birthday": "2222-01-01",
          "registered": false        
        },
        "person_roles": [
          { "role_id": 1 },
          { "role_id": 2 }
        ],
        "credit_cards": [
          { "id":100, "card_number": 111222333444, "expiration": "2222-02-02" },
          { "id":200, "card_number": 888888888888, "expiration": "3333-02-02" },
          { "id":300, "card_number": 333344445555, "expiration": "4444-02-02" }
        ]
      }
    }
  ];

  ok my $res = request POST '/account/json',
    Content_Type => 'application/json',
    Content => $data;
  ok my $data =  eval $res->content; 

  is_deeply $data, +{
    'person_roles' => [
                        {
                          'role_id' => 1
                        },
                        {
                          'role_id' => 2
                        }
                      ],
    'profile' => {
                   'address' => '1351 Miliary Road',
                   'birthday' => '2222-01-01',
                   'id' => 1,
                   'state_id' => 7,
                   'phone_number' => 6328641827,
                   'registered' => 0,
                   'zip' => '42342',
                   'city' => 'Little Falls'
                 },
    'credit_cards' => [
                        {
                          'card_number' => '111222333444',
                          'expiration' => '2222-02-02',
                          'id' => 100
                        },
                        {
                          'id' => 200,
                          'card_number' => '888888888888',
                          'expiration' => '3333-02-02'
                        },
                        {
                          'id' => 300,
                          'card_number' => '333344445555',
                          'expiration' => '4444-02-02'
                        }
                      ],
    'first_name' => 'john',
    'username' => 'jjn',
    'last_name' => 'napiorkowski' 
  };
}

{
  ok my $data = qq[
    {
      "info":{
        "username": "jjn",
        "first_name": "john",
        "last_name": "napiorkowski"
      }
    }
  ];

  ok my $res = request POST '/account/jsonquery?page=10;offset=100;search=nope',
    Content_Type => 'application/json',
    Content => $data;

  ok my $data = eval $res->content;
  
  is_deeply $data, +{
    get => {
      offset => 100,
      page => 10,
      search => "nope",
    },
    post => {
      first_name => "john",
      last_name => "napiorkowski",
      username => "jjn",
    },
  };
}

{
  ok my $data = qq[
    {
      "info":{
        "username": "jjn",
      }
  ];

  ok my $res = request POST '/account/jsonquery?page=10;offset=100;search=nope',
    Content_Type => 'application/json',
    Content => $data;

  is $res->code, 400;
}

done_testing;