X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F87ordered.t;h=7bc1bed7a59cf5447e49bd3ed2fc7ec02ab66015;hb=331a564;hp=7843eeedebb8dd7fb028bb1c38b35f039470aa4f;hpb=79dc353af7198da731d16fec64970bc5c31e8a27;p=dbsrgits%2FDBIx-Class.git diff --git a/t/87ordered.t b/t/87ordered.t index 7843eee..7bc1bed 100644 --- a/t/87ordered.t +++ b/t/87ordered.t @@ -6,9 +6,11 @@ use Test::More; use lib qw(t/lib); use DBICTest; +use POSIX qw(ceil); + my $schema = DBICTest->init_schema(); -plan tests => 417; +plan tests => 879; my $employees = $schema->resultset('Employee'); $employees->delete(); @@ -94,6 +96,97 @@ ok( "overloaded update 7" ); +# multicol tests begin here +DBICTest::Employee->grouping_column(['group_id', 'group_id_2']); +$employees->delete(); +foreach my $group_id (1..4) { + foreach my $group_id_2 (1..4) { + foreach (1..4) { + $employees->create({ name=>'temp', group_id=>$group_id, group_id_2=>$group_id_2 }); + } + } +} +$employees = $employees->search(undef,{order_by=>'group_id,group_id_2,position'}); + +foreach my $group_id (1..3) { + foreach my $group_id_2 (1..3) { + my $group_employees = $employees->search({group_id=>$group_id, group_id_2=>$group_id_2}); + $group_employees->all(); + ok( check_rs($group_employees), "group intial positions" ); + hammer_rs( $group_employees ); + } +} + +# move_to_group, specifying group by hash +my $group_4 = $employees->search({group_id=>4}); +$to_group = 1; +my $to_group_2_base = 7; +my $to_group_2 = 1; +$to_pos = undef; +while (my $employee = $group_4->next) { + $employee->move_to_group({group_id=>$to_group, group_id_2=>$to_group_2}, $to_pos); + $to_pos++; + $to_group = ($to_group % 3) + 1; + $to_group_2_base++; + $to_group_2 = (ceil($to_group_2_base/3.0) %3) +1 +} +foreach my $group_id (1..4) { + foreach my $group_id_2 (1..4) { + my $group_employees = $employees->search({group_id=>$group_id,group_id_2=>$group_id_2}); + $group_employees->all(); + ok( check_rs($group_employees), "group positions after move_to_group" ); + } +} + +$employees->delete(); +foreach my $group_id (1..4) { + foreach my $group_id_2 (1..4) { + foreach (1..4) { + $employees->create({ name=>'temp', group_id=>$group_id, group_id_2=>$group_id_2 }); + } + } +} +$employees = $employees->search(undef,{order_by=>'group_id,group_id_2,position'}); + +$employee = $employees->search({group_id=>4, group_id_2=>1})->first; +$employee->group_id(1); +$employee->update; +ok( + check_rs($employees->search_rs({group_id=>4, group_id_2=>1})) + && check_rs($employees->search_rs({group_id=>1, group_id_2=>1})), + "overloaded multicol update 1" +); + +$employee = $employees->search({group_id=>4, group_id_2=>1})->first; +$employee->update({group_id=>2}); +ok( check_rs($employees->search_rs({group_id=>4, group_id_2=>1})) + && check_rs($employees->search_rs({group_id=>2, group_id_2=>1})), + "overloaded multicol update 2" +); + +$employee = $employees->search({group_id=>3, group_id_2=>1})->first; +$employee->group_id(1); +$employee->group_id_2(3); +$employee->update(); +ok( check_rs($employees->search_rs({group_id=>3, group_id_2=>1})) + && check_rs($employees->search_rs({group_id=>1, group_id_2=>3})), + "overloaded multicol update 3" +); + +$employee = $employees->search({group_id=>3, group_id_2=>1})->first; +$employee->update({group_id=>2, group_id_2=>3}); +ok( check_rs($employees->search_rs({group_id=>3, group_id_2=>1})) + && check_rs($employees->search_rs({group_id=>2, group_id_2=>3})), + "overloaded multicol update 4" +); + +$employee = $employees->search({group_id=>3, group_id_2=>2})->first; +$employee->update({group_id=>2, group_id_2=>4, position=>2}); +ok( check_rs($employees->search_rs({group_id=>3, group_id_2=>2})) + && check_rs($employees->search_rs({group_id=>2, group_id_2=>4})), + "overloaded multicol update 5" +); + sub hammer_rs { my $rs = shift; my $employee;