mirror of
https://github.com/FOSSBilling/FOSSBilling.git
synced 2026-11-09 13:36:07 +09:00
456 lines
16 KiB
PHP
456 lines
16 KiB
PHP
<?php
|
|
|
|
|
|
namespace Box\Mod\Theme;
|
|
|
|
|
|
class ServiceTest extends \PHPUnit_Framework_TestCase {
|
|
/**
|
|
* @var \Box\Mod\Theme\Service
|
|
*/
|
|
protected $service = null;
|
|
|
|
public function setup()
|
|
{
|
|
$this->service= new \Box\Mod\Theme\Service();
|
|
}
|
|
|
|
|
|
public function testgetDi()
|
|
{
|
|
$di = new \Box_Di();
|
|
$this->service->setDi($di);
|
|
$getDi = $this->service->getDi();
|
|
$this->assertEquals($di, $getDi);
|
|
}
|
|
|
|
public function testgetTheme()
|
|
{
|
|
$result = $this->service->getTheme('boxbilling');
|
|
$this->assertInstanceOf('\Box\Mod\Theme\Model\Theme', $result);
|
|
}
|
|
|
|
public function testgetCurrentThemePreset()
|
|
{
|
|
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Theme\Service')
|
|
->setMethods(array('setCurrentThemePreset'))
|
|
->getMock();
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('setCurrentThemePreset');
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getCell')
|
|
->will($this->returnValue(array()));
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getCurrentPreset')
|
|
->will($this->returnValue('CurrentPresetString'));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['theme'] = $di->protect(function () use($themeMock) { return $themeMock; });
|
|
$di['db'] = $dbMock;
|
|
|
|
$serviceMock->setDi($di);
|
|
$result = $serviceMock->getCurrentThemePreset($themeMock);
|
|
$this->assertInternalType('string', $result);
|
|
}
|
|
|
|
public function testsetCurrentThemePreset()
|
|
{
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('exec');
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['theme'] = $di->protect(function () use($themeMock) { return $themeMock; });
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->setCurrentThemePreset($themeMock, 'dark_blue');
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testdeletePreset()
|
|
{
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('exec');
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['theme'] = $di->protect(function () use($themeMock) { return $themeMock; });
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->deletePreset($themeMock, 'dark_blue');
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testgetThemePresets()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Theme\Service')
|
|
->setMethods(array('updateSettings'))
|
|
->getMock();
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('updateSettings');
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAssoc');
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
|
|
$corePresets = array(
|
|
'default' => array(),
|
|
'red_black' => array(),
|
|
);
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPresetsFromSettingsDataFile')
|
|
->will($this->returnValue($corePresets));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['theme'] = $di->protect(function () use($themeMock) { return $themeMock; });
|
|
$di['db'] = $dbMock;
|
|
|
|
$serviceMock->setDi($di);
|
|
$result = $serviceMock->getThemePresets($themeMock, 'dark_blue');
|
|
$this->assertInternalType('array', $result);
|
|
|
|
$expected= array(
|
|
'default' => 'default',
|
|
'red_black' => 'red_black',
|
|
);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testgetThemePresets_themeDoNotHaveSettingsDataFile()
|
|
{
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAssoc');
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPresetsFromSettingsDataFile')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['theme'] = $di->protect(function () use($themeMock) { return $themeMock; });
|
|
$di['db'] = $dbMock;
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->getThemePresets($themeMock, 'dark_blue');
|
|
$this->assertInternalType('array', $result);
|
|
|
|
$expected= array(
|
|
'Default' => 'Default',
|
|
);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testgetThemeSettings()
|
|
{
|
|
$extensionMetaModel = new \Model_ExtensionMeta();
|
|
$extensionMetaModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$extensionMetaModel->meta_value = '{}';
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue($extensionMetaModel));
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getThemeSettings($themeMock, 'default');
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testgetThemeSettingsWithEmptyPresets()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Theme\Service')
|
|
->setMethods(array('getCurrentThemePreset'))
|
|
->getMock();
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getCurrentThemePreset')
|
|
->will($this->returnValue('default'));
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue(null));
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPresetFromSettingsDataFile')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['db'] = $dbMock;
|
|
$serviceMock->setDi($di);
|
|
|
|
$result = $serviceMock->getThemeSettings($themeMock);
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals(array(), $result);
|
|
}
|
|
|
|
public function testupdateSettings()
|
|
{
|
|
$extensionMetaModel = new \Model_ExtensionMeta();
|
|
$extensionMetaModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue(null));
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->returnValue($extensionMetaModel));
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getName')
|
|
->will($this->returnValue('default'));
|
|
|
|
$di = new \Box_Di();
|
|
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$params = array();
|
|
$result = $this->service->updateSettings($themeMock, 'default', $params);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testregenerateThemeSettingsDataFile()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Theme\Service')
|
|
->setMethods(array('getThemePresets', 'getThemeSettings', 'getCurrentThemePreset'))
|
|
->getMock();
|
|
|
|
$presets = array(
|
|
'default' => 'Defaults',
|
|
'red_black' => 'Red Black',
|
|
);
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getThemePresets')
|
|
->will($this->returnValue($presets));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getThemeSettings')
|
|
->will($this->returnValue(array()));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getCurrentThemePreset')
|
|
->will($this->returnValue('default'));
|
|
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPathSettingsDataFile')
|
|
->will($this->returnValue('location/Of/Assets/file'));
|
|
|
|
$toolsMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('file_put_contents');
|
|
|
|
$di = new \Box_Di();
|
|
$di['tools'] = $toolsMock;
|
|
|
|
$serviceMock->setDi($di);
|
|
$result = $serviceMock->regenerateThemeSettingsDataFile($themeMock);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
|
|
}
|
|
|
|
public function testregenerateThemeCssAndJsFiles_EmptyFiles()
|
|
{
|
|
$toolsMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('glob')
|
|
->will($this->returnValue(array()));
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPathAssets')
|
|
->will($this->returnValue('location/Of/'));
|
|
|
|
$di = new \Box_Di();
|
|
$di['tools'] = $toolsMock;
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->regenerateThemeCssAndJsFiles($themeMock, 'default', new \Model_Admin());
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testregenerateThemeCssAndJsFiles()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Theme\Service')
|
|
->setMethods(array('getThemeSettings'))
|
|
->getMock();
|
|
|
|
$presets = array(
|
|
'default' => 'Defaults',
|
|
'red_black' => 'Red Black',
|
|
);
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getThemeSettings')
|
|
->will($this->returnValue($presets));
|
|
|
|
$toolsMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('glob')
|
|
->will($this->onConsecutiveCalls(array('css.css'), array('js.js')));
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('file_put_contents');
|
|
|
|
$systemServiceMock = $this->getMockBuilder('\Box\Mod\System\Service')->getMock();
|
|
$systemServiceMock->expects($this->atLeastOnce())
|
|
->method('renderString')
|
|
->will($this->returnValue('renderedString'));
|
|
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPathAssets')
|
|
->will($this->returnValue('location/Of/'));
|
|
|
|
$di = new \Box_Di();
|
|
$di['tools'] = $toolsMock;
|
|
$di['mod_service'] = $di->protect(function() use($systemServiceMock) {return $systemServiceMock;});
|
|
$serviceMock->setDi($di);
|
|
|
|
$result = $serviceMock->regenerateThemeCssAndJsFiles($themeMock, 'default', new \Model_Admin());
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testgetCurrentAdminAreaTheme()
|
|
{
|
|
$configMock = array(
|
|
'url' => 'boxbilling.com/'
|
|
);
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getCell')
|
|
->will($this->returnValue(''));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['config'] = $configMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result =$this->service->getCurrentAdminAreaTheme();
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testgetCurrentClientAreaTheme()
|
|
{
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Theme\Service')
|
|
->setMethods(array('getCurrentClientAreaThemeCode', 'getTheme'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getCurrentClientAreaThemeCode');
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getTheme')
|
|
->will($this->returnValue($themeMock));
|
|
|
|
$result = $serviceMock->getCurrentClientAreaTheme();
|
|
$this->assertInstanceOf('\Box\Mod\Theme\Model\Theme', $result);
|
|
}
|
|
|
|
public function testgetCurrentClientAreaThemeCode()
|
|
{
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getCell')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->getCurrentClientAreaThemeCode();
|
|
$this->assertInternalType('string', $result);
|
|
$this->assertEquals('boxbilling', $result);
|
|
}
|
|
|
|
public function testuploadAssets()
|
|
{
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPathAssets');
|
|
$files = array(
|
|
'test2' => array(
|
|
'error' => UPLOAD_ERR_NO_FILE
|
|
),
|
|
'test1' => array(
|
|
'error' => UPLOAD_ERR_OK,
|
|
'tmp_name' => 'tempName',
|
|
),
|
|
);
|
|
$this->service->uploadAssets($themeMock, $files);
|
|
}
|
|
|
|
public function testuploadAssets_Exception()
|
|
{
|
|
$themeMock = $this->getMockBuilder('\Box\Mod\Theme\Model\Theme')->disableOriginalConstructor()->getMock();
|
|
$themeMock->expects($this->atLeastOnce())
|
|
->method('getPathAssets');
|
|
$files = array(
|
|
'test0' => array(
|
|
'error' => UPLOAD_ERR_CANT_WRITE
|
|
),
|
|
);
|
|
$this->setExpectedException('\Box_Exception', sprintf("Error uploading file %s Error code: %d", 'test0', UPLOAD_ERR_CANT_WRITE));
|
|
$this->service->uploadAssets($themeMock, $files);
|
|
}
|
|
|
|
}
|
|
|