mirror of
https://github.com/FOSSBilling/FOSSBilling.git
synced 2026-11-09 13:36:07 +09:00
341 lines
12 KiB
PHP
341 lines
12 KiB
PHP
<?php
|
|
|
|
|
|
namespace Box\Mod\Servicedownloadable;
|
|
|
|
|
|
class ServiceTest extends \BBTestCase
|
|
{
|
|
/**
|
|
* @var \Box\Mod\Servicedownloadable\Service
|
|
*/
|
|
protected $service = null;
|
|
|
|
public function setup()
|
|
{
|
|
$this->service = new \Box\Mod\Servicedownloadable\Service();
|
|
}
|
|
|
|
public function testgetDi()
|
|
{
|
|
$di = new \Box_Di();
|
|
$this->service->setDi($di);
|
|
$getDi = $this->service->getDi();
|
|
$this->assertEquals($di, $getDi);
|
|
}
|
|
|
|
public function testattachOrderConfig()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productModel->config = '{"filename" : "temp/asdcxTest.txt"}';
|
|
|
|
$data = array();
|
|
|
|
$expected = array_merge(json_decode($productModel->config, 1), $data);
|
|
|
|
$validatorMock = $this->getMockBuilder('\Box_Validate')->disableOriginalConstructor()->getMock();
|
|
$validatorMock->expects($this->atLeastOnce())
|
|
->method('checkRequiredParamsForArray')
|
|
->will($this->returnValue(null));
|
|
|
|
$di = new \Box_Di();
|
|
$di['validator'] = $validatorMock;
|
|
$this->service->setDi($di);
|
|
$result = $this->service->attachOrderConfig($productModel, $data);
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testaction_create()
|
|
{
|
|
$clientOrderModel = new \Model_ClientOrder();
|
|
$clientOrderModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$clientOrderModel->config = '{"filename" : "temp/asdcxTest.txt"}';
|
|
|
|
$model = new \Model_ServiceDownloadable();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue(1));
|
|
$validatorMock = $this->getMockBuilder('\Box_Validate')->disableOriginalConstructor()->getMock();
|
|
$validatorMock->expects($this->atLeastOnce())
|
|
->method('checkRequiredParamsForArray')
|
|
->will($this->returnValue(null));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['validator'] = $validatorMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->action_create($clientOrderModel);
|
|
$this->assertInstanceOf('\Model_ServiceDownloadable', $result);
|
|
}
|
|
|
|
public function testaction_delete()
|
|
{
|
|
$clientOrderModel = new \Model_ClientOrder();;
|
|
|
|
$orderServiceMock = $this->getMockBuilder('\Box\Mod\Order\Service')->getMock();
|
|
$orderServiceMock->expects($this->atLeastOnce())
|
|
->method('getOrderService')
|
|
->will($this->returnValue(new \Model_ServiceDownloadable()));
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('trash');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['mod_service'] = $di->protect(function () use ($orderServiceMock) { return $orderServiceMock; });
|
|
|
|
$this->service->setDi($di);
|
|
$this->service->action_delete($clientOrderModel);
|
|
}
|
|
|
|
public function testhitDownload()
|
|
{
|
|
$model = new \Model_ServiceDownloadable();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$this->service->hitDownload($model);
|
|
}
|
|
|
|
public function testtoApiArray()
|
|
{
|
|
$model = new \Model_ServiceDownloadable();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$model->filename = 'config.cfg';
|
|
$model->downloads = 1;
|
|
|
|
$filePath = 'path/to/location' . md5($model->filename);
|
|
|
|
$expected = array(
|
|
'path' => $filePath,
|
|
'filename' => $model->filename,
|
|
'downloads' => 1,
|
|
);
|
|
|
|
$productServiceMock = $this->getMockBuilder('\Box\Mod\Product\Service')->getMock();
|
|
$productServiceMock->expects($this->atLeastOnce())
|
|
->method('getSavePath')
|
|
->will($this->returnValue($filePath));
|
|
|
|
$di = new \Box_Di();
|
|
$di['mod_service'] = $di->protect(function () use ($productServiceMock) { return $productServiceMock; });
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->toApiArray($model, null, new \Model_Admin());
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testuploadProductFileErrorUploadingFile()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$successfullyUploadedFileCount = 0;
|
|
$requestMock = $this->getMockBuilder('\Box_Request')->getMock();
|
|
$requestMock->expects($this->atLeastOnce())
|
|
->method('hasFiles')
|
|
->will($this->returnValue($successfullyUploadedFileCount));
|
|
$di = new \Box_Di();
|
|
$di['request'] = $requestMock;
|
|
$this->service->setDi($di);
|
|
|
|
$this->setExpectedException('\Box_Exception', 'Error uploading file');
|
|
$this->service->uploadProductFile($productModel);
|
|
|
|
}
|
|
|
|
public function testuploadProductFile()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$successfullyUploadedFileCount = 1;
|
|
|
|
$file = array(
|
|
'name' => 'test',
|
|
'tmp_name' => '12345',
|
|
);
|
|
$fileMock = new \Box_RequestFile($file);
|
|
|
|
$requestMock = $this->getMockBuilder('\Box_Request')->getMock();
|
|
$requestMock->expects($this->atLeastOnce())
|
|
->method('hasFiles')
|
|
->will($this->returnValue($successfullyUploadedFileCount));
|
|
$requestMock->expects($this->atLeastOnce())
|
|
->method('getUploadedFiles')
|
|
->will($this->returnValue(array($fileMock)));
|
|
|
|
$productServiceMock = $this->getMockBuilder('\Box\Mod\Product\Service')->getMock();
|
|
$productServiceMock->expects($this->atLeastOnce())
|
|
->method('getSavePath');
|
|
$productServiceMock->expects($this->atLeastOnce())
|
|
->method('removeOldFile');
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
$di = new \Box_Di();
|
|
$di['mod_service'] = $di->protect(function () use ($productServiceMock) { return $productServiceMock; });
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
$di['request'] = $requestMock;
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->uploadProductFile($productModel);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testupdateProductFile()
|
|
{
|
|
$orderModel = new \Model_ClientOrder();
|
|
$orderModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$serviceDownloadableModel = new \Model_ServiceDownloadable();
|
|
$serviceDownloadableModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$successfullyUploadedFileCount = 1;
|
|
|
|
$file = array(
|
|
'name' => 'test',
|
|
'tmp_name' => '12345',
|
|
);
|
|
$fileMock = new \Box_RequestFile($file);
|
|
|
|
$requestMock = $this->getMockBuilder('\Box_Request')->getMock();
|
|
$requestMock->expects($this->atLeastOnce())
|
|
->method('hasFiles')
|
|
->will($this->returnValue($successfullyUploadedFileCount));
|
|
$requestMock->expects($this->atLeastOnce())
|
|
->method('getUploadedFiles')
|
|
->will($this->returnValue(array($fileMock)));
|
|
|
|
$productServiceMock = $this->getMockBuilder('\Box\Mod\Product\Service')->getMock();
|
|
$productServiceMock->expects($this->atLeastOnce())
|
|
->method('getSavePath');
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
$di = new \Box_Di();
|
|
$di['mod_service'] = $di->protect(function () use ($productServiceMock) { return $productServiceMock; });
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
$di['request'] = $requestMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->updateProductFile($serviceDownloadableModel, $orderModel);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testupdateProductFileFileNotUploaded()
|
|
{
|
|
$orderModel = new \Model_ClientOrder();
|
|
$orderModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$serviceDownloadableModel = new \Model_ServiceDownloadable();
|
|
$serviceDownloadableModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$successfullyUploadedFileCount = 0;
|
|
$requestMock = $this->getMockBuilder('\Box_Request')->getMock();
|
|
$requestMock->expects($this->atLeastOnce())
|
|
->method('hasFiles')
|
|
->will($this->returnValue($successfullyUploadedFileCount));
|
|
$di = new \Box_Di();
|
|
$di['request'] = $requestMock;
|
|
$this->service->setDi($di);
|
|
|
|
$this->setExpectedException('\Box_Exception', 'Error uploading file');
|
|
$this->service->updateProductFile($serviceDownloadableModel, $orderModel);
|
|
}
|
|
|
|
public function testsendFile()
|
|
{
|
|
$serviceDownloadableModel = new \Model_ServiceDownloadable();
|
|
$serviceDownloadableModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$serviceDownloadableModel->filename = 'config.cfg';
|
|
$serviceDownloadableModel->downloads = 1;
|
|
|
|
$filePath = 'path/to/location' . md5($serviceDownloadableModel->filename);
|
|
|
|
$productServiceMock = $this->getMockBuilder('\Box\Mod\Product\Service')->getMock();
|
|
$productServiceMock->expects($this->atLeastOnce())
|
|
->method('getSavePath')
|
|
->will($this->returnValue($filePath));
|
|
|
|
$toolsMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('fileExists')
|
|
->will($this->returnValue(true));
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['tools'] = $toolsMock;
|
|
$di['logger'] = new \Box_Log();
|
|
$di['mod_service'] = $di->protect(function () use ($productServiceMock) { return $productServiceMock; });
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->sendFile($serviceDownloadableModel);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testsendFileFileDoesNotExists()
|
|
{
|
|
$serviceDownloadableModel = new \Model_ServiceDownloadable();
|
|
$serviceDownloadableModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$serviceDownloadableModel->filename = 'config.cfg';
|
|
$serviceDownloadableModel->downloads = 1;
|
|
|
|
$filePath = 'path/to/location' . md5($serviceDownloadableModel->filename);
|
|
|
|
$productServiceMock = $this->getMockBuilder('\Box\Mod\Product\Service')->getMock();
|
|
$productServiceMock->expects($this->atLeastOnce())
|
|
->method('getSavePath')
|
|
->will($this->returnValue($filePath));
|
|
|
|
$toolsMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('fileExists');
|
|
|
|
|
|
$di = new \Box_Di();
|
|
$di['tools'] = $toolsMock;
|
|
$di['mod_service'] = $di->protect(function () use ($productServiceMock) { return $productServiceMock; });
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$this->setExpectedException('\Box_Exception', 'File can not be downloaded at the moment. Please contact support', 404);
|
|
$this->service->sendFile($serviceDownloadableModel);
|
|
}
|
|
|
|
|
|
}
|
|
|