02d00ba662ec2748755365f48d9b80ee030bddc6
[catagits/Reaction.git] / t / lib / RTest / UI / ViewPort / ListView.pm
1 package RTest::UI::ViewPort::ListView;
2
3 use base qw/Reaction::Test::WithDB/;
4 use Reaction::Class;
5
6 use Reaction::UI::ViewPort::ListView;
7 use RTest::TestDB;
8 use Test::More ();
9
10 has '+schema_class' => (default => sub { 'RTest::TestDB' });
11
12 has 'viewport' => (
13   isa => 'Reaction::UI::ViewPort::ListView',
14   is => 'rw', set_or_lazy_build('viewport'),
15   clearer => 'clear_viewport',
16 );
17
18 has 'collection' => (
19   isa => 'DBIx::Class::ResultSet',
20   is => 'rw', set_or_lazy_build('collection'),
21   clearer => 'clear_collection',
22 );
23
24 sub build_collection {
25   shift->schema->resultset('Foo');
26 }
27
28 sub build_viewport {
29   my ($self) = @_;
30   my $vp = Reaction::UI::ViewPort::ListView->new(
31     location => 0,
32     collection => $self->collection,
33     ctx => $self->simple_mock_context,
34     column_order => [qw(id first_name last_name)],
35   );
36   return $vp;
37 }
38
39 sub init_viewport :Tests {
40   my ($self) = @_;
41
42   $self->clear_viewport;
43
44   Test::More::cmp_ok($self->viewport->page, '==', 1, "Default page");
45   Test::More::cmp_ok($self->viewport->per_page, '==', 10, "Default per page");
46
47   my @columns = qw(id first_name last_name);
48   Test::More::is_deeply($self->viewport->field_names, \@columns, "Field names");
49   Test::More::is($self->viewport->field_label('first_name'), 'First Name', 'Field label');
50
51   my @rows = $self->viewport->current_rows;
52   Test::More::cmp_ok(@rows, '==', 10, 'Row count');
53   Test::More::isa_ok($rows[0], 'RTest::TestDB::Foo', 'First row class');
54   Test::More::cmp_ok($rows[0]->id, '==', 1, 'First row id');
55
56   my $pager = $self->viewport->pager;
57   Test::More::cmp_ok($pager->current_page, '==', 1, 'Pager current page');
58   Test::More::cmp_ok($pager->next_page, '==', 2, 'Pager next page');
59   Test::More::ok(!defined($pager->previous_page), 'Pager previous page');
60   Test::More::cmp_ok($pager->entries_per_page, '==', 10, 'Pager entries per page');
61 }
62
63 sub modify_viewport :Tests {
64   my ($self) = @_;
65
66   $self->clear_viewport;
67
68   $self->viewport->per_page(20);
69   $self->viewport->page(2);
70
71   my $pager = $self->viewport->pager;
72
73   Test::More::cmp_ok($pager->current_page, '==', 2, 'Pager current page');
74   Test::More::cmp_ok($pager->last_page, '==', 5, 'Pager last page');
75 }
76
77 sub viewport_to_csv :Tests {
78   my ($self) = @_;
79
80   $self->clear_viewport;
81
82   $self->viewport->export_to_csv;
83
84   Test::More::like($self->viewport->ctx->res->body,
85     qr/^Id,"First Name","Last Name"\r
86 1,Joe,"Bloggs 1"\r
87 2,John,"Smith 1"\r
88 3,Joe,"Bloggs 2"\r
89 4,John,"Smith 2"\r
90 5,Joe,"Bloggs 3"\r
91 6,John,"Smith 3"\r
92 7,Joe,"Bloggs 4"\r
93 8,John,"Smith 4"\r
94 9,Joe,"Bloggs 5"\r
95 10,John,"Smith 5"\r
96 /, "CSV export head ok");
97   Test::More::like($self->viewport->ctx->res->body,
98     qr/100,John,"Smith 50"\r\n$/, "CSV export tail ok");
99
100 }
101
102 1;