diff options
Diffstat (limited to 't/lib/RTest/UI/ViewPort/ListView.pm')
-rw-r--r-- | t/lib/RTest/UI/ViewPort/ListView.pm | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/t/lib/RTest/UI/ViewPort/ListView.pm b/t/lib/RTest/UI/ViewPort/ListView.pm new file mode 100644 index 0000000..02d00ba --- /dev/null +++ b/t/lib/RTest/UI/ViewPort/ListView.pm @@ -0,0 +1,102 @@ +package RTest::UI::ViewPort::ListView; + +use base qw/Reaction::Test::WithDB/; +use Reaction::Class; + +use Reaction::UI::ViewPort::ListView; +use RTest::TestDB; +use Test::More (); + +has '+schema_class' => (default => sub { 'RTest::TestDB' }); + +has 'viewport' => ( + isa => 'Reaction::UI::ViewPort::ListView', + is => 'rw', set_or_lazy_build('viewport'), + clearer => 'clear_viewport', +); + +has 'collection' => ( + isa => 'DBIx::Class::ResultSet', + is => 'rw', set_or_lazy_build('collection'), + clearer => 'clear_collection', +); + +sub build_collection { + shift->schema->resultset('Foo'); +} + +sub build_viewport { + my ($self) = @_; + my $vp = Reaction::UI::ViewPort::ListView->new( + location => 0, + collection => $self->collection, + ctx => $self->simple_mock_context, + column_order => [qw(id first_name last_name)], + ); + return $vp; +} + +sub init_viewport :Tests { + my ($self) = @_; + + $self->clear_viewport; + + Test::More::cmp_ok($self->viewport->page, '==', 1, "Default page"); + Test::More::cmp_ok($self->viewport->per_page, '==', 10, "Default per page"); + + my @columns = qw(id first_name last_name); + Test::More::is_deeply($self->viewport->field_names, \@columns, "Field names"); + Test::More::is($self->viewport->field_label('first_name'), 'First Name', 'Field label'); + + my @rows = $self->viewport->current_rows; + Test::More::cmp_ok(@rows, '==', 10, 'Row count'); + Test::More::isa_ok($rows[0], 'RTest::TestDB::Foo', 'First row class'); + Test::More::cmp_ok($rows[0]->id, '==', 1, 'First row id'); + + my $pager = $self->viewport->pager; + Test::More::cmp_ok($pager->current_page, '==', 1, 'Pager current page'); + Test::More::cmp_ok($pager->next_page, '==', 2, 'Pager next page'); + Test::More::ok(!defined($pager->previous_page), 'Pager previous page'); + Test::More::cmp_ok($pager->entries_per_page, '==', 10, 'Pager entries per page'); +} + +sub modify_viewport :Tests { + my ($self) = @_; + + $self->clear_viewport; + + $self->viewport->per_page(20); + $self->viewport->page(2); + + my $pager = $self->viewport->pager; + + Test::More::cmp_ok($pager->current_page, '==', 2, 'Pager current page'); + Test::More::cmp_ok($pager->last_page, '==', 5, 'Pager last page'); +} + +sub viewport_to_csv :Tests { + my ($self) = @_; + + $self->clear_viewport; + + $self->viewport->export_to_csv; + + Test::More::like($self->viewport->ctx->res->body, + qr/^Id,"First Name","Last Name"\r +1,Joe,"Bloggs 1"\r +2,John,"Smith 1"\r +3,Joe,"Bloggs 2"\r +4,John,"Smith 2"\r +5,Joe,"Bloggs 3"\r +6,John,"Smith 3"\r +7,Joe,"Bloggs 4"\r +8,John,"Smith 4"\r +9,Joe,"Bloggs 5"\r +10,John,"Smith 5"\r +/, "CSV export head ok"); + Test::More::like($self->viewport->ctx->res->body, + qr/100,John,"Smith 50"\r\n$/, "CSV export tail ok"); + +} + +1; |