Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
TemporaryTableServiceTest.php
Go to the documentation of this file.
1 <?php
7 
13 
14 class TemporaryTableServiceTest extends \PHPUnit\Framework\TestCase
15 {
19  private $temporaryTableService;
20 
24  private $adapterMock;
25 
29  private $randomMock;
30 
34  private $selectMock;
35 
41  protected function setUp()
42  {
43  $this->adapterMock = $this->createMock(AdapterInterface::class);
44  $this->selectMock = $this->createMock(Select::class);
45  $this->randomMock = $this->createMock(Random::class);
46  $this->temporaryTableService = (new ObjectManager($this))->getObject(
47  TemporaryTableService::class,
48  [
49  'random' => $this->randomMock,
50  'allowedIndexMethods' => ['HASH'],
51  'allowedEngines' => ['INNODB']
52  ]
53  );
54  }
55 
62  {
63  $this->expectException(\InvalidArgumentException::class);
64  $random = 'random_table';
65  $indexes = [
66  ['PRIMARY' => ['primary_column_name']],
67  'CREATE TEMPORARY TABLE random_table (PRIMARY KEY(primary_column_name)) ENGINE=INNODB IGNORE '
68  . '(select * from sometable)'
69  ];
70 
71  $this->assertEquals(
72  $random,
73  $this->temporaryTableService->createFromSelect(
74  $this->selectMock,
75  $this->adapterMock,
76  $indexes,
79  )
80  );
81  }
82 
91  public function testCreateFromSelect($indexes, $expectedSelect)
92  {
93  $selectString = 'select * from sometable';
94  $random = 'random_table';
95 
96  $this->randomMock->expects($this->once())
97  ->method('getUniqueHash')
98  ->willReturn($random);
99 
100  $this->adapterMock->expects($this->once())
101  ->method('query')
102  ->with($expectedSelect)
103  ->willReturnSelf();
104 
105  $this->adapterMock->expects($this->once())
106  ->method('query')
107  ->willReturnSelf();
108 
109  $this->adapterMock->expects($this->any())
110  ->method('quoteIdentifier')
111  ->willReturnArgument(0);
112 
113  $this->selectMock->expects($this->once())
114  ->method('getBind')
115  ->willReturn(['bind']);
116 
117  $this->selectMock->expects($this->any())
118  ->method('__toString')
119  ->willReturn($selectString);
120 
121  $this->assertEquals(
122  $random,
123  $this->temporaryTableService->createFromSelect(
124  $this->selectMock,
125  $this->adapterMock,
126  $indexes
127  )
128  );
129  }
130 
137  {
138  $this->assertFalse($this->temporaryTableService->dropTable('tmp_select_table'));
139  }
140 
151  {
152  $createdTableAdapters = new \ReflectionProperty($this->temporaryTableService, 'createdTableAdapters');
153  $createdTableAdapters->setAccessible(true);
154  $createdTableAdapters->setValue($this->temporaryTableService, ['tmp_select_table' => $this->adapterMock]);
155  $createdTableAdapters->setAccessible(false);
156 
157  $this->adapterMock->expects($this->any())
158  ->method('dropTemporaryTable')
159  ->willReturn(true);
160 
161  $this->assertEquals($this->temporaryTableService->dropTable($tableName), $assertion);
162  }
163 
168  {
169  return [
170  [
171  ['PRIMARY' => ['primary_column_name']],
172  'CREATE TEMPORARY TABLE random_table (PRIMARY KEY(primary_column_name)) ENGINE=INNODB IGNORE '
173  . '(select * from sometable)'
174  ],
175  [
176  ['UNQ_INDX' => ['column1', 'column2']],
177  'CREATE TEMPORARY TABLE random_table (UNIQUE UNQ_INDX(column1,column2)) ENGINE=INNODB IGNORE '
178  . '(select * from sometable)'
179  ],
180  [
181  ['OTH_INDX' => ['column3', 'column4']],
182  'CREATE TEMPORARY TABLE random_table (INDEX OTH_INDX USING HASH(column3,column4)) ENGINE=INNODB IGNORE '
183  . '(select * from sometable)'
184  ],
185  [
186  [
187  'PRIMARY' => ['primary_column_name'],
188  'OTH_INDX' => ['column3', 'column4'],
189  'UNQ_INDX' => ['column1', 'column2']
190  ],
191  'CREATE TEMPORARY TABLE random_table '
192  . '(PRIMARY KEY(primary_column_name),'
193  . 'INDEX OTH_INDX USING HASH(column3,column4),UNIQUE UNQ_INDX(column1,column2)) ENGINE=INNODB IGNORE '
194  . '(select * from sometable)'
195  ],
196  ];
197  }
198 
203  {
204  return [
205  ['tmp_select_table_1', false],
206  ['tmp_select_table', true],
207  ];
208  }
209 }
$tableName
Definition: trigger.php:13