Introduce GOVERNANCE document and empty RESOLUTIONS file.
[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(
7305f6f9 23 user_id => { retrieve_on_insert => 1 },
24 qw( email password firstname lastname active admin ),
db4e9221 25);
26
27__PACKAGE__->set_primary_key('user_id');
28
29sub inflate_result {
30 my $self = shift;
31 my $ret = $self->next::method(@_);
32 if ( $ret->admin ) { ### If this is an admin, rebless for extra functions
33 $self->ensure_class_loaded($admin_class);
34 bless $ret, $admin_class;
35 }
36 return $ret;
37}
38
39sub hello {
40 return "I am a regular user.";
41}
42
43package My::Schema::Result::User::Admin;
44
45use strict;
46use warnings;
47use base qw/My::Schema::Result::User/;
48
49# This line is important
50__PACKAGE__->table('users');
51
52sub hello {
53 return "I am an admin.";
54}
55
56sub do_admin_stuff {
57 return "I am doing admin stuff";
58}
59
60package My::Schema;
61
a0216b74 62use base qw/DBICTest::BaseSchema/;
db4e9221 63
64My::Schema->register_class( Admin => 'My::Schema::Result::User::Admin' );
65My::Schema->register_class( User => 'My::Schema::Result::User' );
66
671;
68
69package main;
db4e9221 70my $user_data = {
71 email => 'someguy@place.com',
72 password => 'pass1',
73 admin => 0
74};
75
76my $admin_data = {
77 email => 'someadmin@adminplace.com',
78 password => 'pass2',
79 admin => 1
80};
81
8d6b1478 82ok( my $schema = My::Schema->connect(DBICTest->_database) );
db4e9221 83
84ok(
85 $schema->storage->dbh->do(
86"create table users (user_id, email, password, firstname, lastname, active, admin)"
87 )
88);
89
4ca1fd6f 90{
91 my $user = $schema->resultset('User')->create($user_data);
92 my $admin = $schema->resultset('User')->create($admin_data);
db4e9221 93
4ca1fd6f 94 is( ref $user, 'My::Schema::Result::User' );
95
96 local $TODO = 'New objects should also be inflated';
97 is( ref $admin, 'My::Schema::Result::User::Admin' );
db4e9221 98}
99
100my $user = $schema->resultset('User')->single($user_data);
101my $admin = $schema->resultset('User')->single($admin_data);
102
103is( ref $user, 'My::Schema::Result::User' );
104is( ref $admin, 'My::Schema::Result::User::Admin' );
105
106is( $user->password, 'pass1' );
107is( $admin->password, 'pass2' );
108is( $user->hello, 'I am a regular user.' );
109is( $admin->hello, 'I am an admin.' );
110
111ok( !$user->can('do_admin_stuff') );
112ok( $admin->can('do_admin_stuff') );
113
114done_testing;