class StorageComparerTest

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Config/StorageComparerTest.php \Drupal\Tests\Core\Config\StorageComparerTest
  2. 10 core/tests/Drupal/Tests/Core/Config/StorageComparerTest.php \Drupal\Tests\Core\Config\StorageComparerTest
  3. 11.x core/tests/Drupal/Tests/Core/Config/StorageComparerTest.php \Drupal\Tests\Core\Config\StorageComparerTest

@coversDefaultClass \Drupal\Core\Config\StorageComparer @group Config

Hierarchy

Expanded class hierarchy of StorageComparerTest

File

core/tests/Drupal/Tests/Core/Config/StorageComparerTest.php, line 13

Namespace

Drupal\Tests\Core\Config
View source
class StorageComparerTest extends UnitTestCase {
    
    /**
     * @var \Drupal\Core\Config\StorageInterface|\PHPUnit\Framework\MockObject\MockObject
     */
    protected $sourceStorage;
    
    /**
     * @var \Drupal\Core\Config\StorageInterface|\PHPUnit\Framework\MockObject\MockObject
     */
    protected $targetStorage;
    
    /**
     * The storage comparer to test.
     *
     * @var \Drupal\Core\Config\StorageComparer
     */
    protected $storageComparer;
    
    /**
     * An array of test configuration data keyed by configuration name.
     *
     * @var array
     */
    protected $configData;
    protected function setUp() {
        $this->sourceStorage = $this->createMock('Drupal\\Core\\Config\\StorageInterface');
        $this->targetStorage = $this->createMock('Drupal\\Core\\Config\\StorageInterface');
        $this->storageComparer = new StorageComparer($this->sourceStorage, $this->targetStorage);
    }
    protected function getConfigData() {
        $uuid = new Php();
        // Mock data using minimal data to use ConfigDependencyManger.
        $this->configData = [
            // Simple config that controls configuration sync.
'system.site' => [
                'title' => 'Drupal',
                'uuid' => $uuid->generate(),
            ],
            // Config entity which requires another config entity.
'field.field.node.article.body' => [
                'id' => 'node.article.body',
                'uuid' => $uuid->generate(),
                'dependencies' => [
                    'config' => [
                        'field.storage.node.body',
                    ],
                ],
            ],
            // Config entity which is required by another config entity.
'field.storage.node.body' => [
                'id' => 'node.body',
                'uuid' => $uuid->generate(),
                'dependencies' => [
                    'module' => [
                        'text',
                    ],
                ],
            ],
            // Config entity not which has no dependencies on configuration.
'views.view.test_view' => [
                'id' => 'test_view',
                'uuid' => $uuid->generate(),
                'dependencies' => [
                    'module' => [
                        'node',
                    ],
                ],
            ],
            // Simple config.
'system.performance' => [
                'stale_file_threshold' => 2592000,
            ],
        ];
        return $this->configData;
    }
    
    /**
     * @covers ::createChangelist
     */
    public function testCreateChangelistNoChange() {
        $config_data = $this->getConfigData();
        $config_files = array_keys($config_data);
        $this->sourceStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue($config_files));
        $this->targetStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue($config_files));
        $this->sourceStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($config_data));
        $this->targetStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($config_data));
        $this->sourceStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->targetStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->storageComparer
            ->createChangelist();
        $this->assertEmpty($this->storageComparer
            ->getChangelist('create'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('delete'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('update'));
    }
    
    /**
     * @covers ::createChangelist
     */
    public function testCreateChangelistCreate() {
        $target_data = $source_data = $this->getConfigData();
        unset($target_data['field.storage.node.body']);
        unset($target_data['field.field.node.article.body']);
        unset($target_data['views.view.test_view']);
        $this->sourceStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue(array_keys($source_data)));
        $this->targetStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue(array_keys($target_data)));
        $this->sourceStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($source_data));
        $this->targetStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($target_data));
        $this->sourceStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->targetStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->storageComparer
            ->createChangelist();
        $expected = [
            'field.storage.node.body',
            'field.field.node.article.body',
            'views.view.test_view',
        ];
        $this->assertEquals($expected, $this->storageComparer
            ->getChangelist('create'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('delete'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('update'));
    }
    
    /**
     * @covers ::createChangelist
     */
    public function testCreateChangelistDelete() {
        $target_data = $source_data = $this->getConfigData();
        unset($source_data['field.storage.node.body']);
        unset($source_data['field.field.node.article.body']);
        unset($source_data['views.view.test_view']);
        $this->sourceStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue(array_keys($source_data)));
        $this->targetStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue(array_keys($target_data)));
        $this->sourceStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($source_data));
        $this->targetStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($target_data));
        $this->sourceStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->targetStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->storageComparer
            ->createChangelist();
        $expected = [
            'views.view.test_view',
            'field.field.node.article.body',
            'field.storage.node.body',
        ];
        $this->assertEquals($expected, $this->storageComparer
            ->getChangelist('delete'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('create'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('update'));
    }
    
    /**
     * @covers ::createChangelist
     */
    public function testCreateChangelistUpdate() {
        $target_data = $source_data = $this->getConfigData();
        $source_data['system.site']['title'] = 'Drupal New!';
        $source_data['field.field.node.article.body']['new_config_key'] = 'new data';
        $source_data['field.storage.node.body']['new_config_key'] = 'new data';
        $this->sourceStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue(array_keys($source_data)));
        $this->targetStorage
            ->expects($this->once())
            ->method('listAll')
            ->will($this->returnValue(array_keys($target_data)));
        $this->sourceStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($source_data));
        $this->targetStorage
            ->expects($this->once())
            ->method('readMultiple')
            ->will($this->returnValue($target_data));
        $this->sourceStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->targetStorage
            ->expects($this->once())
            ->method('getAllCollectionNames')
            ->will($this->returnValue([]));
        $this->storageComparer
            ->createChangelist();
        $expected = [
            'field.storage.node.body',
            'field.field.node.article.body',
            'system.site',
        ];
        $this->assertEquals($expected, $this->storageComparer
            ->getChangelist('update'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('create'));
        $this->assertEmpty($this->storageComparer
            ->getChangelist('delete'));
    }
    
    /**
     * @expectedDeprecation The storage comparer does not need a config manager. The parameter is deprecated since version 8.7.0 and will be removed in 9.0.0. Omit the third parameter. See https://www.drupal.org/node/2993271.
     * @group legacy
     */
    public function testConfigManagerDeprecation() {
        $configManager = $this->createMock('Drupal\\Core\\Config\\ConfigManagerInterface');
        new StorageComparer($this->sourceStorage, $this->targetStorage, $configManager);
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title Overrides
PhpunitCompatibilityTrait::getMock Deprecated public function Returns a mock object for the specified class using the available method.
PhpunitCompatibilityTrait::setExpectedException Deprecated public function Compatibility layer for PHPUnit 6 to support PHPUnit 4 code.
StorageComparerTest::$configData protected property An array of test configuration data keyed by configuration name.
StorageComparerTest::$sourceStorage protected property
StorageComparerTest::$storageComparer protected property The storage comparer to test.
StorageComparerTest::$targetStorage protected property
StorageComparerTest::getConfigData protected function
StorageComparerTest::setUp protected function Overrides UnitTestCase::setUp
StorageComparerTest::testConfigManagerDeprecation public function @expectedDeprecation The storage comparer does not need a config manager. The parameter is deprecated since version 8.7.0 and will be removed in 9.0.0. Omit the third parameter. See https://www.drupal.org/node/2993271.
@group legacy
StorageComparerTest::testCreateChangelistCreate public function @covers ::createChangelist
StorageComparerTest::testCreateChangelistDelete public function @covers ::createChangelist
StorageComparerTest::testCreateChangelistNoChange public function @covers ::createChangelist
StorageComparerTest::testCreateChangelistUpdate public function @covers ::createChangelist
UnitTestCase::$randomGenerator protected property The random generator.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::assertArrayEquals protected function Asserts if two arrays are equal by sorting them first.
UnitTestCase::getBlockMockWithMachineName Deprecated protected function Mocks a block with a block plugin. 1
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getRandomGenerator protected function Gets the random generator for the utility methods.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::randomMachineName public function Generates a unique random string containing letters and numbers.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.