The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use warnings;
use strict;

use FindBin;
use Test::More;
use HTTP::Request::Common;
use JSON::MaybeXS;

use lib "$FindBin::Bin/lib";
use Catalyst::Test 'TestContentNegotiation';

{
  ok my $req = POST '/',
     Content_Type => 'application/json',
     Content => encode_json +{message=>'test'};

  ok my $res = request $req;

  is $res->content, 'is_json1';
}

{
  ok my $req = POST '/', [a=>1,b=>2];
  ok my $res = request $req;

  is $res->content, 'is_urlencoded1';
}

{
  ok my $path = TestContentNegotiation->path_to(qw/share file.txt/);
  ok my $req = POST '/',
    Content_Type => 'form-data',
    Content =>  [a=>1, b=>2, file=>["$path"]];

  ok my $res = request $req;

  is $res->content, 'is_multipart1';
}

{
  ok my $req = POST '/under',
     Content_Type => 'application/json',
     Content => encode_json +{message=>'test'};

  ok my $res = request $req;

  is $res->content, 'is_json2';
}

{
  ok my $req = POST '/under', [a=>1,b=>2];
  ok my $res = request $req;

  is $res->content, 'is_urlencoded2';
}

{
  ok my $path = TestContentNegotiation->path_to(qw/share file.txt/);
  ok my $req = POST '/under',
    Content_Type => 'form-data',
    Content =>  [a=>1, b=>2, file=>["$path"]];

  ok my $res = request $req;

  is $res->content, 'is_multipart2';
}

{
  ok my $req = POST '/is_more_than_one_1',
    Content =>  [a=>1, b=>2];

  ok my $res = request $req;

  is $res->content, 'formdata1';
}

{
  ok my $req = POST '/is_more_than_one_2',
    Content =>  [a=>1, b=>2];

  ok my $res = request $req;

  is $res->content, 'formdata2';
}

{
  ok my $req = POST '/is_more_than_one_3',
    Content =>  [a=>1, b=>2];

  ok my $res = request $req;

  is $res->content, 'formdata3';
}

{
  ok my $path = TestContentNegotiation->path_to(qw/share file.txt/);
  ok my $req = POST '/is_more_than_one_1',
    Content_Type => 'form-data',
    Content =>  [a=>1, b=>2, file=>["$path"]];

  ok my $res = request $req;

  is $res->content, 'formdata1';
}

{
  ok my $path = TestContentNegotiation->path_to(qw/share file.txt/);
  ok my $req = POST '/is_more_than_one_2',
    Content_Type => 'form-data',
    Content =>  [a=>1, b=>2, file=>["$path"]];

  ok my $res = request $req;

  is $res->content, 'formdata2';
}

{
  ok my $path = TestContentNegotiation->path_to(qw/share file.txt/);
  ok my $req = POST '/is_more_than_one_3',
    Content_Type => 'form-data',
    Content =>  [a=>1, b=>2, file=>["$path"]];

  ok my $res = request $req;

  is $res->content, 'formdata3';
}

done_testing;