/**
* @dataProvider setDimensionsInput
* @test
* @param array $setValues The values passed to the transformation
* @param array $expectedValues The values that are expected to be set on the node
* @param array $configuredDimensions Optional set of dimensions "configured in the system"
*/
public function setDimensionsWorksAsExpected(array $setValues, array $expectedValues, array $configuredDimensions = null)
{
$transformation = new SetDimensions();
$transformation->setAddDefaultDimensionValues($configuredDimensions !== null);
$transformation->setDimensionValues($setValues);
if ($configuredDimensions !== null) {
$configuredDimensionObjects = array();
foreach ($configuredDimensions as $dimensionIdentifier => $dimensionDefault) {
$configuredDimensionObjects[] = new ContentDimension($dimensionIdentifier, $dimensionDefault);
}
$mockContentDimensionRepository = $this->getMockBuilder(ContentDimensionRepository::class)->getMock();
$mockContentDimensionRepository->expects($this->atLeastOnce())->method('findAll')->will($this->returnValue($configuredDimensionObjects));
$this->inject($transformation, 'contentDimensionRepository', $mockContentDimensionRepository);
}
$expected = array('count' => count($expectedValues), 'dimensions' => $expectedValues);
$mockNode = $this->getMockBuilder(NodeData::class)->disableOriginalConstructor()->getMock();
$mockNode->expects($this->once())->method('setDimensions')->with($this->callback(function (array $dimensions) use($expected) {
if (count($dimensions) === $expected['count']) {
$simplifiedDimensions = array();
foreach ($dimensions as $dimension) {
if (!$dimension instanceof NodeDimension) {
return false;
}
$simplifiedDimensions[] = array($dimension->getName() => $dimension->getValue());
}
if ($expected['dimensions'] === $simplifiedDimensions) {
return true;
}
}
return false;
}));
$transformation->execute($mockNode);
}