1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
#!perl
# vim:ft=perl:
package MyObject;
# For testing purposes
use parent 'RT::Client::REST::Object';
use Params::Validate qw(:types);
sub rt_type { 'myobject' }
sub _attributes {
{
id => {},
abc => {
validation => {
type => SCALAR,
},
},
}
}
sub retrieve {
my $self = shift;
$self->abc( $self->id );
$self->{__dirty} = {};
return $self;
}
my $i = 0;
sub store {
my $self = shift;
$::STORED = ++$i;
}
__PACKAGE__->_generate_methods;
package main;
use strict;
use warnings;
use vars qw($STORED);
use Test::More tests => 20;
use Test::Exception;
my $obj = MyObject->new( id => 1 );
ok( !defined( $obj->abc ), "retrieve has not been called" );
$obj->retrieve;
ok( defined( $obj->abc ), "retrieve has been called" );
$obj->abc(1);
ok( 1 == $obj->abc, "attribute 'abc' set correctly" );
ok( 1 == $obj->_dirty, "one dirty attribute" );
ok( 'abc' eq ( $obj->_dirty )[0], "and that attribute is 'abc'" );
ok( !defined( MyObject->autostore ), "autostore is disabled by default" );
ok( !defined( MyObject->autosync ), "autosync is disabled by default" );
ok( !defined( MyObject->autoget ), "autoget is disabled by default" );
throws_ok {
MyObject->be_transparent(3);
}
'RT::Client::REST::Object::InvalidValueException';
use RT::Client::REST;
my $rt = RT::Client::REST->new;
lives_ok {
MyObject->be_transparent($rt);
}
"made MyObject transparent";
ok( !defined( MyObject->autostore ), "autostore is still disabled" );
ok( MyObject->autosync, "autosync is now enabled" );
ok( MyObject->autoget, "autoget is now enabled" );
ok( $rt == MyObject->rt, "the class keeps track of rt object" );
ok(
!defined( RT::Client::REST::Object->autostore ),
"autostore is disabled in the parent class"
);
ok(
!defined( RT::Client::REST::Object->autosync ),
"autosync is disabled in the parent class"
);
ok(
!defined( RT::Client::REST::Object->autoget ),
"autoget is disabled in the parent class"
);
$obj = MyObject->new( id => 4 );
ok( $obj->abc == 4, "object auto-retrieved" );
my $stored = $STORED;
$obj->abc(5);
ok( $stored + 1 == $STORED, "object is stored" );
$stored = $STORED;
$obj->id(10);
ok( $stored == $STORED, "modifying 'id' did not trigger a store" );
|