mirror of
https://github.com/FOSSBilling/FOSSBilling.git
synced 2026-11-09 21:43:22 +09:00
1091 lines
34 KiB
PHP
1091 lines
34 KiB
PHP
<?php
|
|
|
|
|
|
namespace Box\Mod\Product;
|
|
|
|
|
|
class ServiceTest extends \PHPUnit_Framework_TestCase {
|
|
/**
|
|
* @var \Box\Mod\Product\Service
|
|
*/
|
|
protected $service = null;
|
|
|
|
public function setup()
|
|
{
|
|
$this->service= new \Box\Mod\Product\Service();
|
|
}
|
|
|
|
|
|
public function testgetDi()
|
|
{
|
|
$di = new \Box_Di();
|
|
$this->service->setDi($di);
|
|
$getDi = $this->service->getDi();
|
|
$this->assertEquals($di, $getDi);
|
|
}
|
|
|
|
|
|
public function testgetPairs()
|
|
{
|
|
$data = array(
|
|
'type' => 'domain',
|
|
'products_only' => true,
|
|
'active_only' => true
|
|
);
|
|
|
|
$execArray = array(
|
|
array(
|
|
'id' => 1,
|
|
'title' => 'title4test',
|
|
),
|
|
);
|
|
|
|
$expectArray = array(
|
|
'1' => 'title4test',
|
|
);
|
|
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue($execArray));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->getPairs($data);
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expectArray, $result);
|
|
}
|
|
|
|
public function testtoApiArray()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Product\Service')
|
|
->setMethods(array(
|
|
'getAddonsApiArray',
|
|
'getStartingFromPrice',
|
|
'getUpgradablePairs',
|
|
'toProductPaymentApiArray',))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->any())
|
|
->method('getAddonsApiArray');
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getStartingFromPrice');
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getUpgradablePairs');
|
|
$productPaymentArray = array(
|
|
'type' => 'free',
|
|
\Model_ProductPayment::FREE => array('price'=>0, 'setup'=>0),
|
|
\Model_ProductPayment::ONCE => array('price'=>1, 'setup'=>10),
|
|
\Model_ProductPayment::RECURRENT => array(),
|
|
);
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('toProductPaymentApiArray')
|
|
->will($this->returnValue($productPaymentArray));
|
|
|
|
$model = new \Model_Product();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
$model->product_category_id = 1;
|
|
$model->product_payment_id = 2;
|
|
$model->config = '{}';
|
|
|
|
$modelProductCategory = new \Model_ProductCategory();
|
|
$modelProductCategory->loadBean(new \RedBeanPHP\OODBBean());
|
|
$modelProductCategory->type = 'free';
|
|
|
|
$modelProductPayment = new \Model_ProductPayment();
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('load')
|
|
->will($this->onConsecutiveCalls($modelProductPayment, $modelProductCategory));
|
|
|
|
$toolsMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolsMock->expects($this->atLeastOnce())
|
|
->method('decodeJ')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['tools'] = $toolsMock;
|
|
$di['mod_service'] = $di->protect(function () use($serviceMock){ return $serviceMock;});
|
|
|
|
$model->setDi($di);
|
|
$serviceMock->setDi($di);
|
|
|
|
$result = $serviceMock->toApiArray($model, true, new \Model_Admin());
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testgetTypes()
|
|
{
|
|
$modArray = array(
|
|
'servicecustomtest'
|
|
);
|
|
|
|
$expectedArray = array(
|
|
'custom' => 'Custom',
|
|
'license' => 'License',
|
|
'downloadable' => 'Downloadable',
|
|
'hosting' => 'Hosting',
|
|
'domain' => 'Domain',
|
|
);
|
|
|
|
$expectedArray['customtest'] = 'Customtest';
|
|
|
|
|
|
$extensionServiceMock = $this->getMockBuilder('\Box\Mod\Extension\Service')->getMock();
|
|
$extensionServiceMock->expects($this->atLeastOnce())
|
|
->method('getInstalledMods')
|
|
->will($this->returnValue($modArray));
|
|
|
|
|
|
$di = new \Box_Di();
|
|
$di['mod_service'] = $di->protect(function() use ($extensionServiceMock) {return $extensionServiceMock;});
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getTypes();
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expectedArray, $result);
|
|
}
|
|
|
|
public function testgetMainDomainProduct()
|
|
{
|
|
$model = new \Model_Product();
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue($model));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->getMainDomainProduct();
|
|
$this->assertInstanceOf('\Model_Product', $result);
|
|
}
|
|
|
|
public function testgetPaymentTypes()
|
|
{
|
|
$expected = array(
|
|
'free' => 'Free',
|
|
'once' => 'One time',
|
|
'recurrent' => 'Recurrent',
|
|
);
|
|
|
|
$result = $this->service->getPaymentTypes();
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testcreateProduct()
|
|
{
|
|
$systemServiceMock = $this->getMockBuilder('\Box\Mod\System\Service')->getMock();
|
|
$systemServiceMock->expects($this->atLeastOnce())
|
|
->method('checkLimits');
|
|
|
|
$modelPayment = new \Model_ProductPayment();
|
|
$modelPayment->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$newProductId = 1;
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getCell')
|
|
->will($this->returnValue(0));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->onConsecutiveCalls($modelPayment, $modelProduct));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue($newProductId));
|
|
|
|
$toolMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolMock->expects($this->atLeastOnce())
|
|
->method('slug');
|
|
|
|
$di = new \Box_Di();
|
|
$di['mod_service'] = $di->protect(function() use ($systemServiceMock) {return $systemServiceMock;});
|
|
$di['db'] = $dbMock;
|
|
$di['tools'] = $toolMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->createProduct('title', 'domain');
|
|
$this->assertInternalType('int', $result);
|
|
$this->assertEquals($newProductId, $result);
|
|
|
|
}
|
|
|
|
public function testupdateProductMissngPricingType()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Product\Service')
|
|
->setMethods(array('getPaymentTypes'))
|
|
->getMock();
|
|
|
|
$typesArr = array(
|
|
'free' => 'Free',
|
|
'once' => 'One time',
|
|
'recurrent' => 'Recurrent',
|
|
);
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getPaymentTypes')
|
|
->will($this->returnValue($typesArr));
|
|
|
|
$data = array(
|
|
'pricing' => array(
|
|
|
|
),
|
|
);
|
|
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$this->setExpectedException('\Box_Exception', 'Pricing type is required');
|
|
$serviceMock->updateProduct($modelProduct, $data);
|
|
}
|
|
|
|
public function testupdateProduct()
|
|
{
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Product\Service')
|
|
->setMethods(array('getPaymentTypes'))
|
|
->getMock();
|
|
|
|
$typesArr = array(
|
|
'free' => 'Free',
|
|
'once' => 'One time',
|
|
'recurrent' => 'Recurrent',
|
|
);
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getPaymentTypes')
|
|
->will($this->returnValue($typesArr));
|
|
|
|
$data = array(
|
|
'pricing' => array(
|
|
'type' => \Model_ProductPayment::RECURRENT,
|
|
\Model_ProductPayment::RECURRENT => array(
|
|
array(
|
|
'1W' => array(
|
|
'setup' => '',
|
|
'price' => '',
|
|
'enabled' => true,
|
|
)
|
|
)
|
|
)
|
|
),
|
|
'config' => array(),
|
|
'product_category_id' => 1,
|
|
'form_id' => 10,
|
|
'icon_url' => 'http://www.google.com',
|
|
'status' => false,
|
|
'hidden' => 0,
|
|
'slug' => 'product/0',
|
|
'setup' => 'test',
|
|
'upgrades' => array(),
|
|
'addons' => array(),
|
|
'title' => 'new Title',
|
|
'stock_control' => false,
|
|
'allow_quantity_select' => false,
|
|
'quantity_in_stock' => 0,
|
|
'description' => 'Product description',
|
|
'plugin' => 'plug in',
|
|
);
|
|
|
|
$modelProductPayment = new \Model_ProductPayment();
|
|
$modelProductPayment->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('load')
|
|
->will($this->returnValue($modelProductPayment));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue(1));
|
|
|
|
$toolMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolMock->expects($this->atLeastOnce())
|
|
->method('decodeJ')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['tools'] = $toolMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$serviceMock->setDi($di);
|
|
|
|
$result = $serviceMock->updateProduct($modelProduct, $data);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testupdatePriority()
|
|
{
|
|
$data = array(
|
|
'priority' => array(
|
|
1 => 10,
|
|
5 => 1,
|
|
),
|
|
);
|
|
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('load')
|
|
->will($this->returnValue($modelProduct));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->updatePriority($data);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testupdateConfig()
|
|
{
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
$modelProduct->config = '{"settings":5,"max":"10"}';
|
|
|
|
|
|
$data = array(
|
|
'config' => array(
|
|
'settings' => 3,
|
|
'max' => '',
|
|
),
|
|
'new_config_name' => 'newParam',
|
|
'new_config_value' => 'newValue',
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->updateConfig($modelProduct, $data);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testgetAddons()
|
|
{
|
|
$addonsRows = array(
|
|
array(
|
|
'id' => 1,
|
|
'title' => 'testTitle',
|
|
),
|
|
);
|
|
|
|
$expected = array(
|
|
1 => 'testTitle',
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue($addonsRows));
|
|
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->getAddons();
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testcreateAddon()
|
|
{
|
|
$newProductId = 1;
|
|
|
|
$modelPayment = new \Model_ProductPayment();
|
|
$modelPayment->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue($newProductId ));
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->onConsecutiveCalls($modelPayment, $modelProduct));
|
|
|
|
$toolMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolMock->expects($this->atLeastOnce())
|
|
->method('slug');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
$di['tools'] = $toolMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->createAddon('title');
|
|
$this->assertInternalType('int', $result);
|
|
$this->assertEquals($newProductId, $result);
|
|
}
|
|
|
|
public function testdeleteProductActivaOrderException()
|
|
{
|
|
$model = new \Model_Product();
|
|
|
|
$orderServiceMock = $this->getMockBuilder('\Box\Mod\Order\Service')->getMock();
|
|
$orderServiceMock->expects($this->atLeastOnce())
|
|
->method('productHasOrders')
|
|
->will($this->returnValue(true));
|
|
|
|
$di = new \Box_Di();
|
|
$di['mod_service'] = $di->protect(function() use ($orderServiceMock) {return $orderServiceMock;});
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$this->setExpectedException('\Box_Exception', 'Can not remove product which has active orders.');
|
|
$this->service->deleteProduct($model);
|
|
}
|
|
|
|
public function testgetProductCategoryPairs()
|
|
{
|
|
$execArray = array(
|
|
array(
|
|
'id' => 1,
|
|
'title' => 'title4test',
|
|
),
|
|
);
|
|
|
|
$expectArray = array(
|
|
'1' => 'title4test',
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue($execArray ));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getProductCategoryPairs();
|
|
$this->assertInternalType('array',$result);
|
|
$this->assertEquals($expectArray, $result);
|
|
}
|
|
|
|
public function testupdateCategory()
|
|
{
|
|
$model = new \Model_ProductCategory();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue(1));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->updateCategory($model, 'title', 'decription', 'http://urltoimg.com/img.jpg');
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
|
|
}
|
|
|
|
public function testcreateCategory()
|
|
{
|
|
$newCategoryId = 1;
|
|
|
|
$systemServiceMock = $this->getMockBuilder('\Box\Mod\System\Service')->getMock();
|
|
$systemServiceMock->expects($this->atLeastOnce())
|
|
->method('checkLimits');
|
|
|
|
$model = new \Model_ProductCategory();
|
|
$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($newCategoryId));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['mod_service'] = $di->protect(function() use ($systemServiceMock) {return $systemServiceMock;});
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->createCategory('title');
|
|
|
|
$this->assertInternalType('int', $result);
|
|
$this->assertEquals($newCategoryId, $result);
|
|
}
|
|
|
|
public function testremoveProductCategoryCategoryHasProductsException()
|
|
{
|
|
$modelProductCategory = new \Model_ProductCategory();
|
|
$modelProductCategory->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue($modelProduct));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$this->setExpectedException('\Box_Exception', 'Can not remove product category with products');
|
|
$this->service->removeProductCategory($modelProductCategory);
|
|
|
|
}
|
|
|
|
public function testremoveProductCategory()
|
|
{
|
|
$modelProductCategory = new \Model_ProductCategory();
|
|
$modelProductCategory->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$modelProduct = null;
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue($modelProduct));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('trash');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->removeProductCategory($modelProductCategory);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testgetPromoSearchQuery()
|
|
{
|
|
$data = array(
|
|
'search' => 'keyword',
|
|
'id' => 1,
|
|
'status' => 'active',
|
|
);
|
|
|
|
list($sql, $params) = $this->service->getPromoSearchQuery($data);
|
|
|
|
$this->assertInternalType('string', $sql);
|
|
$this->assertInternalType('array', $params);
|
|
}
|
|
|
|
public function testcreatePromo()
|
|
{
|
|
$systemServiceMock = $this->getMockBuilder('\Box\Mod\System\Service')->getMock();
|
|
$systemServiceMock->expects($this->atLeastOnce())
|
|
->method('checkLimits');
|
|
|
|
$model = new \Model_Promo();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$newPromoId = 1;
|
|
|
|
$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($newPromoId));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['mod_service'] = $di->protect(function() use ($systemServiceMock) {return $systemServiceMock;});
|
|
$di['logger'] = new \Box_Log();
|
|
$di['array_get'] = $di->protect(function (array $array, $key, $default = '') use ($di) {
|
|
return isset ($array[$key]) ? $array[$key] : $default;
|
|
});
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->createPromo('code', 'percentage', 50, array(), array(), array(), array());
|
|
$this->assertInternalType('int', $result);
|
|
$this->assertEquals($newPromoId, $result);
|
|
}
|
|
|
|
public function testtoPromoApiArray()
|
|
{
|
|
$model = new \Model_Promo();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
$model->products ='{}';
|
|
$model->periods ='{}';
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('toArray')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['tools'] = $this->getMockBuilder('\Box_Tools')->getMock();;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->toPromoApiArray($model);
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testupdatePromo()
|
|
{
|
|
$model = new \Model_Promo();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$data = array(
|
|
'code' => 'GO',
|
|
'type' => 'absolute',
|
|
'value' => 10,
|
|
'active' => true,
|
|
'freesetup' => true,
|
|
'once_per_client' => true,
|
|
'recurring' => false,
|
|
'maxuses' => '1',
|
|
'used' => '0',
|
|
'start_at' => '2012-01-01',
|
|
'end_at' => '2012-01-02',
|
|
'products' => 'domain',
|
|
'periods' => array(),
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
$di['array_get'] = $di->protect(function (array $array, $key, $default = '') use ($di) {
|
|
return isset ($array[$key]) ? $array[$key] : $default;
|
|
});
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->updatePromo($model, $data);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testdeletePromo()
|
|
{
|
|
$model = new \Model_Promo();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('exec');
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('trash');
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->deletePromo($model);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testgetProductSearchQuery()
|
|
{
|
|
$data = array(
|
|
'search' => 'keyword',
|
|
'type' => 'domain',
|
|
'status' => 'active',
|
|
'show_hidden' => true,
|
|
);
|
|
|
|
list($sql, $params) = $this->service->getProductSearchQuery($data);
|
|
|
|
$this->assertInternalType('string', $sql);
|
|
$this->assertInternalType('array', $params);
|
|
}
|
|
|
|
public function testtoProductCategoryApiArray()
|
|
{
|
|
$model = new \Model_ProductCategory();
|
|
$model->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$modelProduct = new \Model_Product();
|
|
$modelProduct->loadBean(new \RedBeanPHP\OODBBean());
|
|
$modelProduct->type = 'custom';
|
|
$categoryProductsArr = array(
|
|
$modelProduct
|
|
);
|
|
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Product\Service')
|
|
->setMethods(array('getCategoryProducts', 'toApiArray'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getCategoryProducts')
|
|
->will($this->returnValue($categoryProductsArr));
|
|
|
|
$apiArrayResult = array(
|
|
'price_starting_from' => 1,
|
|
);
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('toApiArray')
|
|
->will($this->returnValue($apiArrayResult));
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('toArray')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$serviceMock->setDi($di);
|
|
$result = $serviceMock->toProductCategoryApiArray($model);
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testfindOneActiveById()
|
|
{
|
|
$model = new \Model_Product();
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue($model));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->findOneActiveById(1);
|
|
$this->assertInstanceOf('\Model_Product', $result);
|
|
|
|
}
|
|
|
|
public function testfindOneActiveBySlug()
|
|
{
|
|
$model = new \Model_Product();
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue($model));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->findOneActiveBySlug('product/1');
|
|
$this->assertInstanceOf('\Model_Product', $result);
|
|
}
|
|
|
|
public function testgetProductCategorySearchQuery()
|
|
{
|
|
list($sql, $params) = $this->service->getProductCategorySearchQuery(array());
|
|
|
|
$this->assertInternalType('string', $sql);
|
|
$this->assertInternalType('array', $params);
|
|
$this->assertEquals(array(), $params);
|
|
}
|
|
|
|
public function testgetStartingFromPriceTypeFree()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productModel->product_payment_id = 1;
|
|
|
|
$productPaymentModel = new \Model_ProductPayment();
|
|
$productPaymentModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productPaymentModel->type = 'free';
|
|
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('load')
|
|
->will($this->returnValue($productPaymentModel));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getStartingFromPrice($productModel);
|
|
|
|
$this->assertInternalType('int', $result);
|
|
$this->assertEquals('0', $result);
|
|
}
|
|
|
|
public function testgetStartingFromPricePaymentNotDefined()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$result = $this->service->getStartingFromPrice($productModel);
|
|
|
|
$this->assertEquals(null, $result);
|
|
}
|
|
|
|
public function testgetUpgradablePairs()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productModel->upgrades = '{}';
|
|
|
|
$expected = array();
|
|
|
|
$result = $this->service->getUpgradablePairs($productModel);
|
|
$this->assertInternalType('array', $result);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testgetProductTitlesByIds()
|
|
{
|
|
$ids = array('1', '2');
|
|
|
|
$queryArr = array(
|
|
array(
|
|
'id' => '1',
|
|
'titile' => 'test',
|
|
),
|
|
array(
|
|
'id' => '2',
|
|
'titile' => 'Another',
|
|
),
|
|
);
|
|
|
|
$expected = array(
|
|
'1' => 'test',
|
|
'2' => 'Another',
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->getProductTitlesByIds($ids);
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testgetCategoryProducts()
|
|
{
|
|
$productCategoryModel = new \Model_ProductCategory();
|
|
$productCategoryModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$productModel = new \Model_Product();
|
|
$productModel ->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('find')
|
|
->will($this->returnValue(array($productModel)));
|
|
|
|
$di = new \Box_Di();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getCategoryProducts($productCategoryModel);
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testtoProductPaymentApiArray()
|
|
{
|
|
$productPaymentModel = new \Model_ProductPayment();
|
|
$productPaymentModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
|
|
$result = $this->service->toProductPaymentApiArray($productPaymentModel);
|
|
$this->assertInternalType('array', $result);
|
|
}
|
|
|
|
public function testgetStartingPrice()
|
|
{
|
|
$productPaymentModel = new \Model_ProductPayment();
|
|
$productPaymentModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productPaymentModel->type = 'recurrent';
|
|
|
|
$minPrice = 1;
|
|
|
|
$productPaymentModel->w_enabled = true;
|
|
$productPaymentModel->w_price = 2;
|
|
$productPaymentModel->m_enabled = true;
|
|
$productPaymentModel->m_price = 4;
|
|
$productPaymentModel->q_enabled = true;
|
|
$productPaymentModel->q_price = 8;
|
|
$productPaymentModel->b_enabled = true;
|
|
$productPaymentModel->b_price = $minPrice;
|
|
$productPaymentModel->a_enabled = true;
|
|
$productPaymentModel->a_price = 10;
|
|
$productPaymentModel->bia_enabled = true;
|
|
$productPaymentModel->bia_price = 12;
|
|
$productPaymentModel->tria_enabled = true;
|
|
$productPaymentModel->tria_price = 14;
|
|
|
|
$result = $this->service->getStartingPrice($productPaymentModel);
|
|
$this->assertInternalType('int', $result);
|
|
$this->assertEquals($minPrice, $result);
|
|
}
|
|
|
|
public function testgetSavePath()
|
|
{
|
|
$filename = 'cfg.file';
|
|
$config = array('path_data' => '/home');
|
|
$expected = $config['path_data'].'/uploads/'.md5($filename);
|
|
|
|
$di = new \Box_Di();
|
|
$di['config'] = $config;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getSavePath($filename);
|
|
$this->assertInternalType('string', $result);
|
|
$this->assertNotEmpty($result);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testremoveOldFile()
|
|
{
|
|
$config = array('filename' => 'test.cfg');
|
|
|
|
$toolMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolMock->expects($this->atLeastOnce())
|
|
->method('fileExists')
|
|
->will($this->returnValue(true));
|
|
$toolMock->expects($this->atLeastOnce())
|
|
->method('unlink');
|
|
|
|
$di = new \Box_Di();
|
|
$di['tools'] = $toolMock;
|
|
$di['config'] = array('path_data' => '/home');
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->removeOldFile($config);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testremoveOldFileFileNotFound()
|
|
{
|
|
$config = array('filename' => 'test.cfg');
|
|
|
|
$toolMock = $this->getMockBuilder('\Box_Tools')->getMock();
|
|
$toolMock->expects($this->atLeastOnce())
|
|
->method('fileExists')
|
|
->will($this->returnValue(false));
|
|
|
|
$di = new \Box_Di();
|
|
$di['tools'] = $toolMock;
|
|
$di['config'] = array('path_data' => '/home');
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->removeOldFile($config);
|
|
$this->assertInternalType('bool', $result);
|
|
$this->assertFalse($result);
|
|
}
|
|
|
|
public function testcanUpgradeTo_returnsTrue()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Product\Service')
|
|
->setMethods(array('getUpgradablePairs'))
|
|
->getMock();
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getUpgradablePairs')
|
|
->will($this->returnValue(array('2' => 'Hossting')));
|
|
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productModel->id = 1;
|
|
|
|
$newProductModel = new \Model_Product();
|
|
$newProductModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$newProductModel->id = 2;
|
|
|
|
$result = $serviceMock->canUpgradeTo($productModel, $newProductModel);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testcanUpgradeTo_upgradeIsImposible()
|
|
{
|
|
$serviceMock = $this->getMockBuilder('\Box\Mod\Product\Service')
|
|
->setMethods(array('getUpgradablePairs'))
|
|
->getMock();
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getUpgradablePairs')
|
|
->will($this->returnValue(array('4' => 'Domain')));
|
|
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productModel->id = 1;
|
|
|
|
$newProductModel = new \Model_Product();
|
|
$newProductModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$newProductModel->id = 2;
|
|
|
|
$result = $serviceMock->canUpgradeTo($productModel, $newProductModel);
|
|
$this->assertFalse($result);
|
|
}
|
|
|
|
public function testcanUpgradeTo_SameProducts()
|
|
{
|
|
$productModel = new \Model_Product();
|
|
$productModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$productModel->id = 1;
|
|
|
|
$newProductModel = new \Model_Product();
|
|
$newProductModel->loadBean(new \RedBeanPHP\OODBBean());
|
|
$newProductModel->id = 1;
|
|
|
|
$result = $this->service->canUpgradeTo($productModel, $newProductModel);
|
|
$this->assertFalse($result);
|
|
}
|
|
}
|
|
|