TotalsTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Test\Unit\Model\Widget\Grid;
  7. class TotalsTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var $_model \Magento\Backend\Model\Widget\Grid\Totals
  11. */
  12. protected $_model;
  13. /**
  14. * @var \PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $_parserMock;
  17. /**
  18. * @var \PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $_factoryMock;
  21. protected function setUp()
  22. {
  23. // prepare model
  24. $this->_parserMock = $this->createPartialMock(
  25. \Magento\Backend\Model\Widget\Grid\Parser::class,
  26. ['parseExpression']
  27. );
  28. $this->_factoryMock = $this->createPartialMock(\Magento\Framework\DataObject\Factory::class, ['create']);
  29. $createValueMap = [
  30. [['test1' => 3, 'test2' => 2], new \Magento\Framework\DataObject(['test1' => 3, 'test2' => 2])],
  31. [['test4' => 9, 'test5' => 2], new \Magento\Framework\DataObject(['test4' => 9, 'test5' => 2])],
  32. ];
  33. $this->_factoryMock->expects($this->any())->method('create')->will($this->returnValueMap($createValueMap));
  34. $arguments = ['factory' => $this->_factoryMock, 'parser' => $this->_parserMock];
  35. $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  36. $this->_model = $objectManagerHelper->getObject(\Magento\Backend\Model\Widget\Grid\Totals::class, $arguments);
  37. // setup columns
  38. $columns = ['test1' => 'sum', 'test2' => 'avg'];
  39. foreach ($columns as $index => $expression) {
  40. $this->_model->setColumn($index, $expression);
  41. }
  42. }
  43. protected function tearDown()
  44. {
  45. unset($this->_parserMock);
  46. unset($this->_factoryMock);
  47. }
  48. public function testCountTotals()
  49. {
  50. // prepare collection
  51. $collection = new \Magento\Framework\Data\Collection(
  52. $this->createMock(\Magento\Framework\Data\Collection\EntityFactory::class)
  53. );
  54. $items = [
  55. new \Magento\Framework\DataObject(['test1' => '1', 'test2' => '2']),
  56. new \Magento\Framework\DataObject(['test1' => '1', 'test2' => '2']),
  57. new \Magento\Framework\DataObject(['test1' => '1', 'test2' => '2']),
  58. ];
  59. foreach ($items as $item) {
  60. $collection->addItem($item);
  61. }
  62. $expected = new \Magento\Framework\DataObject(['test1' => 3, 'test2' => 2]);
  63. $this->assertEquals($expected, $this->_model->countTotals($collection));
  64. }
  65. public function testCountTotalsWithSubItems()
  66. {
  67. $this->_model->reset(true);
  68. $this->_model->setColumn('test4', 'sum');
  69. $this->_model->setColumn('test5', 'avg');
  70. // prepare collection
  71. $collection = new \Magento\Framework\Data\Collection(
  72. $this->createMock(\Magento\Framework\Data\Collection\EntityFactory::class)
  73. );
  74. $items = [
  75. new \Magento\Framework\DataObject(
  76. [
  77. 'children' => new \Magento\Framework\DataObject(['test4' => '1', 'test5' => '2']),
  78. ]
  79. ),
  80. new \Magento\Framework\DataObject(
  81. [
  82. 'children' => new \Magento\Framework\DataObject(['test4' => '1', 'test5' => '2']),
  83. ]
  84. ),
  85. new \Magento\Framework\DataObject(
  86. [
  87. 'children' => new \Magento\Framework\DataObject(['test4' => '1', 'test5' => '2']),
  88. ]
  89. ),
  90. ];
  91. foreach ($items as $item) {
  92. // prepare sub-collection
  93. $subCollection = new \Magento\Framework\Data\Collection(
  94. $this->createMock(\Magento\Framework\Data\Collection\EntityFactory::class)
  95. );
  96. $subCollection->addItem(new \Magento\Framework\DataObject(['test4' => '1', 'test5' => '2']));
  97. $subCollection->addItem(new \Magento\Framework\DataObject(['test4' => '2', 'test5' => '2']));
  98. $item->setChildren($subCollection);
  99. $collection->addItem($item);
  100. }
  101. $expected = new \Magento\Framework\DataObject(['test4' => 9, 'test5' => 2]);
  102. $this->assertEquals($expected, $this->_model->countTotals($collection));
  103. }
  104. }