The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More tests => 7;
use Dancer2::Serializer::Dumper;

{

    package MyApp;

    use Dancer2;

    set serializer => 'JSON';

    get '/json' => sub { return { bar => 'baz' } };
    get '/to_json' => sub { to_json( { bar => 'baz' }, { pretty => 1 } ) };
}

use Dancer2::Test apps => ['MyApp'];

# Response with implicit call to the serializer
my $resp = dancer_response('/json');
response_status_is $resp  => 200;
response_content_is $resp => '{"bar":"baz"}';
response_headers_include $resp, [ 'Content-Type' => 'application/json' ];

# Response with explicit call to the serializer
$resp = dancer_response('/to_json');
response_status_is $resp  => 200;
response_content_is $resp => "{\n   \"bar\" : \"baz\"\n}\n";

# When calling `to_json', the content_type is not set,
# because we can't assume we're calling it for a response
response_headers_include $resp,
  [ 'Content-Type' => 'text/html; charset=UTF-8' ];

my $serializer = Dancer2::Serializer::Dumper->new();
is $serializer->content_type, 'text/x-data-dumper',
  'content-type is set correctly';