public function cacheIdentifierPrototypeCanBeOverwritten()
{
$entriesWritten = array();
$mockCache = $this->createMock(FrontendInterface::class);
$mockCache->expects($this->any())->method('get')->will($this->returnCallback(function ($entryIdentifier) use($entriesWritten) {
if (isset($entriesWritten[$entryIdentifier])) {
return $entriesWritten[$entryIdentifier]['data'];
} else {
return false;
}
}));
$mockCache->expects($this->any())->method('has')->will($this->returnCallback(function ($entryIdentifier) use($entriesWritten) {
if (isset($entriesWritten[$entryIdentifier])) {
return true;
} else {
return false;
}
}));
$mockCache->expects($this->atLeastOnce())->method('set')->will($this->returnCallback(function ($entryIdentifier, $data, $tags, $lifetime) use(&$entriesWritten) {
if (!isset($entriesWritten[$entryIdentifier])) {
$entriesWritten[$entryIdentifier] = array('tags' => $tags, 'data' => $data);
}
}));
$this->inject($this->contentCache, 'cache', $mockCache);
$object = new TestModel(42, 'Object value 1');
$view = $this->buildView();
$view->setOption('enableContentCache', true);
$view->setTypoScriptPath('contentCache/entryIdentifierPrototypeCanBeOverwritten');
$view->assign('object', $object);
$view->assign('site', 'site1');
$firstRenderResult = $view->render();
$this->assertSame('Cached segment|Object value 1', $firstRenderResult);
// We overwrote the prototype for cacheIdentifier, so site is not part of the identifier and therefor the same identifier should be created.
$view->assign('site', 'site2');
$secondRenderResult = $view->render();
$this->assertSame($firstRenderResult, $secondRenderResult);
$this->assertCount(1, $entriesWritten);
$this->assertEquals(array('21fe7cb71a709292398e766a9bb45662' => array('tags' => array('site1'), 'data' => 'Cached segment|Object value 1')), $entriesWritten);
}