How to send serialized post with Plack::Test?

77 Views Asked by At

Writing a REST application with perl Dancer2. I set the serializer setting to the format in code. set serializer => 'JSON';

I wrote a test file to rest the application, but failure in POST. REST application got KEY but null value.

DBD::Pg::st execute failed: ERROR:  null value in column "email" of relation "owners" violates not-null constraint

How to set serialized format content in Plack::Test?

use strict;
use warnings;
use Test::More;
use Test::Deep;
use Plack::Test;
use Plack::Util;
use HTTP::Request::Common;
use JSON::MaybeXS qw(decode_json encode_json);
use Data::Dumper qw(Dumper);
use Storable qw(freeze thaw);
use utf8;

use MyApp;
my %data = (
    password => 'A12345678',
    email    => '[email protected]'
);

# APP Start
my $app  = MyApp->to_app;
my $test = Plack::Test->create($app);

subtest register => sub {
    print ">>> Test <<<\n";

    my $datas = {
        password => $data{password},
        email    => $data{email},
    };
    my $serialized_data = freeze($datas);
    my $res = $test->request( POST '/api/v1/register', $serialized_data );

    print Dumper $res;
};
done_testing();

Dumper $res =>

$VAR1 = bless( {
                 '_headers' => bless( {
                                        'content-type' => 'application/json',
                                        'server' => 'Perl Dancer2 0.400000',
                                        'content-length' => 454
                                      }, 'HTTP::Headers' ),
                 '_request' => bless( {
                                        '_headers' => bless( {
                                                               'content-length' => 0,
                                                               '
                                                                12345678
[email protected]
        a1234567password' => undef,
                                                               'content-type' => 'application/x-www-form-urlencoded',
                                                               '::std_case' => {
                                                                                 '
                                                                                  12345678
[email protected]
        a1234567password' => '
                              12345678
[email protected]
        A1234567Password'
                                                                               }
                                                             }, 'HTTP::Headers' ),

PostmanImage

I tested this REST API with Postman is fine.

0

There are 0 best solutions below