/** * @test * @functional * @dataProvider testSettingsDataProvider */ public function testSaveOnlyModifiedSettings($entityId, $newSettings) { /* @var $entity TestEntity2 */ $entity = TestEntity2::findPk($entityId); $composition = array_merge($entity->settings->getArrayCopy(), ...$newSettings); /* @var $entities TestEntity2[] */ foreach ($newSettings as $idx => $settings) { $entities[$idx] = TestEntity2::findPk($entityId); //imitate reading properties $entity->settings->load(); } foreach ($newSettings as $idx => $settings) { $entity = $entities[$idx]; foreach ($settings as $name => $value) { $entity->settings[$name] = $value; } $entity->save(); } $entity = TestEntity2::findPk($entityId); $settings = $entity->settings->getArrayCopy(); foreach ($composition as $name => $value) { if ($value === false) { $this->assertArrayNotHasKey($name, $settings, "Setting '{$name}' not deleted"); } else { $this->assertArrayHasKey($name, $settings, "Missed setting '{$name}'"); $this->assertEquals($value, $settings[$name], "Setting '{$name}' has wrong value"); } } }