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");
}
}
}