Util_Settings/tests/SettingsTest.php

227 lines
5.4 KiB
PHP

<?php
/* {{{ Copyright and License Notice
*
* Copyright © 2021 RaBe Websolutions
*
* This file is part of rabe/Util-Settings.
*
* rabe/Util-Settings is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* rabe/Util-Settings is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with rabe/Util-Settings. If not, see <https://www.gnu.org/licenses/>.
*
*///}}}
declare(strict_types=1);
namespace rabe\Util\tests;
use rabe\Util\Settings;
use PHPUnit\Framework\TestCase;
class SettingsTest extends TestCase
{
public function testConstruct()
{
$cfg = new Settings();
$this->assertNotEmpty($cfg);
}
/**
*/
public function testLoadNoFile()
{
$cfg = new Settings();
$this->expectException(\Exception::class);
$cfg->load();
}
/**
*/
public function testReadOnly()
{
$cfg = new Settings();
$this->expectException(\Exception::class);
$cfg->answer = 42;
}
/**
*/
private function appPath(Settings $cfg, string $dir='')
{
if (isset($dir)) $dir .= '/';
$path = dirname(__FILE__).'/cfg/'.$dir;
$cfg->appPath($path);
return $cfg;
}
/**
*/
public function testLoad()
{
$cfg = new Settings();
$cfg = $this->appPath($cfg)->load();
$this->assertNotEmpty($cfg);
return $cfg;
}
/**
* @depends testLoad
*/
public function testMode(Settings $cfg)
{
$this->assertEquals('default', $cfg->testFiles);
$this->assertEquals('prod', $cfg->mode);
}
/**
* @depends testLoad
*/
public function testNestedSettings(Settings $cfg)
{
$nested = $cfg->nested;
$this->assertIsObject($nested);
$this->assertIsIterable($nested);
$this->assertEquals(1, $nested->level);
$this->assertEquals(2, $nested->nested->level);
$this->assertEquals('default', $nested->testFiles);
}
/**
* @depends testLoad
*/
public function testNestedArray(Settings $cfg)
{
$nested = $cfg->nested->toArray();
$this->assertIsArray($nested);
$this->assertIsIterable($nested);
$this->assertEquals(1, $nested['level']);
$this->assertEquals(2, $nested['nested']['level']);
$this->assertEquals('default', $nested['testFiles']);
}
/**
* @depends testLoad
*/
public function testSettingNotFound(Settings $cfg)
{
$this->assertEquals('default', $cfg->testFiles);
$this->expectException(\OutOfRangeException::class);
$cfg->keyDoesNotExist;
}
/**
*/
public function testSiteOverride()
{
$cfg = new Settings();
$cfg = $this->appPath($cfg)->site('site')->load();
$this->assertEquals('default', $cfg->testFiles);
$this->assertEquals('site', $cfg->testFile);
$this->assertEquals(42, $cfg->answer);
}
/**
*/
public function testTestingOverride()
{
$cfg = new Settings();
$cfg = $this->appPath($cfg, 'testing')->load();
$this->assertEquals('testing', $cfg->testFiles);
$this->assertEquals(42, $cfg->answer);
return $cfg;
}
/**
* @depends testTestingOverride
*/
public function testTestingNumArrayOverride(Settings $cfg)
{
$data = [
0 => 'Index0_test',
1 => 'Index1_default',
2 => 'Index2_test',
3 => 'Index3_local',
4 => 'Index4_local',
5 => 'Index5_local',
6 => 'Index6_default',
7 => 'Index7_default',
10 => 'Index10_test'
];
$numArray = $cfg->numArray;
foreach ($numArray as $key => $value)
{
$this->assertEquals($data[$key], $value);
}
}
/**
*/
public function testLocalOverride()
{
$cfg = new Settings();
$cfg = $this->appPath($cfg, 'localOverride')->load();
$this->assertEquals(42, $cfg->answer);
}
/**
* @dataProvider fileNameData
*/
public function testBuildFileName(string $prefix, $type, string $site, string $expected)
{
$path = './config/';
$cfg = new Settings();
$cfg->appPath('./');
if ($prefix !== '') $cfg->prefix($prefix);
if ($site !== '')
{
$cfg->prefix();
$cfg->site($site);
}
$this->assertEquals($path.$expected, $cfg->buildFileName($type));
}
public function fileNameData()
{
return [
// prefix, type, 'site', 'expected'
['', '', '', 'conf.php' ],
['', 'default', '', 'default.conf.php' ],
['', 'testing', '', 'testing.conf.php' ],
['MyPrefix', '', '', 'MyPrefix.conf.php' ],
['MyPrefix', 'default', '', 'MyPrefix.default.conf.php' ],
['MyPrefix', 'testing', '', 'MyPrefix.testing.conf.php' ],
['_', '', '', '_.conf.php' ],
['_', 'default', '', '_.default.conf.php' ],
['_', 'testing', '', '_.testing.conf.php' ],
['1', '', '', '1.conf.php' ],
['1', 'default', '', '1.default.conf.php' ],
['1', 'testing', '', '1.testing.conf.php' ],
['other', '', '', 'other.conf.php' ],
['other', 'default', '', 'other.default.conf.php' ],
['other', 'testing', '', 'other.testing.conf.php' ],
['', 0x01, '13', '13/conf.php' ],
['', 0x01, 'a_site', 'a_site/conf.php' ],
];
}
}
/* jEdit buffer local properties {{{
* :folding=explicit:collapseFolds=1:
}}}*/