Catalyst-TraitFor-Request-StructuredParameters

 view release on metacpan or  search on metacpan

t/plugin.t  view on Meta::CPAN

  #  'person.person_roles[].role_id' => '3',
  #  'person.person_roles[].role_id' => '4',

  sub select :Local {
    my ($self, $c) = @_;
    my %clean = $c->structured_body(['person'], +{ 'person_roles' => [ 'role_id' ] } )->to_hash;
    my $dumped = Dumper(\%clean);
    $c->res->body($dumped);
  }

  # 'person.roles[].id[]' => '',
  # 'person.roles[].id[]' => '1',
  # 'person.roles[].id[]' => '2',

  sub select3 :Local {
    my ($self, $c) = @_;
    my %clean = $c->structured_body(['person'], +{ 'roles' => [ 'id', '_nop' ] }  )->to_hash;
    my $dumped = Dumper(\%clean);
    $c->res->body($dumped);
  }

  sub select2 :Local {
    my ($self, $c) = @_;
    my %clean = $c->structured_body(['person'], +{ 'person_roles' => [ 'role' => ['id'] ] } )->to_hash;
    my $dumped = Dumper(\%clean);
    $c->res->body($dumped);
  }

  # 'person.role_ids[]' => 1,
  # 'person.role_ids[]' => 2,
  # 'person.role_ids[]' => 3,

  # {
  #   role_ids => [1,2,3],
  # }
  #     
  sub array :Local {
    my ($self, $c) = @_;
    my %clean = $c->structured_body(['person'], +{ 'person_roles' => [ 'role' => ['id'] ] } )->to_hash;
    my $dumped = Dumper(\%clean);
    $c->res->body($dumped);
  }

  sub end :Action {
    my ($self, $c) = @_;
    if($c->has_errors) {
      $c->res->body($c->last_error);
      $c->clear_errors;
    }
  }

  $INC{'MyApp/Controller/Root.pm'} = __FILE__;

  package MyApp;
  use Catalyst 'StructuredParameters';
  
  MyApp->request_class_traits(['TestTrait']);
  MyApp->setup;
}

use HTTP::Request::Common;
use Catalyst::Test 'MyApp';


{
  ok my $res = request GET '/root/query?username=jjn&name.first=john&name.last=napiorkowski';
  ok my $data = eval $res->content;
  is_deeply $data, +{
    username => 'jjn',
    name => +{
      first => 'john',
      last => 'napiorkowski',
    },
  }
}

{
  ok my $res = request GET '/root/query?name.first=john&name.last=napiorkowski';
  is $res->content, "Required parameter 'username' is missing.";
}

{
  ok my $body_parameters = [
    'person.name' => 2,
    'person.name' => 'John', # flatten array should jsut pick the last one
    'person.age' => '52',
    'person.address.street.number' => '15604',
    'person.address.street.name' => 'Harry Lind Road',
    'person.address.street.memo[0]' => 'test1',
    'person.address.street.memo[1]' => 'test2',
    'person.address.zip' => '78621',
    'person.email[0]' => 'jjn1056@gmail.com',
    'person.email[1]' => 'jjn1056@yahoo.com',
    'person.email' => 'jjn1056@example.com',
    'person.credit_cards[0].number' => '245345345345345',
    'person.credit_cards[0].exp' => '2024-01-01',
    'person.credit_cards[1].number' => '666677777888878',
    'person.credit_cards[1].exp' => '2024-01-01',
    'person.credit_cards[1].detail[0].one' => '1one',
    'person.credit_cards[1].detail[0].two' => '1two',
    'person.credit_cards[1].detail[1].one' => '2one',
    'person.credit_cards[1].detail[1].two' => '2two',
    'person.credit_cards[1].detail[1].three' => '2three',
    'person.credit_cards[2].number' => '88888888888',
    'person.credit_cards[2].exp.year' => '3024',
    'person.credit_cards[2].exp.month' => '12',
    'person.credit_cards[2].exp.day' => '1',
    'person.credit_cards[2].note[0]' => '1',
    'person.credit_cards[2].note[1]' => '2',
    'person.credit_cards[2].note[2]' => '3',
    'person.credit_cards[2].note[]' => '4',
    'person.credit_cards[2].note[]' => '5',
    'person.credit_cards[].number' => '444444433333',
    'person.credit_cards[].exp' => '4024-01-01',

  ];

  ok my $res = request POST '/root/body', $body_parameters;
  ok my $data = eval $res->content;
  is_deeply $data, +{
    address => {



( run in 0.495 second using v1.01-cache-2.11-cpan-39bf76dae61 )