use strict;
use warnings;
use Test::Base;
use HTTP::Engine::Request;
use t::Utils;

plan tests => 4*blocks;

filters {
    parameters => [qw/yaml/],
    options    => [qw/yaml/],
    expected   => [qw/yaml/],
};

run {
    my $block = shift;
    my $req = req( parameters => $block->parameters );
    is_deeply $req->params, $block->parameters;
    is scalar($req->param), scalar(keys %{  $block->parameters });

    my @options = $block->options;
    @options = @{ $block->options } if ref $block->options;

    my $ret = $req->param(@options);
    if (@options > 1) {
        is_deeply $ret, $block->expected;
        return ok 1 
    }
    my $expected = $block->expected ? $block->expected->[0] : undef;
    is $ret, $expected;

    my @ret = $req->param(@options);
    return ok 1 unless @ret && $block->expected;
    is_deeply \@ret, $block->expected;
}

__END__

=== blank
--- parameters
  key: value
  q: term
--- options
  - qq
--- expected

=== normal
--- parameters
  key: value
  q: term
--- options
  - q
--- expected
  - term

=== array param
--- parameters
  key: value
  q:
    - term
    - search
--- options
  - q
--- expected
  - term
  - search

=== set param
--- parameters
  key: value
  q: term
--- options
  - q
  - search
--- expected
  - search

=== set array param
--- parameters
  key: value
  q: term
--- options
  - q
  - search1
  - search2
--- expected
  - search1
  - search2