class StaticMenuLinkOverridesTest

Same name in other branches
  1. 9 core/tests/Drupal/Tests/Core/Menu/StaticMenuLinkOverridesTest.php \Drupal\Tests\Core\Menu\StaticMenuLinkOverridesTest
  2. 10 core/tests/Drupal/Tests/Core/Menu/StaticMenuLinkOverridesTest.php \Drupal\Tests\Core\Menu\StaticMenuLinkOverridesTest
  3. 11.x core/tests/Drupal/Tests/Core/Menu/StaticMenuLinkOverridesTest.php \Drupal\Tests\Core\Menu\StaticMenuLinkOverridesTest

@coversDefaultClass \Drupal\Core\Menu\StaticMenuLinkOverrides @group Menu

Hierarchy

Expanded class hierarchy of StaticMenuLinkOverridesTest

File

core/tests/Drupal/Tests/Core/Menu/StaticMenuLinkOverridesTest.php, line 12

Namespace

Drupal\Tests\Core\Menu
View source
class StaticMenuLinkOverridesTest extends UnitTestCase {
    
    /**
     * Tests the constructor.
     *
     * @covers ::__construct
     */
    public function testConstruct() {
        $config_factory = $this->getConfigFactoryStub([
            'core.menu.static_menu_link_overrides' => [],
        ]);
        $static_override = new StaticMenuLinkOverrides($config_factory);
        $this->assertAttributeEquals($config_factory, 'configFactory', $static_override);
    }
    
    /**
     * Tests the reload method.
     *
     * @covers ::reload
     */
    public function testReload() {
        $config_factory = $this->createMock('Drupal\\Core\\Config\\ConfigFactoryInterface');
        $config_factory->expects($this->at(0))
            ->method('reset')
            ->with('core.menu.static_menu_link_overrides');
        $static_override = new StaticMenuLinkOverrides($config_factory);
        $static_override->reload();
    }
    
    /**
     * Tests the loadOverride method.
     *
     * @dataProvider providerTestLoadOverride
     *
     * @covers ::loadOverride
     * @covers ::getConfig
     */
    public function testLoadOverride($overrides, $id, $expected) {
        $config_factory = $this->getConfigFactoryStub([
            'core.menu.static_menu_link_overrides' => [
                'definitions' => $overrides,
            ],
        ]);
        $static_override = new StaticMenuLinkOverrides($config_factory);
        $this->assertEquals($expected, $static_override->loadOverride($id));
    }
    
    /**
     * Provides test data for testLoadOverride.
     */
    public function providerTestLoadOverride() {
        $data = [];
        // No specified ID.
        $data[] = [
            [
                'test1' => [
                    'parent' => 'test0',
                ],
            ],
            NULL,
            [],
        ];
        // Valid ID.
        $data[] = [
            [
                'test1' => [
                    'parent' => 'test0',
                ],
            ],
            'test1',
            [
                'parent' => 'test0',
            ],
        ];
        // Non existing ID.
        $data[] = [
            [
                'test1' => [
                    'parent' => 'test0',
                ],
            ],
            'test2',
            [],
        ];
        // Ensure that the ID is encoded properly
        $data[] = [
            [
                'test1__la___ma' => [
                    'parent' => 'test0',
                ],
            ],
            'test1.la__ma',
            [
                'parent' => 'test0',
            ],
        ];
        return $data;
    }
    
    /**
     * Tests the loadMultipleOverrides method.
     *
     * @covers ::loadMultipleOverrides
     * @covers ::getConfig
     */
    public function testLoadMultipleOverrides() {
        $overrides = [];
        $overrides['test1'] = [
            'parent' => 'test0',
        ];
        $overrides['test2'] = [
            'parent' => 'test1',
        ];
        $overrides['test1__la___ma'] = [
            'parent' => 'test2',
        ];
        $config_factory = $this->getConfigFactoryStub([
            'core.menu.static_menu_link_overrides' => [
                'definitions' => $overrides,
            ],
        ]);
        $static_override = new StaticMenuLinkOverrides($config_factory);
        $this->assertEquals([
            'test1' => [
                'parent' => 'test0',
            ],
            'test1.la__ma' => [
                'parent' => 'test2',
            ],
        ], $static_override->loadMultipleOverrides([
            'test1',
            'test1.la__ma',
        ]));
    }
    
    /**
     * Tests the saveOverride method.
     *
     * @covers ::saveOverride
     * @covers ::loadOverride
     * @covers ::getConfig
     */
    public function testSaveOverride() {
        $config = $this->getMockBuilder('Drupal\\Core\\Config\\Config')
            ->disableOriginalConstructor()
            ->getMock();
        $config->expects($this->at(0))
            ->method('get')
            ->with('definitions')
            ->will($this->returnValue([]));
        $config->expects($this->at(1))
            ->method('get')
            ->with('definitions')
            ->will($this->returnValue([]));
        $definition_save_1 = [
            'definitions' => [
                'test1' => [
                    'parent' => 'test0',
                    'menu_name' => '',
                    'weight' => 0,
                    'expanded' => FALSE,
                    'enabled' => FALSE,
                ],
            ],
        ];
        $definitions_save_2 = [
            'definitions' => [
                'test1' => [
                    'parent' => 'test0',
                    'menu_name' => '',
                    'weight' => 0,
                    'expanded' => FALSE,
                    'enabled' => FALSE,
                ],
                'test1__la___ma' => [
                    'parent' => 'test1',
                    'menu_name' => '',
                    'weight' => 0,
                    'expanded' => FALSE,
                    'enabled' => FALSE,
                ],
            ],
        ];
        $config->expects($this->at(2))
            ->method('set')
            ->with('definitions', $definition_save_1['definitions'])
            ->will($this->returnSelf());
        $config->expects($this->at(3))
            ->method('save');
        $config->expects($this->at(4))
            ->method('get')
            ->with('definitions')
            ->will($this->returnValue($definition_save_1['definitions']));
        $config->expects($this->at(5))
            ->method('get')
            ->with('definitions')
            ->will($this->returnValue($definition_save_1['definitions']));
        $config->expects($this->at(6))
            ->method('set')
            ->with('definitions', $definitions_save_2['definitions'])
            ->will($this->returnSelf());
        $config->expects($this->at(7))
            ->method('save');
        $config_factory = $this->createMock('Drupal\\Core\\Config\\ConfigFactoryInterface');
        $config_factory->expects($this->once())
            ->method('getEditable')
            ->will($this->returnValue($config));
        $static_override = new StaticMenuLinkOverrides($config_factory);
        $static_override->saveOverride('test1', [
            'parent' => 'test0',
        ]);
        $static_override->saveOverride('test1.la__ma', [
            'parent' => 'test1',
        ]);
    }
    
    /**
     * Tests the deleteOverride and deleteOverrides method.
     *
     * @param array|string $ids
     *   Either a single ID or multiple ones as array.
     * @param array $old_definitions
     *   The definitions before the deleting
     * @param array $new_definitions
     *   The definitions after the deleting.
     *
     * @dataProvider providerTestDeleteOverrides
     */
    public function testDeleteOverrides($ids, array $old_definitions, array $new_definitions) {
        $config = $this->getMockBuilder('Drupal\\Core\\Config\\Config')
            ->disableOriginalConstructor()
            ->getMock();
        $config->expects($this->at(0))
            ->method('get')
            ->with('definitions')
            ->will($this->returnValue($old_definitions));
        // Only save if the definitions changes.
        if ($old_definitions != $new_definitions) {
            $config->expects($this->at(1))
                ->method('set')
                ->with('definitions', $new_definitions)
                ->will($this->returnSelf());
            $config->expects($this->at(2))
                ->method('save');
        }
        $config_factory = $this->createMock('Drupal\\Core\\Config\\ConfigFactoryInterface');
        $config_factory->expects($this->once())
            ->method('getEditable')
            ->will($this->returnValue($config));
        $static_override = new StaticMenuLinkOverrides($config_factory);
        if (is_array($ids)) {
            $static_override->deleteMultipleOverrides($ids);
        }
        else {
            $static_override->deleteOverride($ids);
        }
    }
    
    /**
     * Provides test data for testDeleteOverrides.
     */
    public function providerTestDeleteOverrides() {
        $data = [];
        // Delete a non existing ID.
        $data[] = [
            'test0',
            [],
            [],
        ];
        // Delete an existing ID.
        $data[] = [
            'test1',
            [
                'test1' => [
                    'parent' => 'test0',
                ],
            ],
            [],
        ];
        // Delete an existing ID with a special ID.
        $data[] = [
            'test1.la__ma',
            [
                'test1__la___ma' => [
                    'parent' => 'test0',
                ],
            ],
            [],
        ];
        // Delete multiple IDs.
        $data[] = [
            [
                'test1.la__ma',
                'test1',
            ],
            [
                'test1' => [
                    'parent' => 'test0',
                ],
                'test1__la___ma' => [
                    'parent' => 'test0',
                ],
            ],
            [],
        ];
        return $data;
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary 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.
StaticMenuLinkOverridesTest::providerTestDeleteOverrides public function Provides test data for testDeleteOverrides.
StaticMenuLinkOverridesTest::providerTestLoadOverride public function Provides test data for testLoadOverride.
StaticMenuLinkOverridesTest::testConstruct public function Tests the constructor.
StaticMenuLinkOverridesTest::testDeleteOverrides public function Tests the deleteOverride and deleteOverrides method.
StaticMenuLinkOverridesTest::testLoadMultipleOverrides public function Tests the loadMultipleOverrides method.
StaticMenuLinkOverridesTest::testLoadOverride public function Tests the loadOverride method.
StaticMenuLinkOverridesTest::testReload public function Tests the reload method.
StaticMenuLinkOverridesTest::testSaveOverride public function Tests the saveOverride method.
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.
UnitTestCase::setUp protected function 340

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