Bring out the big-paranoia-harness - make describe_env infallible
[dbsrgits/DBIx-Class.git] / t / row / inflate_result.t
CommitLineData
c0329273 1BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2
4bea1fe7 3use warnings;
4use strict;
5
6use Test::More;
7
c0329273 8
4bea1fe7 9use DBICTest;
10
db4e9221 11package My::Schema::Result::User;
12
13use strict;
14use warnings;
15use base qw/DBIx::Class::Core/;
16
17### Define what our admin class is, for ensure_class_loaded()
18my $admin_class = __PACKAGE__ . '::Admin';
19
20__PACKAGE__->table('users');
21
22__PACKAGE__->add_columns(
23 qw/user_id email password
24 firstname lastname active
25 admin/
26);
27
28__PACKAGE__->set_primary_key('user_id');
29
30sub inflate_result {
31 my $self = shift;
32 my $ret = $self->next::method(@_);
33 if ( $ret->admin ) { ### If this is an admin, rebless for extra functions
34 $self->ensure_class_loaded($admin_class);
35 bless $ret, $admin_class;
36 }
37 return $ret;
38}
39
40sub hello {
41 return "I am a regular user.";
42}
43
44package My::Schema::Result::User::Admin;
45
46use strict;
47use warnings;
48use base qw/My::Schema::Result::User/;
49
50# This line is important
51__PACKAGE__->table('users');
52
53sub hello {
54 return "I am an admin.";
55}
56
57sub do_admin_stuff {
58 return "I am doing admin stuff";
59}
60
61package My::Schema;
62
a0216b74 63use base qw/DBICTest::BaseSchema/;
db4e9221 64
65My::Schema->register_class( Admin => 'My::Schema::Result::User::Admin' );
66My::Schema->register_class( User => 'My::Schema::Result::User' );
67
681;
69
70package main;
db4e9221 71my $user_data = {
72 email => 'someguy@place.com',
73 password => 'pass1',
74 admin => 0
75};
76
77my $admin_data = {
78 email => 'someadmin@adminplace.com',
79 password => 'pass2',
80 admin => 1
81};
82
8d6b1478 83ok( my $schema = My::Schema->connect(DBICTest->_database) );
db4e9221 84
85ok(
86 $schema->storage->dbh->do(
87"create table users (user_id, email, password, firstname, lastname, active, admin)"
88 )
89);
90
4ca1fd6f 91{
92 my $user = $schema->resultset('User')->create($user_data);
93 my $admin = $schema->resultset('User')->create($admin_data);
db4e9221 94
4ca1fd6f 95 is( ref $user, 'My::Schema::Result::User' );
96
97 local $TODO = 'New objects should also be inflated';
98 is( ref $admin, 'My::Schema::Result::User::Admin' );
db4e9221 99}
100
101my $user = $schema->resultset('User')->single($user_data);
102my $admin = $schema->resultset('User')->single($admin_data);
103
104is( ref $user, 'My::Schema::Result::User' );
105is( ref $admin, 'My::Schema::Result::User::Admin' );
106
107is( $user->password, 'pass1' );
108is( $admin->password, 'pass2' );
109is( $user->hello, 'I am a regular user.' );
110is( $admin->hello, 'I am an admin.' );
111
112ok( !$user->can('do_admin_stuff') );
113ok( $admin->can('do_admin_stuff') );
114
115done_testing;