I'm writing unit tests so I try to check various behaviours such as a wrong foreign key id.
Example : a personne has to have a project_id but not a status_id
in app/models/Person.php :
$this->belongsTo('project_id', 'Project', 'id', array(
"alias" => "Project",
"foreignKey" => array(
"message" => "Project incorrect value"
)
));
$this->belongsTo('status_id', 'Status', 'id', array(
"alias" => "Status",
"foreignKey" => array(
"allowNulls" => true,
"message" => "Status incorrect value"
)
));
then in my unit test :
$person = new Person();
$person->assign([
'project_id' => 3, // doesn't exist in database
'birth' => "1980-01-01",
]);
$personOk = $person->create();
var_dump((string)$personne->getMessages()[0]); // "Project incorrect value"
$person = new Person();
$person->assign([
'project_id' => 1, // existing one
'birth' => "1980-01-01",
'status_id' => 10, // doesn't exist in database
]);
$personOk = $person->create();
var_dump((string)$personne->getMessages()[0]);
Here is the result :
There was 1 error:
1) Test\ModelUnitTest::testPersonCase
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`db_unit`.`person`, CONSTRAINT `person_fk_4` FOREIGN KEY (`
statut_id`) REFERENCES `status` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
In my opinion, we should get a custom error message and not an exception.
Thanks