DBIx-RoboQuery

 view release on metacpan or  search on metacpan

t/resultset-preference.t  view on Meta::CPAN

  ],
  [
    2, $place,
    {place => 'there', name => 'Eric'},
    {place => 'over there', name => 'Bob'},
    {place => 'nowhere', name => 'Goober'}
  ],
  [
    3, $place,
    {place => 'nowhere', name => 'Goober'},
    {place => 'nowhere', name => 'Eric'},
    {place => 'nowhere', name => 'Bob'}
  ],
  [
    2, $fruit,
    {name => 'grape',  color => 'red',    stem => 0},
    {name => 'apple',  color => 'red',    stem => 1},
    {name => 'banana', color => 'yellow', stem => 0}
  ],
  [
    2, $fruit,
    {name => 'grape',  color => 'red',    stem => 0},
    {name => 'orange', color => 'orange', stem => 0},
    {name => 'banana', color => 'green',  stem => 0}
  ],
  [
    3, $fruit,
    {name => 'grape',  color => 'red',    stem => 0},
    {name => 'pear',   color => 'yellow', stem => 0},
    {name => 'banana', color => 'yellow', stem => 0}
  ],
  [
    2, $_private,
    {_private => 3, allow_priv => 1},
    {_private => 1, allow_priv => 1},
    {_private => 2, allow_priv => 1},
  ],
  [
    1, $_private,
    {_private => 2, allow_priv => 1},
    {_private => 3, allow_priv => 1},
    {_private => 4, allow_priv => 1},
  ],
  # without deactivating private vars these will always pick the last
  [
    3, $_private,
    {_private => 3},
    {_private => 1},
    {_private => 2},
  ],
  [
    3, $_private,
    {_private => 2},
    {_private => 3},
    {_private => 4},
  ],
);

foreach my $test ( @tests ){
  my $p = shift @$test;
  my $prefs = shift @$test;

  my @args = (sql => '');

  # where are you Test::Routine?
  my $expect_err = 0;
  if( $test->[0]->{allow_priv} ){
    push @args, (template_private_vars => undef);
  }
  elsif( $test->[0]->{_private} ){
    $expect_err = 1;
  }

  my $desc = join ' / ', @$prefs;
  my $cmp = sub { cmp_pref(shift, $test, $p, $desc, $expect_err); };

  my $q = DBIx::RoboQuery->new(@args);
  $q->prefer(@$prefs);
  my $r2 = $q->resultset;

  is_deeply($r2->{preferences}, $prefs, 'preferences ready');

  {
    my $preferred = eval { $r2->preference(@$test) };
    my $e = $@;
    if( $expect_err ){
      like($e, qr/\Qvar.undef error - undefined variable: _private\E/, "error for $desc");
    }
    else {
      is_deeply($preferred, $$test[$p-1], "expected record for $desc");
    }
  }
}

done_testing;



( run in 1.863 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )