-schema_class
=>
'Schema::Nested'
;
Schema->resultset(
"State"
)->populate([
[
qw( name abbreviation )
],
[
'Texas'
,
'TX'
],
[
'New York'
,
'NY'
],
[
'California'
,
'CA'
],
]);
ok
my
$person
= Schema
->resultset(
'Person'
)
->create({
username
=>
'jjn'
,
last_name
=>
'napiorkowski'
,
first_name
=>
'john'
,
state
=> {
abbreviation
=>
'TX'
},
});
ok
$person
->valid;
ok
$person
->in_storage;
ok
my
$person_for_meeting
= Schema->resultset(
'Person'
)->find(
$person
->id);
ok
my
$meetings_nested_attendees
=
$person_for_meeting
->meetings->search({},{
prefetch
=>
'attendees'
});
ok
my
$new_meeting
=
$meetings_nested_attendees
->new_result(+{});
ok
$new_meeting
->set_columns_recursively({
title
=>
'first meeting'
,
purpose
=>
'test this'
,
attendees
=>[
{
role
=>
'one'
,
background
=>
'back1'
,
desired_outcome
=>
'misery'
,
personality
=>
'hateful'
,
motivation
=>
'much'
,
},
{
role
=>
'two'
,
background
=>
'back2'
,
desired_outcome
=>
'happy'
,
personality
=>
'lawful evil'
,
motivation
=>
'slacker'
,
},
],
});
ok
exists
$new_meeting
->{related_resultsets}{attendees};
ok
$new_meeting
->insert_or_update;
ok !
exists
$new_meeting
->{related_resultsets}{attendees};
ok
$new_meeting
->valid;
{
ok
my
$person_for_meeting
= Schema->resultset(
'Person'
)->find(
$person
->id);
ok
my
$meetings_nested_attendees
=
$person_for_meeting
->meetings->search({},{
prefetch
=>
'attendees'
});
ok
my
$new_meeting
=
$meetings_nested_attendees
->new_result(+{});
ok
$new_meeting
->set_columns_recursively({
title
=>
'first meeting'
,
purpose
=>
'test this'
,
attendees
=>[
{
role
=>
'o'
,
background
=>
'back1'
,
desired_outcome
=>
'misery'
,
personality
=>
'hateful'
,
motivation
=>
'much'
,
},
{
role
=>
't'
,
background
=>
'back2'
,
desired_outcome
=>
'happy'
,
personality
=>
'lawful evil'
,
motivation
=>
'slacker'
,
},
],
});
$new_meeting
->insert_or_update;
is_deeply +{
$new_meeting
->errors->to_hash(
full_messages
=>1)}, {
"attendees[0].role"
=> [
"Attendees Role is too short (minimum is 2 characters)"
,
],
"attendees"
=> [
"Attendees Are Invalid"
,
],
"attendees[1].role"
=> [
"Attendees Role is too short (minimum is 2 characters)"
,
],
};
$new_meeting
->errors->add(
undef
,
'testerror'
);
is_deeply
$new_meeting
->errors->as_rfc_7807, {
fields
=> {
attendees
=> [
"Attendees Are Invalid"
,
],
"attendees[0].role"
=> [
"Attendees Role is too short (minimum is 2 characters)"
,
],
"attendees[1].role"
=> [
"Attendees Role is too short (minimum is 2 characters)"
,
],
},
general
=> [
"testerror"
,
],
}
}
done_testing;