#!/usr/bin/perl use strict; use warnings; { package M3::ServerView::View::MockEntry; sub DESTROY {} our $AUTOLOAD; sub AUTOLOAD { my ($key) = $AUTOLOAD =~ /::(\w+)$/; my $method = sub { my ($self) = @_; return $self->{$key}; }; no strict "refs"; *{$key} = $method; goto &$method; } } use Test::More tests => 40; use Test::Exception; BEGIN { use_ok("M3::ServerView::View"); } my $view = M3::ServerView::View->new(); my $count = 0; while() { chomp; my @fields = split/;/,$_; @fields = map { split/=/,$_,2 } @fields; my $entry = bless { @fields }, "M3::ServerView::View::MockEntry"; use Data::Dumper qw(Dumper); $view->_add_entry($entry); $count++; } my $entries = $view->_entries; ok(defined $entries); is(ref $entries, "ARRAY"); is(@$entries, $count); my $rs = $view->search(); isa_ok($rs, "M3::ServerView::ResultSet"); is($rs->count, $count); $rs = $view->search({ foo => 1 }); is($rs->count, 1); $rs = $view->search({ foo => [ "<" => 3 ] }); is($rs->count, 2); $rs = $view->search({ foo => 3, bar => 20 }); is($rs->count, 1); $rs = $view->search({ baz => "a" }); is($rs->count, 2); $rs = $view->search({ baz => "a" }, { case_sensitive => 1 }); is($rs->count, 1); $rs = $view->search({}, { order_by => "x" }); is($rs->count, 6); is($rs->next->{x}, 1); is($rs->next->{x}, 2); is($rs->next->{x}, 3); is($rs->next->{x}, 4); is($rs->next->{x}, 5); is($rs->next->{x}, 6); $rs = $view->search({}, { order_by => "x", sort_order => "desc" }); is($rs->count, 6); is($rs->next->{x}, 6); is($rs->next->{x}, 5); is($rs->next->{x}, 4); is($rs->next->{x}, 3); is($rs->next->{x}, 2); is($rs->next->{x}, 1); $rs = $view->search({}, { order_by => "y", sort_as => "text" }); is($rs->count, 6); is($rs->next->{x}, 1); is($rs->next->{x}, 2); is($rs->next->{x}, 3); is($rs->next->{x}, 4); is($rs->next->{x}, 5); is($rs->next->{x}, 6); $rs = $view->search({}, { order_by => "y", sort_as => "text", sort_order => "desc" }); is($rs->count, 6); is($rs->next->{x}, 6); is($rs->next->{x}, 5); is($rs->next->{x}, 4); is($rs->next->{x}, 3); is($rs->next->{x}, 2); is($rs->next->{x}, 1); throws_ok { $view->search({}, { order_by => 'x', sort_order => "foo" }); } qr/Sort order must be either 'asc' or 'desc'/; __DATA__ foo=1;bar=20;x=4;y=D foo=2;x=3;y=C foo=3;bar=20;x=6;y=F foo=3;bar=15;x=5;y=E baz=A;x=1;y=A baz=a;x=2;y=B