1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Abstract test case to test positions of a module's total collectors as compared to other collectors
- */
- namespace Magento\Sales\Model;
- abstract class AbstractCollectorPositionsTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @param string $collectorCode
- * @param string $configType
- * @param array $before
- * @param array $after
- *
- * @dataProvider collectorPositionDataProvider
- */
- public function testCollectorPosition($collectorCode, $configType, array $before, array $after)
- {
- $allCollectors = self::_getConfigCollectors($configType);
- $collectorCodes = array_keys($allCollectors);
- $collectorPos = array_search($collectorCode, $collectorCodes);
- $this->assertNotSame(false, $collectorPos, "'{$collectorCode}' total collector is not found");
- foreach ($before as $compareWithCode) {
- $compareWithPos = array_search($compareWithCode, $collectorCodes);
- if ($compareWithPos === false) {
- continue;
- }
- $this->assertLessThan(
- $compareWithPos,
- $collectorPos,
- "The '{$collectorCode}' collector must go before '{$compareWithCode}'"
- );
- }
- foreach ($after as $compareWithCode) {
- $compareWithPos = array_search($compareWithCode, $collectorCodes);
- if ($compareWithPos === false) {
- continue;
- }
- $this->assertGreaterThan(
- $compareWithPos,
- $collectorPos,
- "The '{$collectorCode}' collector must go after '{$compareWithCode}'"
- );
- }
- }
- /**
- * Return array of total collectors for the designated $configType
- *
- * @var string $configType
- * @throws \InvalidArgumentException
- * @return array
- */
- protected static function _getConfigCollectors($configType)
- {
- switch ($configType) {
- case 'quote':
- $configClass = \Magento\Quote\Model\Quote\Address\Total\Collector::class;
- $methodGetCollectors = 'getCollectors';
- break;
- case 'invoice':
- $configClass = \Magento\Sales\Model\Order\Invoice\Config::class;
- $methodGetCollectors = 'getTotalModels';
- break;
- case 'creditmemo':
- $configClass = \Magento\Sales\Model\Order\Creditmemo\Config::class;
- $methodGetCollectors = 'getTotalModels';
- break;
- default:
- throw new \InvalidArgumentException('Unknown config type: ' . $configType);
- }
- $config = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create($configClass);
- return $config->{$methodGetCollectors}();
- }
- /**
- * Data provider with the data to verify
- *
- * @return array
- */
- abstract public function collectorPositionDataProvider();
- }
|