public function testAclSerialize()
{
$this->specify('Acl serialization/unserialization does not return a correct object back', function () {
$filename = $this->tester->getNewFileName('acl', 'log');
$acl = new Memory();
$aclRole = new Role('Administrators', 'Super User access');
$aclResource = new Resource('Customers', 'Customer management');
$acl->addRole($aclRole);
$acl->addResource($aclResource, ['search', 'destroy']);
$acl->allow('Administrators', 'Customers', 'search');
$acl->deny('Administrators', 'Customers', 'destroy');
$contents = serialize($acl);
file_put_contents(PATH_CACHE . $filename, $contents);
$acl = null;
$contents = file_get_contents(PATH_CACHE . $filename);
$this->tester->cleanFile(PATH_CACHE, $filename);
$acl = unserialize($contents);
$actual = $acl instanceof Memory;
expect($actual)->true();
$actual = $acl->isRole('Administrators');
expect($actual)->true();
$actual = $acl->isResource('Customers');
expect($actual)->true();
$expected = Acl::ALLOW;
$actual = $acl->isAllowed('Administrators', 'Customers', 'search');
expect($actual)->equals($expected);
$expected = Acl::DENY;
$actual = $acl->isAllowed('Administrators', 'Customers', 'destroy');
expect($actual)->equals($expected);
});
}