Source of file PurchasableTest.php
Size: 7,745 Bytes - Last Modified: 2021-12-24T06:46:07+00:00
/var/www/docs.ssmods.com/process/src/tests/Extension/PurchasableTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 | <?php namespace Dynamic\Foxy\Test\Extension; use Dynamic\Foxy\Extension\Purchasable; use Dynamic\Foxy\Model\FoxyCategory; use Dynamic\Foxy\Model\OptionType; use Dynamic\Foxy\Model\ProductOption; use Dynamic\Foxy\Model\Setting; use Dynamic\Foxy\Model\Variation; use Dynamic\Foxy\Test\TestOnly\TestProduct; use Dynamic\Foxy\Test\TestOnly\TestVariationDataExtension; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\Debug; use SilverStripe\Dev\SapphireTest; use SilverStripe\Forms\FieldList; use SilverStripe\i18n\i18n; use SilverStripe\ORM\ValidationException; use SilverStripe\Security\Member; /** * Class PurchasableTest * @package Dynamic\Foxy\Test\Extension */ class PurchasableTest extends SapphireTest { /** * @var string */ protected static $fixture_file = '../fixtures.yml'; /** * @var array */ protected static $extra_dataobjects = [ TestProduct::class, ]; /** * @var \string[][] */ protected static $required_extensions = [ TestProduct::class => [ Purchasable::class, ], Variation::class => [ TestVariationDataExtension::class, ], ]; /** * */ public function setUp() { Config::modify()->set(Variation::class, 'has_one', ['Product' => TestProduct::class]); return parent::setUp(); } /** * */ public function testUpdateCMSFields() { $object = Injector::inst()->create(TestProduct::class); $fields = $object->getCMSFields(); $this->assertInstanceOf(FieldList::class, $fields); $object->Price = 10.00; $object->Code = 000123; $object->FoxyCategoryID = $this->objFromFixture(FoxyCategory::class, 'one')->ID; $object->write(); $fields = $object->getCMSFields(); $this->assertInstanceOf(FieldList::class, $fields); } /** * */ /* public function testValidate() { $object = Injector::inst()->create(TestProduct::class); $object->Price = ''; $this->setExpectedException(ValidationException::class); $object->write(); $object->Price = '10.00'; $object->Code = ''; $this->setExpectedException(ValidationException::class); $object->write(); $object->Code = '123'; $object->FoxyCategoryID = ''; $this->setExpectedException(ValidationException::class); $object->write(); } */ /** * */ public function testIsAvailable() { $object = Injector::inst()->create(TestProduct::class); $this->assertTrue($object->isAvailable()); $object2 = Injector::inst()->create(TestProduct::class); $object2->Available = false; $this->assertFalse($object2->isAvailable()); $object3 = Injector::inst()->create(TestProduct::class); $object3->Available = 1; $type = Injector::inst()->create(TestProduct::class); $type->Title = 'Product One'; $variation1 = Injector::inst()->create(Variation::class); $variation1->Title = 'small'; $variation2 = Injector::inst()->create(Variation::class); $variation2->Title = 'large'; $type->Variations()->add($variation1); $type->Variations()->add($variation2); $this->assertTrue($object3->isAvailable()); } /** * */ public function testIsProduct() { $object = Injector::inst()->create(TestProduct::class); $this->assertTrue($object->isProduct()); } /** * */ public function testProvidePermissions() { /** @var TestProduct $object */ $object = singleton(Purchasable::class); i18n::set_locale('en'); $expected = [ 'MANAGE_FOXY_PRODUCTS' => [ 'name' => 'Manage products', 'category' => 'Foxy', 'help' => 'Manage products and related settings', 'sort' => 400 ] ]; $this->assertEquals($expected, $object->providePermissions()); } /** * */ public function testCanCreate() { /** @var TestProduct $object */ $object = singleton(TestProduct::class); /** @var \SilverStripe\Security\Member $admin */ $admin = $this->objFromFixture(Member::class, 'admin'); /** @var \SilverStripe\Security\Member $siteOwner */ $siteOwner = $this->objFromFixture(Member::class, 'site-owner'); /** @var \SilverStripe\Security\Member $default */ $default = $this->objFromFixture(Member::class, 'default'); $this->assertFalse($object->canCreate($default)); $this->assertTrue($object->canCreate($admin)); $this->assertTrue($object->canCreate($siteOwner)); } /** * */ public function testCanEdit() { /** @var TestProduct $object */ $object = singleton(TestProduct::class); /** @var \SilverStripe\Security\Member $admin */ $admin = $this->objFromFixture(Member::class, 'admin'); /** @var \SilverStripe\Security\Member $siteOwner */ $siteOwner = $this->objFromFixture(Member::class, 'site-owner'); /** @var \SilverStripe\Security\Member $default */ $default = $this->objFromFixture(Member::class, 'default'); $this->assertFalse($object->canEdit($default)); $this->assertTrue($object->canEdit($admin)); $this->assertTrue($object->canEdit($siteOwner)); } /** * */ public function testCanDelete() { /** @var TestProduct $object */ $object = singleton(TestProduct::class); /** @var \SilverStripe\Security\Member $admin */ $admin = $this->objFromFixture(Member::class, 'admin'); /** @var \SilverStripe\Security\Member $siteOwner */ $siteOwner = $this->objFromFixture(Member::class, 'site-owner'); /** @var \SilverStripe\Security\Member $default */ $default = $this->objFromFixture(Member::class, 'default'); $this->assertFalse($object->canDelete($default)); $this->assertTrue($object->canDelete($admin)); $this->assertTrue($object->canDelete($siteOwner)); } /** * */ public function testCanUnpublish() { /** @var TestProduct $object */ $object = singleton(TestProduct::class); /** @var \SilverStripe\Security\Member $admin */ $admin = $this->objFromFixture(Member::class, 'admin'); /** @var \SilverStripe\Security\Member $siteOwner */ $siteOwner = $this->objFromFixture(Member::class, 'site-owner'); /** @var \SilverStripe\Security\Member $default */ $default = $this->objFromFixture(Member::class, 'default'); $this->assertFalse($object->canUnpublish($default)); $this->assertTrue($object->canUnpublish($admin)); $this->assertTrue($object->canUnpublish($siteOwner)); } /** * */ public function testCanArchive() { /** @var TestProduct $object */ $object = singleton(TestProduct::class); /** @var \SilverStripe\Security\Member $admin */ $admin = $this->objFromFixture(Member::class, 'admin'); /** @var \SilverStripe\Security\Member $siteOwner */ $siteOwner = $this->objFromFixture(Member::class, 'site-owner'); /** @var \SilverStripe\Security\Member $default */ $default = $this->objFromFixture(Member::class, 'default'); $this->assertFalse($object->canArchive($default)); $this->assertTrue($object->canArchive($admin)); $this->assertTrue($object->canArchive($siteOwner)); } } |