The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: set ts=2 sts=2 sw=2 expandtab smarttab:
use strict;
use warnings;
use Test::More 0.96;

my $qmod = 'DBIx::RoboQuery';
eval "require $qmod" or die $@;

my $sql = 'SELECT * FROM table';
my $order = 'ORDER BY field';
my $query;

# key_columns
$query = $qmod->new(sql => "$sql $order",);
is_deeply([$query->key_columns], [], 'key columns not provided to constructor');

$query = $qmod->new(sql => "$sql $order", key_columns => 'hello');
is_deeply([$query->key_columns], [qw(hello)], 'key columns set from constructor');

$query = $qmod->new(sql => "$sql $order", key_columns => ['hello']);
is_deeply([$query->key_columns], [qw(hello)], 'key columns set from constructor');

$query->key_columns;
is_deeply([$query->key_columns], [qw(hello)], 'key columns not changed');

$query->key_columns('there');
is_deeply([$query->key_columns], [qw(there)], 'key columns set');

$query->key_columns('hello', 'there');
is_deeply([$query->key_columns], [qw(hello there)], 'key columns set with list');

$query->key_columns(['hello', 'there']);
is_deeply([$query->key_columns], [qw(hello there)], 'key columns set with arrayref');

$query->key_columns(['hello', 'there'], 'you');
is_deeply([$query->key_columns], [qw(hello there you)], 'key columns set with mixture');

$query->key_columns('hello', ['there'], 'you');
is_deeply([$query->key_columns], [qw(hello there you)], 'key columns set with mixture');

# drop_columns
$query = $qmod->new(sql => $sql);
is_deeply([$query->drop_columns], [], 'drop columns not provided to constructor');

$query = $qmod->new(sql => $sql, drop_columns => 'arr');
is_deeply([$query->drop_columns], ['arr'], 'drop columns passed to constructor');

$query->drop_columns('hello', ['there'], 'you');
is_deeply([$query->drop_columns], [qw(hello there you)], 'drop columns set with mixture');

# order
$query = $qmod->new(sql => $sql);
ok(!exists $query->{order}, 'order does not exist yet');
is_deeply([$query->order], [], 'no order found in SQL');

$query = $qmod->new(sql => "$sql $order");
ok(!exists $query->{order}, 'order does not exist yet');
is_deeply([$query->order], [qw(field)], 'order set from SQL');

$query->order;
is_deeply([$query->order], [qw(field)], 'order unchanged');

$query->order('fld1');
is_deeply([$query->order], [qw(fld1)], 'order set');

$query->order('fld1', ['fld2']);
is_deeply([$query->order], [qw(fld1 fld2)], 'order set with mixture');

$query = $qmod->new(sql => $sql, order => []);
is_deeply([$query->order], [], 'order set from constructor');

$query = $qmod->new(sql => $sql, order => 'hi');
is_deeply([$query->order], ['hi'], 'order set from constructor');

done_testing;