DatabaseTest.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Cache\Test\Unit\Backend;
  7. class DatabaseTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
  11. */
  12. protected $objectManager;
  13. protected function setUp()
  14. {
  15. $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  16. }
  17. /**
  18. * @param array $options
  19. *
  20. * @expectedException \Zend_Cache_Exception
  21. * @dataProvider initializeWithExceptionDataProvider
  22. */
  23. public function testInitializeWithException($options)
  24. {
  25. $this->objectManager->getObject(
  26. \Magento\Framework\Cache\Backend\Database::class,
  27. [
  28. 'options' => $options,
  29. ]
  30. );
  31. }
  32. /**
  33. * @return array
  34. */
  35. public function initializeWithExceptionDataProvider()
  36. {
  37. return [
  38. 'empty_adapter' => [
  39. 'options' => [
  40. 'adapter_callback' => '',
  41. 'data_table' => 'data_table',
  42. 'data_table_callback' => 'data_table_callback',
  43. 'tags_table' => 'tags_table',
  44. 'tags_table_callback' => 'tags_table_callback',
  45. 'adapter' => '',
  46. ],
  47. ],
  48. 'empty_data_table' => [
  49. 'options' => [
  50. 'adapter_callback' => '',
  51. 'data_table' => '',
  52. 'data_table_callback' => '',
  53. 'tags_table' => 'tags_table',
  54. 'tags_table_callback' => 'tags_table_callback',
  55. 'adapter' => $this->createMock(\Magento\Framework\DB\Adapter\Pdo\Mysql::class),
  56. ],
  57. ],
  58. 'empty_tags_table' => [
  59. 'options' => [
  60. 'adapter_callback' => '',
  61. 'data_table' => 'data_table',
  62. 'data_table_callback' => 'data_table_callback',
  63. 'tags_table' => '',
  64. 'tags_table_callback' => '',
  65. 'adapter' => $this->createMock(\Magento\Framework\DB\Adapter\Pdo\Mysql::class),
  66. ],
  67. ],
  68. ];
  69. }
  70. /**
  71. * @param array $options
  72. * @param bool|string $expected
  73. *
  74. * @dataProvider loadDataProvider
  75. */
  76. public function testLoad($options, $expected)
  77. {
  78. /** @var \Magento\Framework\Cache\Backend\Database $database */
  79. $database = $this->objectManager->getObject(
  80. \Magento\Framework\Cache\Backend\Database::class,
  81. ['options' => $options]
  82. );
  83. $this->assertEquals($expected, $database->load(5));
  84. $this->assertEquals($expected, $database->load(5, true));
  85. }
  86. /**
  87. * @return array
  88. */
  89. public function loadDataProvider()
  90. {
  91. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  92. ->setMethods(['select', 'fetchOne'])
  93. ->disableOriginalConstructor()
  94. ->getMock();
  95. $selectMock = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['where', 'from']);
  96. $selectMock->expects($this->any())
  97. ->method('where')
  98. ->will($this->returnSelf());
  99. $selectMock->expects($this->any())
  100. ->method('from')
  101. ->will($this->returnSelf());
  102. $connectionMock->expects($this->any())
  103. ->method('select')
  104. ->will($this->returnValue($selectMock));
  105. $connectionMock->expects($this->any())
  106. ->method('fetchOne')
  107. ->will($this->returnValue('loaded_value'));
  108. return [
  109. 'with_store_data' => [
  110. 'options' => $this->getOptionsWithStoreData($connectionMock),
  111. 'expected' => 'loaded_value',
  112. ],
  113. 'without_store_data' => [
  114. 'options' => $this->getOptionsWithoutStoreData(),
  115. 'expected' => false,
  116. ],
  117. ];
  118. }
  119. /**
  120. * @param \Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject $connectionMock
  121. * @return array
  122. */
  123. public function getOptionsWithStoreData($connectionMock)
  124. {
  125. return [
  126. 'adapter_callback' => '',
  127. 'data_table' => 'data_table',
  128. 'data_table_callback' => 'data_table_callback',
  129. 'tags_table' => 'tags_table',
  130. 'tags_table_callback' => 'tags_table_callback',
  131. 'store_data' => 'store_data',
  132. 'adapter' => $connectionMock,
  133. ];
  134. }
  135. /**
  136. * @param null|\Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject $connectionMock
  137. * @return array
  138. */
  139. public function getOptionsWithoutStoreData($connectionMock = null)
  140. {
  141. if (null === $connectionMock) {
  142. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  143. ->disableOriginalConstructor()
  144. ->getMock();
  145. }
  146. return [
  147. 'adapter_callback' => '',
  148. 'data_table' => 'data_table',
  149. 'data_table_callback' => 'data_table_callback',
  150. 'tags_table' => 'tags_table',
  151. 'tags_table_callback' => 'tags_table_callback',
  152. 'store_data' => '',
  153. 'adapter' => $connectionMock
  154. ];
  155. }
  156. /**
  157. * @param array $options
  158. * @param bool|string $expected
  159. *
  160. * @dataProvider loadDataProvider
  161. */
  162. public function testTest($options, $expected)
  163. {
  164. /** @var \Magento\Framework\Cache\Backend\Database $database */
  165. $database = $this->objectManager->getObject(
  166. \Magento\Framework\Cache\Backend\Database::class,
  167. ['options' => $options]
  168. );
  169. $this->assertEquals($expected, $database->load(5));
  170. $this->assertEquals($expected, $database->load(5, true));
  171. }
  172. /**
  173. * @param array $options
  174. * @param bool $expected
  175. *
  176. * @dataProvider saveDataProvider
  177. */
  178. public function testSave($options, $expected)
  179. {
  180. /** @var \Magento\Framework\Cache\Backend\Database $database */
  181. $database = $this->objectManager->getObject(
  182. \Magento\Framework\Cache\Backend\Database::class,
  183. ['options' => $options]
  184. );
  185. $this->assertEquals($expected, $database->save('data', 4));
  186. }
  187. /**
  188. * @return array
  189. */
  190. public function saveDataProvider()
  191. {
  192. return [
  193. 'major_case_with_store_data' => [
  194. 'options' => $this->getOptionsWithStoreData($this->getSaveAdapterMock(true)),
  195. 'expected' => true,
  196. ],
  197. 'minor_case_with_store_data' => [
  198. 'options' => $this->getOptionsWithStoreData($this->getSaveAdapterMock(false)),
  199. 'expected' => false,
  200. ],
  201. 'without_store_data' => [
  202. 'options' => $this->getOptionsWithoutStoreData(),
  203. 'expected' => true,
  204. ],
  205. ];
  206. }
  207. /**
  208. * @param bool $result
  209. * @return \Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject
  210. */
  211. protected function getSaveAdapterMock($result)
  212. {
  213. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  214. ->setMethods(['quoteIdentifier', 'query'])
  215. ->disableOriginalConstructor()
  216. ->getMock();
  217. $dbStatementMock = $this->getMockBuilder(\Zend_Db_Statement_Interface::class)
  218. ->setMethods(['rowCount'])
  219. ->disableOriginalConstructor()
  220. ->getMockForAbstractClass();
  221. $dbStatementMock->expects($this->any())
  222. ->method('rowCount')
  223. ->will($this->returnValue($result));
  224. $connectionMock->expects($this->any())
  225. ->method('quoteIdentifier')
  226. ->will($this->returnValue('data'));
  227. $connectionMock->expects($this->any())
  228. ->method('query')
  229. ->will($this->returnValue($dbStatementMock));
  230. return $connectionMock;
  231. }
  232. /**
  233. * @param array $options
  234. * @param bool $expected
  235. *
  236. * @dataProvider removeDataProvider
  237. */
  238. public function testRemove($options, $expected)
  239. {
  240. /** @var \Magento\Framework\Cache\Backend\Database $database */
  241. $database = $this->objectManager->getObject(
  242. \Magento\Framework\Cache\Backend\Database::class,
  243. ['options' => $options]
  244. );
  245. $this->assertEquals($expected, $database->remove(3));
  246. }
  247. /**
  248. * @return array
  249. */
  250. public function removeDataProvider()
  251. {
  252. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  253. ->setMethods(['delete'])
  254. ->disableOriginalConstructor()
  255. ->getMock();
  256. $connectionMock->expects($this->any())
  257. ->method('delete')
  258. ->will($this->returnValue(true));
  259. return [
  260. 'with_store_data' => [
  261. 'options' => $this->getOptionsWithStoreData($connectionMock),
  262. 'expected' => true,
  263. ],
  264. 'without_store_data' => [
  265. 'options' => $this->getOptionsWithoutStoreData(),
  266. 'expected' => false,
  267. ],
  268. ];
  269. }
  270. /**
  271. * @param array $options
  272. * @param string $mode
  273. * @param bool $expected
  274. *
  275. * @dataProvider cleanDataProvider
  276. */
  277. public function testClean($options, $mode, $expected)
  278. {
  279. /** @var \Magento\Framework\Cache\Backend\Database $database */
  280. $database = $this->objectManager->getObject(
  281. \Magento\Framework\Cache\Backend\Database::class,
  282. ['options' => $options]
  283. );
  284. $this->assertEquals($expected, $database->clean($mode));
  285. }
  286. /**
  287. * @return array
  288. */
  289. public function cleanDataProvider()
  290. {
  291. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  292. ->setMethods(['query', 'delete'])
  293. ->disableOriginalConstructor()
  294. ->getMock();
  295. $connectionMock->expects($this->any())
  296. ->method('query')
  297. ->will($this->returnValue(false));
  298. $connectionMock->expects($this->any())
  299. ->method('delete')
  300. ->will($this->returnValue(true));
  301. return [
  302. 'mode_all_with_store_data' => [
  303. 'options' => $this->getOptionsWithStoreData($connectionMock),
  304. 'mode' => \Zend_Cache::CLEANING_MODE_ALL,
  305. 'expected' => false,
  306. ],
  307. 'mode_all_without_store_data' => [
  308. 'options' => $this->getOptionsWithoutStoreData($connectionMock),
  309. 'mode' => \Zend_Cache::CLEANING_MODE_ALL,
  310. 'expected' => false,
  311. ],
  312. 'mode_old_with_store_data' => [
  313. 'options' => $this->getOptionsWithStoreData($connectionMock),
  314. 'mode' => \Zend_Cache::CLEANING_MODE_OLD,
  315. 'expected' => true,
  316. ],
  317. 'mode_old_without_store_data' => [
  318. 'options' => $this->getOptionsWithoutStoreData($connectionMock),
  319. 'mode' => \Zend_Cache::CLEANING_MODE_OLD,
  320. 'expected' => true,
  321. ],
  322. 'mode_matching_tag_without_store_data' => [
  323. 'options' => $this->getOptionsWithoutStoreData($connectionMock),
  324. 'mode' => \Zend_Cache::CLEANING_MODE_MATCHING_TAG,
  325. 'expected' => true,
  326. ],
  327. 'mode_not_matching_tag_without_store_data' => [
  328. 'options' => $this->getOptionsWithoutStoreData($connectionMock),
  329. 'mode' => \Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG,
  330. 'expected' => true,
  331. ],
  332. 'mode_matching_any_tag_without_store_data' => [
  333. 'options' => $this->getOptionsWithoutStoreData($connectionMock),
  334. 'mode' => \Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG,
  335. 'expected' => true,
  336. ],
  337. ];
  338. }
  339. /**
  340. * @expectedException \Zend_Cache_Exception
  341. */
  342. public function testCleanException()
  343. {
  344. /** @var \Magento\Framework\Cache\Backend\Database $database */
  345. $database = $this->objectManager->getObject(
  346. \Magento\Framework\Cache\Backend\Database::class,
  347. ['options' => $this->getOptionsWithoutStoreData()]
  348. );
  349. $database->clean('my_unique_mode');
  350. }
  351. /**
  352. * @param array $options
  353. * @param array $expected
  354. *
  355. * @dataProvider getIdsDataProvider
  356. */
  357. public function testGetIds($options, $expected)
  358. {
  359. /** @var \Magento\Framework\Cache\Backend\Database $database */
  360. $database = $this->objectManager->getObject(
  361. \Magento\Framework\Cache\Backend\Database::class,
  362. ['options' => $options]
  363. );
  364. $this->assertEquals($expected, $database->getIds());
  365. }
  366. /**
  367. * @return array
  368. */
  369. public function getIdsDataProvider()
  370. {
  371. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  372. ->setMethods(['select', 'fetchCol'])
  373. ->disableOriginalConstructor()
  374. ->getMock();
  375. $selectMock = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['from']);
  376. $selectMock->expects($this->any())
  377. ->method('from')
  378. ->will($this->returnSelf());
  379. $connectionMock->expects($this->any())
  380. ->method('select')
  381. ->will($this->returnValue($selectMock));
  382. $connectionMock->expects($this->any())
  383. ->method('fetchCol')
  384. ->will($this->returnValue(['value_one', 'value_two']));
  385. return [
  386. 'with_store_data' => [
  387. 'options' => $this->getOptionsWithStoreData($connectionMock),
  388. 'expected' => ['value_one', 'value_two'],
  389. ],
  390. 'without_store_data' => [
  391. 'options' => $this->getOptionsWithoutStoreData(),
  392. 'expected' => [],
  393. ],
  394. ];
  395. }
  396. public function testGetTags()
  397. {
  398. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  399. ->setMethods(['select', 'fetchCol'])
  400. ->disableOriginalConstructor()
  401. ->getMock();
  402. $selectMock = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['from', 'distinct']);
  403. $selectMock->expects($this->any())
  404. ->method('from')
  405. ->will($this->returnSelf());
  406. $selectMock->expects($this->any())
  407. ->method('distinct')
  408. ->will($this->returnSelf());
  409. $connectionMock->expects($this->any())
  410. ->method('select')
  411. ->will($this->returnValue($selectMock));
  412. $connectionMock->expects($this->any())
  413. ->method('fetchCol')
  414. ->will($this->returnValue(['value_one', 'value_two']));
  415. /** @var \Magento\Framework\Cache\Backend\Database $database */
  416. $database = $this->objectManager->getObject(
  417. \Magento\Framework\Cache\Backend\Database::class,
  418. ['options' => $this->getOptionsWithStoreData($connectionMock)]
  419. );
  420. $this->assertEquals(['value_one', 'value_two'], $database->getIds());
  421. }
  422. public function testGetIdsMatchingTags()
  423. {
  424. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  425. ->setMethods(['select', 'fetchCol'])
  426. ->disableOriginalConstructor()
  427. ->getMock();
  428. $selectMock = $this->createPartialMock(
  429. \Magento\Framework\DB\Select::class,
  430. ['from', 'distinct', 'where', 'group', 'having']
  431. );
  432. $selectMock->expects($this->any())
  433. ->method('from')
  434. ->will($this->returnSelf());
  435. $selectMock->expects($this->any())
  436. ->method('distinct')
  437. ->will($this->returnSelf());
  438. $selectMock->expects($this->any())
  439. ->method('where')
  440. ->will($this->returnSelf());
  441. $selectMock->expects($this->any())
  442. ->method('group')
  443. ->will($this->returnSelf());
  444. $selectMock->expects($this->any())
  445. ->method('having')
  446. ->will($this->returnSelf());
  447. $connectionMock->expects($this->any())
  448. ->method('select')
  449. ->will($this->returnValue($selectMock));
  450. $connectionMock->expects($this->any())
  451. ->method('fetchCol')
  452. ->will($this->returnValue(['value_one', 'value_two']));
  453. /** @var \Magento\Framework\Cache\Backend\Database $database */
  454. $database = $this->objectManager->getObject(
  455. \Magento\Framework\Cache\Backend\Database::class,
  456. ['options' => $this->getOptionsWithStoreData($connectionMock)]
  457. );
  458. $this->assertEquals(['value_one', 'value_two'], $database->getIdsMatchingTags());
  459. }
  460. public function testGetIdsNotMatchingTags()
  461. {
  462. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  463. ->setMethods(['select', 'fetchCol'])
  464. ->disableOriginalConstructor()
  465. ->getMock();
  466. $selectMock = $this->createPartialMock(
  467. \Magento\Framework\DB\Select::class,
  468. ['from', 'distinct', 'where', 'group', 'having']
  469. );
  470. $selectMock->expects($this->any())
  471. ->method('from')
  472. ->will($this->returnSelf());
  473. $selectMock->expects($this->any())
  474. ->method('distinct')
  475. ->will($this->returnSelf());
  476. $selectMock->expects($this->any())
  477. ->method('where')
  478. ->will($this->returnSelf());
  479. $selectMock->expects($this->any())
  480. ->method('group')
  481. ->will($this->returnSelf());
  482. $selectMock->expects($this->any())
  483. ->method('having')
  484. ->will($this->returnSelf());
  485. $connectionMock->expects($this->any())
  486. ->method('select')
  487. ->will($this->returnValue($selectMock));
  488. $connectionMock->expects($this->at(1))
  489. ->method('fetchCol')
  490. ->will($this->returnValue(['some_value_one']));
  491. $connectionMock->expects($this->at(3))
  492. ->method('fetchCol')
  493. ->will($this->returnValue(['some_value_two']));
  494. /** @var \Magento\Framework\Cache\Backend\Database $database */
  495. $database = $this->objectManager->getObject(
  496. \Magento\Framework\Cache\Backend\Database::class,
  497. ['options' => $this->getOptionsWithStoreData($connectionMock)]
  498. );
  499. $this->assertEquals(['some_value_one'], $database->getIdsNotMatchingTags());
  500. }
  501. public function testGetIdsMatchingAnyTags()
  502. {
  503. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  504. ->setMethods(['select', 'fetchCol'])
  505. ->disableOriginalConstructor()
  506. ->getMock();
  507. $selectMock = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['from', 'distinct']);
  508. $selectMock->expects($this->any())
  509. ->method('from')
  510. ->will($this->returnSelf());
  511. $selectMock->expects($this->any())
  512. ->method('distinct')
  513. ->will($this->returnSelf());
  514. $connectionMock->expects($this->any())
  515. ->method('select')
  516. ->will($this->returnValue($selectMock));
  517. $connectionMock->expects($this->any())
  518. ->method('fetchCol')
  519. ->will($this->returnValue(['some_value_one', 'some_value_two']));
  520. /** @var \Magento\Framework\Cache\Backend\Database $database */
  521. $database = $this->objectManager->getObject(
  522. \Magento\Framework\Cache\Backend\Database::class,
  523. ['options' => $this->getOptionsWithStoreData($connectionMock)]
  524. );
  525. $this->assertEquals(['some_value_one', 'some_value_two'], $database->getIds());
  526. }
  527. public function testGetMetadatas()
  528. {
  529. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  530. ->setMethods(['select', 'fetchCol', 'fetchRow'])
  531. ->disableOriginalConstructor()
  532. ->getMock();
  533. $selectMock = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['from', 'where']);
  534. $selectMock->expects($this->any())
  535. ->method('from')
  536. ->will($this->returnSelf());
  537. $selectMock->expects($this->any())
  538. ->method('where')
  539. ->will($this->returnSelf());
  540. $connectionMock->expects($this->any())
  541. ->method('select')
  542. ->will($this->returnValue($selectMock));
  543. $connectionMock->expects($this->any())
  544. ->method('fetchCol')
  545. ->will($this->returnValue(['some_value_one', 'some_value_two']));
  546. $connectionMock->expects($this->any())
  547. ->method('fetchRow')
  548. ->will($this->returnValue(['expire_time' => '3', 'update_time' => 2]));
  549. /** @var \Magento\Framework\Cache\Backend\Database $database */
  550. $database = $this->objectManager->getObject(
  551. \Magento\Framework\Cache\Backend\Database::class,
  552. ['options' => $this->getOptionsWithStoreData($connectionMock)]
  553. );
  554. $this->assertEquals(
  555. [
  556. 'expire' => 3,
  557. 'mtime' => 2,
  558. 'tags' => ['some_value_one', 'some_value_two'],
  559. ],
  560. $database->getMetadatas(5)
  561. );
  562. }
  563. /**
  564. * @param array $options
  565. * @param bool $expected
  566. *
  567. * @dataProvider touchDataProvider
  568. */
  569. public function testTouch($options, $expected)
  570. {
  571. /** @var \Magento\Framework\Cache\Backend\Database $database */
  572. $database = $this->objectManager->getObject(
  573. \Magento\Framework\Cache\Backend\Database::class,
  574. ['options' => $options]
  575. );
  576. $this->assertEquals($expected, $database->touch(2, 100));
  577. }
  578. /**
  579. * @return array
  580. */
  581. public function touchDataProvider()
  582. {
  583. $connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\Pdo\Mysql::class)
  584. ->setMethods(['update'])
  585. ->disableOriginalConstructor()
  586. ->getMock();
  587. $connectionMock->expects($this->any())
  588. ->method('update')
  589. ->will($this->returnValue(false));
  590. return [
  591. 'with_store_data' => [
  592. 'options' => $this->getOptionsWithStoreData($connectionMock),
  593. 'expected' => false,
  594. ],
  595. 'without_store_data' => [
  596. 'options' => $this->getOptionsWithoutStoreData(),
  597. 'expected' => true,
  598. ],
  599. ];
  600. }
  601. }