1<?php
2
3namespace dokuwiki\plugin\config\test;
4
5use dokuwiki\plugin\config\core\ConfigParser;
6use dokuwiki\plugin\config\core\Loader;
7
8/**
9 * @group plugin_config
10 * @group admin_plugins
11 * @group plugins
12 * @group bundled_plugins
13 */
14class LoaderExtraDefaultsTest extends \DokuWikiTest
15{
16
17    protected $pluginsEnabled = ['testing'];
18
19    protected $oldSetting = [];
20
21    public function setUp(): void
22    {
23        global $config_cascade;
24
25        $out = "<?php\n/*\n * protected settings, cannot modified in the Config manager\n" .
26            " * Some test data */\n";
27        $out .= "\$conf['title'] = 'New default Title';\n";
28        $out .= "\$conf['tagline'] = 'New default Tagline';\n";
29        $out .= "\$conf['plugin']['testing']['schnibble'] = 1;\n";
30        $out .= "\$conf['plugin']['testing']['second'] = 'New default setting';\n";
31
32        $file = DOKU_CONF . 'otherdefaults.php';
33        file_put_contents($file, $out);
34
35        //store original settings
36        $this->oldSetting = $config_cascade['main']['default'];
37        //add second file with defaults, which override the defaults of DokuWiki
38        $config_cascade['main']['default'][] = $file;
39
40        parent::setUp();
41    }
42
43    /**
44     * Ensure loading the defaults work, and that the extra default for plugins provided via an extra main default file
45     * override the plugin defaults as well
46     */
47    public function testDefaultsOverwriting()
48    {
49        $loader = new Loader(new ConfigParser());
50
51        $conf = $loader->loadDefaults();
52        $this->assertTrue(is_array($conf));
53
54        // basic defaults
55        $this->assertArrayHasKey('title', $conf);
56        $this->assertEquals('New default Title', $conf['title']);
57        $this->assertEquals('New default Tagline', $conf['tagline']);
58
59        // plugin defaults
60        $this->assertArrayHasKey('plugin____testing____schnibble', $conf);
61        $this->assertEquals(1, $conf['plugin____testing____schnibble']);
62        $this->assertEquals('New default setting', $conf['plugin____testing____second']);
63
64    }
65
66    public function tearDown(): void
67    {
68        global $config_cascade;
69
70        $config_cascade['main']['default'] = $this->oldSetting;
71        unlink(DOKU_CONF . 'otherdefaults.php');
72
73        parent::tearDown();
74    }
75
76}
77