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

use strict;
use warnings;

use File::Spec;
use Data::Dumper;

use Dancer qw/:syntax/;
use Dancer::Plugin::Form;

set template => 'template_flute';
set views => 't/views';
set log => 'debug';

any [qw/get post/] => '/' => sub {
    return form_handler('double-1');
};

any [qw/get post/] => '/no-keep' => sub {
    return form_handler('double-no-keep');
};

sub form_handler {
    my $template = shift;
    my $form = form('edit');
    my %values = %{$form->values};
    $form->fill(\%values);
    template $template, {
                          roles => [
                                    { value => '1' },
                                    { value => '2' },
                                    { value => '3' },
                                    { value => '4' },
                                   ],
                          form => $form,
                         }, { layout => undef };
    
}

use Test::More tests => 6, import => ['!pass'];

use Dancer::Test;

my $expected = <<'FORM';
<select id="role" name="role">
<option value="">Please select role</option>
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
FORM

$expected =~ s/\n//g;
my $empty_value = q{<option value="">Please select role</option>};
my $selected = q{<option selected="selected">1</option>};

my $resp = dancer_response POST => '/';
# mah, we have to post twice. Looks like it has to warm up...

$resp = dancer_response POST => '/', { body => { role => 1 } };

response_content_like($resp, qr/\Q$expected\E/,
                      "No duplicated found with template double-1");

response_content_like($resp, qr/\Q$empty_value\E/,
                      "Found the empty value with the template double-1");
response_content_like($resp, qr/\Q$selected\E/,
                      "Found the selected with template double-1");



$resp = dancer_response POST => '/no-keep', { body => { role => 1 } };

$expected = <<'FORM';
<select id="role" name="role">
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
FORM

$expected =~ s/\n//g;



response_content_like($resp, qr/\Q$expected\E/,
                      "No duplicated found with template double-no-keep");

response_content_unlike($resp, qr/\Q$empty_value\E/,
                        "Found the empty value without keep=empty_value");

response_content_like($resp, qr/\Q$selected\E/,
                      "Found the selected with template double-no-keep");