Various fixes to Positioned. Tests no longer test AdjacencyList.
[dbsrgits/DBIx-Class.git] / t / run / 26positioned.tl
1 # vim: filetype=perl
2
3 sub run_tests {
4
5     plan tests => 96;
6     my $schema = shift;
7
8     my $employees = $schema->resultset('Employee::Positioned');
9
10     if ($employees->result_class->can('position_column')) {
11
12         $employees->delete();
13         foreach (1..5) {
14             $employees->create({ name=>'temp' });
15         }
16
17         $employees = $employees->search(undef,{order_by=>'position'});
18         ok( check_positions($employees), "$class: intial positions" );
19
20         my $employee;
21
22         foreach my $position (1..$employees->count()) {
23
24             $employee = $employees->find({ position=>$position });
25             $employee->move_previous();
26             ok( check_positions($employees), "$class: move_previous( $position )" );
27
28             $employee = $employees->find({ position=>$position });
29             $employee->move_next();
30             ok( check_positions($employees), "$class: move_next( $position )" );
31
32             $employee = $employees->find({ position=>$position });
33             $employee->move_first();
34             ok( check_positions($employees), "$class: move_first( $position )" );
35
36             $employee = $employees->find({ position=>$position });
37             $employee->move_last();
38             ok( check_positions($employees), "$class: move_last( $position )" );
39
40             foreach my $to_position (1..$employees->count()) {
41                 $employee = $employees->find({ position=>$position });
42                 $employee->move_to($to_position);
43                 ok( check_positions($employees), "$class: move_to( $position => $to_position )" );
44             }
45
46         }
47     }
48 }
49
50 sub check_positions {
51     my( $employees ) = @_;
52     $employees->reset();
53     my $expected_position = 0;
54     while (my $employee = $employees->next()) {
55         $expected_position ++;
56         if ($employee->position()!=$expected_position) {
57             return 0;
58         }
59     }
60     return 1;
61 }
62
63 1;