public function testFileImportSaveMixed()
{
$configs = new Configs($this->getJarves());
$this->setupFiles();
$bundle = new TestsFileImportBundle();
$configStrings = $configs->getXmlConfigsForBundle($bundle);
$configObjects = $configs->parseConfig($configStrings);
$testBundleConfig = $configObjects['testsfileimport'];
$this->assertNotNull($testBundleConfig);
$export = $testBundleConfig->exportFileBased('objects');
$exportCaches = $testBundleConfig->exportFileBased('caches');
$this->assertStringEqualsFile($this->getJarvesObjectsXmlFile(), $export, 'no changes');
$this->assertStringEqualsFile($this->getJarvesXmlFile(), $exportCaches, 'no changes');
$objects = $testBundleConfig->getObjects();
current($objects)->setId('TestChanged');
$testBundleConfig->setObjects($objects);
$caches = $testBundleConfig->getCaches();
$caches[1]->setMethod('testMethod2');
$testBundleConfig->setCaches($caches);
$events = $testBundleConfig->getEvents();
$events[1]->setKey('core/object/updateModified');
$testBundleConfig->setEvents($events);
$this->getConfigurationOperator()->saveFileBased($testBundleConfig, 'objects');
$xml = '<config>
<bundle>
<objects>
<object id="TestChanged">
<label>Test</label>
<storageService>tests.store.core.test</storageService>
<fields>
<field id="id" type="number" primaryKey="true">
<label>ID</label>
</field>
<field id="name" type="text">
<label>Name</label>
</field>
</fields>
</object>
</objects>
</bundle>
</config>';
$this->assertEquals(static::$jarvesObjectsXml, $testBundleConfig->getPropertyFilePath('objects'));
$this->assertStringEqualsFile($this->getRoot() . $testBundleConfig->getPropertyFilePath('objects'), $xml);
$this->assertEquals(static::$jarvesXml, $testBundleConfig->getPropertyFilePath('caches'));
$this->assertEquals(static::$jarvesXml, $testBundleConfig->getPropertyFilePath('events'));
$this->getConfigurationOperator()->saveFileBased($testBundleConfig, 'caches');
$xmlCaches = '<config>
<bundle>
<caches>
<cache>core/contents</cache>
<cache method="testMethod2">core/contents2</cache>
</caches>
<events>
<event key="core/object/modify">
<desc>Fires on every object modification (add/delete/update). Subject is the normalized object key.</desc>
</event>
<event key="core/object/update">
<desc>Fires on every object update. Subject is the normalized object key.</desc>
</event>
</events>
<listeners>
<event key="core/object/modify" subject="core:domain">
<clearCache>core/domains.created</clearCache>
<clearCache>core/domains</clearCache>
</event>
<event key="core/object/modify" subject="core:content">
<clearCache>core/contents</clearCache>
</event>
<event key="core/object/modify" subject="core:node">
<clearCache>core/contents</clearCache>
</event>
</listeners>
</bundle>
</config>';
$this->assertStringEqualsFile($this->getRoot() . $testBundleConfig->getPropertyFilePath('caches'), $xmlCaches);
$this->getConfigurationOperator()->saveFileBased($testBundleConfig, 'events');
$xmlEvents = '<config>
<bundle>
<caches>
<cache>core/contents</cache>
<cache method="testMethod2">core/contents2</cache>
</caches>
<events>
<event key="core/object/modify">
<desc>Fires on every object modification (add/delete/update). Subject is the normalized object key.</desc>
</event>
<event key="core/object/updateModified">
<desc>Fires on every object update. Subject is the normalized object key.</desc>
</event>
</events>
<listeners>
<event key="core/object/modify" subject="core:domain">
<clearCache>core/domains.created</clearCache>
<clearCache>core/domains</clearCache>
</event>
<event key="core/object/modify" subject="core:content">
<clearCache>core/contents</clearCache>
</event>
<event key="core/object/modify" subject="core:node">
<clearCache>core/contents</clearCache>
</event>
</listeners>
</bundle>
</config>';
$this->assertStringEqualsFile($this->getRoot() . $testBundleConfig->getPropertyFilePath('events'), $xmlEvents);
$bundle = new TestsFileImportBundle();
$configStrings = $configs->getXmlConfigsForBundle($bundle);
$configObjects = $configs->parseConfig($configStrings);
$testBundleConfig = $configObjects['testsfileimport'];
$this->assertNotNull($testBundleConfig);
$this->assertCount(1, $testBundleConfig->getObjects());
$this->assertCount(2, $testBundleConfig->getCaches());
$this->assertCount(2, $testBundleConfig->getEvents());
$this->assertEquals('TestChanged', current($testBundleConfig->getObjects())->getId());
$this->assertEquals('testMethod2', $testBundleConfig->getCaches()[1]->getMethod());
$this->assertEquals('core/object/updateModified', $testBundleConfig->getEvents()[1]->getKey());
unlink($this->getJarvesXmlFile());
unlink($this->getJarvesObjectsXmlFile());
}