aboutsummaryrefslogtreecommitdiffstats
path: root/t/lib/RTest/UI/ViewPort/ListView.pm
diff options
context:
space:
mode:
Diffstat (limited to 't/lib/RTest/UI/ViewPort/ListView.pm')
-rw-r--r--t/lib/RTest/UI/ViewPort/ListView.pm102
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;