MultiCreate test
[dbsrgits/DBIx-Class.git] / t / row / filter_column.t
CommitLineData
956f4141 1use strict;
2use warnings;
3
4use Test::More;
956f4141 5use lib qw(t/lib);
6use DBICTest;
cc2d2ead 7
8my $schema = DBICTest->init_schema();
9DBICTest::Schema::Artist->load_components('FilterColumn');
10DBICTest::Schema::Artist->filter_column(rank => {
7b461f8a 11 filter => sub { $_[1] * 2 },
12 unfilter => sub { $_[1] / 2 },
cc2d2ead 13});
14Class::C3->reinitialize();
15
16my $artist = $schema->resultset('Artist')->create( { rank => 20 } );
17
18# this should be using the cursor directly, no inflation/processing of any sort
19my ($raw_db_rank) = $schema->resultset('Artist')
20 ->search ($artist->ident_condition)
21 ->get_column('rank')
22 ->_resultset
23 ->cursor
24 ->next;
25
26is ($raw_db_rank, 10, 'INSERT: correctly unfiltered on insertion');
27
28for my $reloaded (0, 1) {
29 my $test = $reloaded ? 'reloaded' : 'stored';
30 $artist->discard_changes if $reloaded;
31
32 is( $artist->rank , 20, "got $test filtered rank" );
33}
34
35$artist->update;
36$artist->discard_changes;
37is( $artist->rank , 20, "got filtered rank" );
38
39$artist->update ({ rank => 40 });
40($raw_db_rank) = $schema->resultset('Artist')
41 ->search ($artist->ident_condition)
42 ->get_column('rank')
43 ->_resultset
44 ->cursor
45 ->next;
46is ($raw_db_rank, 20, 'UPDATE: correctly unflitered on update');
47
48$artist->discard_changes;
49$artist->rank(40);
50ok( !$artist->is_column_changed('rank'), 'column is not dirty after setting the same value' );
51
8cfbd51c 52MC: {
53 my $cd = $schema->resultset('CD')->create({
54 artist => { rank => 20 },
55 title => 'fun time city!',
56 year => 'forevertime',
57 });
58 is $cd->artist->rank, 20, 'artist rank gets correctly unfiltered then filtered on MC';
59}
60
cc2d2ead 61done_testing;