Source of file TransactionTest.php
Size: 10,392 Bytes - Last Modified: 2021-12-24T06:51:34+00:00
/var/www/docs.ssmods.com/process/src/tests/Transaction/TransactionTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 | <?php namespace Heystack\Ecommerce\Transaction; use Heystack\Core\Storage\Backends\SilverStripeOrm\Backend; use Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface; use SebastianBergmann\Money\NZD; class TransactionTest extends \PHPUnit_Framework_TestCase { /** * @var Transaction */ protected $transaction; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. */ protected function setUp() { $currencyService = $this->getMockBuilder('Heystack\Ecommerce\Currency\CurrencyService') ->disableOriginalConstructor() ->getMock(); $currencyService->expects($this->any()) ->method('getZeroMoney') ->will($this->returnValue(new NZD(0))); $currencyService->expects($this->any()) ->method('getActiveCurrencyCode') ->will($this->returnValue('NZD')); $stateService = $this->getMockBuilder('Heystack\Core\State\State') ->disableOriginalConstructor() ->getMock(); $modifierIdentifier = $this->mockIdentifier('purchasableholder'); $modifier = $this->getMock('Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface'); $modifier->expects($this->any()) ->method('getIdentifier') ->will($this->returnValue($modifierIdentifier)); $modifier->expects($this->any()) ->method('getType') ->will($this->returnValue('chargeable')); $modifier->expects($this->any()) ->method('getTotal') ->will($this->returnValue(new NZD(100))); $this->transaction = new Transaction( $stateService, $currencyService, ['Pending', 'Successful', 'Failed', 'Dispatched', 'Processing', 'Cancelled'], 'Pending' ); $this->transaction->addModifier($modifier); } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. */ protected function tearDown() { $this->transaction = null; } /** * Creates a mock Identifier that returns $value when 'getFull' is called. * @param $value */ protected function mockIdentifier($value) { $identifier = $this->getMockBuilder('Heystack\Core\Identifier\Identifier') ->disableOriginalConstructor() ->getMock(); $identifier->expects($this->any()) ->method('getFull') ->will($this->returnValue($value)); return $identifier; } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getModifier * @covers Heystack\Ecommerce\Transaction\Transaction::getModifiers * @covers Heystack\Ecommerce\Transaction\Transaction::getModifiersByType */ public function testModifiersAccess() { $modifierIdentifier = $this->mockIdentifier('taxhandler'); $modifier = $this->getMock('Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface'); $modifier->expects($this->any()) ->method('getIdentifier') ->will($this->returnValue($modifierIdentifier)); $modifier->expects($this->any()) ->method('getType') ->will($this->returnValue('deductible')); $this->transaction->addModifier($modifier); $this->assertTrue($this->transaction->getModifier($modifierIdentifier->getFull()) instanceof TransactionModifierInterface); $this->assertContainsOnlyInstancesOf( 'Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface', $this->transaction->getModifiers() ); $this->assertContainsOnlyInstancesOf( 'Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface', $this->transaction->getModifiersByType('deductible') ); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::getTotal * @covers Heystack\Ecommerce\Transaction\Transaction::saveState * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getTotalWithExclusions * @covers Heystack\Ecommerce\Transaction\Transaction::updateTotal */ public function testGetTotal() { $this->assertEquals(new NZD(0), $this->transaction->getTotal()); $this->transaction->updateTotal(); $this->assertEquals(new NZD(100), $this->transaction->getTotal()); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getTotalWithExclusions * @expectedException \SebastianBergmann\Money\OverflowException */ public function testGetTotalWithExclusions() { $modifierIdentifier = $this->mockIdentifier('voucher'); $modifier = $this->getMock('Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface'); $modifier->expects($this->any()) ->method('getIdentifier') ->will($this->returnValue($modifierIdentifier)); $modifier->expects($this->any()) ->method('getType') ->will($this->returnValue('deductible')); $modifier->expects($this->any()) ->method('getTotal') ->will($this->returnValue(new NZD(50))); $this->assertEquals(new NZD(100), $this->transaction->getTotalWithExclusions([])); $this->transaction->addModifier($modifier); $this->assertEquals(new NZD(50), $this->transaction->getTotalWithExclusions([])); $this->assertEquals(new NZD(100), $this->transaction->getTotalWithExclusions(['voucher'])); $this->assertEquals(new NZD(-50), $this->transaction->getTotalWithExclusions(['purchasableholder'])); $modifierIdentifier = $this->mockIdentifier('taxhandler'); $modifier = $this->getMock('Heystack\Ecommerce\Transaction\Interfaces\TransactionModifierInterface'); $modifier->expects($this->any()) ->method('getIdentifier') ->will($this->returnValue($modifierIdentifier)); $modifier->expects($this->any()) ->method('getType') ->will($this->returnValue('chargeable')); $modifier->expects($this->any()) ->method('getTotal') ->will($this->returnValue(new NZD(intval(PHP_INT_MAX - 49)))); $this->transaction->addModifier($modifier); $this->transaction->getTotalWithExclusions([]); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getStorableIdentifier */ public function testGetStorableIdentifier() { $this->assertEquals(Transaction::IDENTIFIER, $this->transaction->getStorableIdentifier()); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getSchemaName */ public function testGetSchemaName() { $this->assertEquals('Transaction', $this->transaction->getSchemaName()); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::saveState * @covers Heystack\Ecommerce\Transaction\Transaction::updateTotal * @covers Heystack\Ecommerce\Transaction\Transaction::getTotalWithExclusions * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getStorableData */ public function testGetStorableData() { $storableData = $this->transaction->getStorableData(); $this->assertCount(3, $storableData); $this->assertContains('Transaction', $storableData); $this->assertContains('NZD', $storableData['flat']); $this->assertContains('Pending', $storableData['flat']); $this->assertEquals(0, $storableData['flat']['Total']); $this->transaction->updateTotal(); $storableData = $this->transaction->getStorableData(); $this->assertEquals(1, $storableData['flat']['Total']); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getStorableBackendIdentifiers */ public function testGetStorableBackendIdentifiers() { $this->assertEquals([Backend::IDENTIFIER], $this->transaction->getStorableBackendIdentifiers()); } /** * @covers Heystack\Ecommerce\Transaction\Transaction::__construct * @covers Heystack\Ecommerce\Transaction\Transaction::addModifier * @covers Heystack\Ecommerce\Transaction\Transaction::saveState * @covers Heystack\Ecommerce\Transaction\Transaction::setStatus * @covers Heystack\Ecommerce\Transaction\Transaction::getStatus * @covers Heystack\Ecommerce\Transaction\Transaction::isValidStatus * @expectedException \InvalidArgumentException */ public function testStatus() { $this->transaction->setStatus('Pending'); $this->assertEquals('Pending', $this->transaction->getStatus()); $this->transaction->setStatus('invalid_status'); } } |