/** * @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); }