Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SortingProcessorTest.php
Go to the documentation of this file.
1 <?php
7 
13 
14 class SortingProcessorTest extends \PHPUnit\Framework\TestCase
15 {
23  private function getModel(array $fieldMapping, array $defaultOrders)
24  {
25  return new SortingProcessor($fieldMapping, $defaultOrders);
26  }
27 
28  public function testProcess()
29  {
30  $orderOneField = 'orderOneField';
31  $orderOneFieldMapped = 'orderOneFieldMapped';
32  $orderOneDirection = SortOrder::SORT_ASC;
33 
34  $orderTwoField = 'orderTwoField';
35  $orderTwoDirection = SortOrder::SORT_DESC;
36 
37  $orderThreeField = 'orderTwoField';
38  $orderThreeDirection = '!!@!@';
39 
40  $fieldMapping = [$orderOneField => $orderOneFieldMapped];
41 
42  $defaultOrders = ['orderTwoField' => 'DESC'];
43 
44  $model = $this->getModel($fieldMapping, $defaultOrders);
45 
47  $sortOrderOneMock = $this->getMockBuilder(SortOrder::class)
48  ->disableOriginalConstructor()
49  ->getMock();
50  $sortOrderOneMock->expects($this->once())
51  ->method('getField')
52  ->willReturn($orderOneField);
53  $sortOrderOneMock->expects($this->once())
54  ->method('getDirection')
55  ->willReturn($orderOneDirection);
56 
58  $sortOrderTwoMock = $this->getMockBuilder(SortOrder::class)
59  ->disableOriginalConstructor()
60  ->getMock();
61  $sortOrderTwoMock->expects($this->once())
62  ->method('getField')
63  ->willReturn($orderTwoField);
64  $sortOrderTwoMock->expects($this->once())
65  ->method('getDirection')
66  ->willReturn($orderTwoDirection);
67 
69  $sortOrderThreeMock = $this->getMockBuilder(SortOrder::class)
70  ->disableOriginalConstructor()
71  ->getMock();
72  $sortOrderThreeMock->expects($this->once())
73  ->method('getField')
74  ->willReturn($orderThreeField);
75  $sortOrderThreeMock->expects($this->once())
76  ->method('getDirection')
77  ->willReturn($orderThreeDirection);
78 
80  $sortOrderFourMock = $this->getMockBuilder(SortOrder::class)
81  ->disableOriginalConstructor()
82  ->getMock();
83  $sortOrderFourMock->expects($this->once())
84  ->method('getField')
85  ->willReturn(null);
86  $sortOrderFourMock->expects($this->never())
87  ->method('getDirection');
88 
90  $searchCriteriaMock = $this->getMockBuilder(SearchCriteriaInterface::class)
91  ->getMock();
92 
93  $searchCriteriaMock->expects($this->exactly(2))
94  ->method('getSortOrders')
95  ->willReturn([$sortOrderOneMock, $sortOrderTwoMock, $sortOrderThreeMock, $sortOrderFourMock]);
96 
98  $collectionMock = $this->getMockBuilder(AbstractDb::class)
99  ->disableOriginalConstructor()
100  ->getMock();
101 
102  $collectionMock->expects($this->exactly(3))
103  ->method('addOrder')
104  ->withConsecutive(
105  [$orderOneFieldMapped, $orderOneDirection],
106  [$orderTwoField, $orderTwoDirection],
107  [$orderThreeField, Collection::SORT_ORDER_DESC]
108  )->willReturnSelf();
109 
110  $model->process($searchCriteriaMock, $collectionMock);
111  }
112 
113  public function testProcessWithDefaults()
114  {
115  $defaultOneField = 'defaultOneField';
116  $defaultOneFieldMapped = 'defaultOneFieldMapped';
117  $defaultOneDirection = SortOrder::SORT_ASC;
118 
119  $defaultTwoField = 'defaultTwoField';
120  $defaultTwoDirection = SortOrder::SORT_DESC;
121 
122  $defaultThreeField = 'defaultThreeField';
123  $defaultThreeDirection = '$#%^';
124 
125  $fieldMapping = [$defaultOneField => $defaultOneFieldMapped];
126 
127  $defaultOrders = [
128  $defaultOneField => $defaultOneDirection,
129  $defaultTwoField => $defaultTwoDirection,
130  $defaultThreeField => $defaultThreeDirection,
131  ];
132 
133  $model = $this->getModel($fieldMapping, $defaultOrders);
134 
136  $searchCriteriaMock = $this->getMockBuilder(SearchCriteriaInterface::class)
137  ->getMock();
138 
139  $searchCriteriaMock->expects($this->once())
140  ->method('getSortOrders')
141  ->willReturn([]);
142 
144  $collectionMock = $this->getMockBuilder(AbstractDb::class)
145  ->disableOriginalConstructor()
146  ->getMock();
147 
148  $collectionMock->expects($this->exactly(3))
149  ->method('addOrder')
150  ->withConsecutive(
151  [$defaultOneFieldMapped, $defaultOneDirection],
152  [$defaultTwoField, $defaultTwoDirection],
153  [$defaultThreeField, Collection::SORT_ORDER_DESC]
154  )->willReturnSelf();
155 
156  $model->process($searchCriteriaMock, $collectionMock);
157  }
158 }