#!perl
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;
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'
;
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"
);