SaveGoogleExperimentScriptObserverTest.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\GoogleOptimizer\Test\Unit\Observer\CmsPage;
  7. class SaveGoogleExperimentScriptObserverTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \PHPUnit_Framework_MockObject_MockObject
  11. */
  12. protected $_helperMock;
  13. /**
  14. * @var \PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $_eventObserverMock;
  17. /**
  18. * @var \PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $_pageMock;
  21. /**
  22. * @var \PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $_codeMock;
  25. /**
  26. * @var \PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $_requestMock;
  29. /**
  30. * @var \Magento\GoogleOptimizer\Observer\CmsPage\SaveGoogleExperimentScriptObserver
  31. */
  32. protected $_modelObserver;
  33. /**
  34. * @var int
  35. */
  36. protected $_storeId;
  37. protected function setUp()
  38. {
  39. $this->_helperMock = $this->createMock(\Magento\GoogleOptimizer\Helper\Data::class);
  40. $this->_codeMock = $this->createMock(\Magento\GoogleOptimizer\Model\Code::class);
  41. $this->_requestMock = $this->createMock(\Magento\Framework\App\RequestInterface::class);
  42. $this->_pageMock = $this->createMock(\Magento\Cms\Model\Page::class);
  43. $event = $this->createPartialMock(\Magento\Framework\Event::class, ['getObject']);
  44. $event->expects($this->once())->method('getObject')->will($this->returnValue($this->_pageMock));
  45. $this->_eventObserverMock = $this->createMock(\Magento\Framework\Event\Observer::class);
  46. $this->_eventObserverMock->expects($this->once())->method('getEvent')->will($this->returnValue($event));
  47. $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  48. $this->_modelObserver = $objectManagerHelper->getObject(
  49. \Magento\GoogleOptimizer\Observer\CmsPage\SaveGoogleExperimentScriptObserver::class,
  50. ['helper' => $this->_helperMock, 'modelCode' => $this->_codeMock, 'request' => $this->_requestMock]
  51. );
  52. }
  53. public function testCreatingCodeIfRequestIsValid()
  54. {
  55. $pageId = 3;
  56. $experimentScript = 'some string';
  57. $this->_pageMock->expects($this->once())->method('getId')->will($this->returnValue($pageId));
  58. $this->_helperMock->expects($this->once())->method('isGoogleExperimentActive')->will($this->returnValue(true));
  59. $this->_requestMock->expects(
  60. $this->exactly(3)
  61. )->method(
  62. 'getParam'
  63. )->with(
  64. 'google_experiment'
  65. )->will(
  66. $this->returnValue(['code_id' => '', 'experiment_script' => $experimentScript])
  67. );
  68. $this->_codeMock->expects(
  69. $this->once()
  70. )->method(
  71. 'addData'
  72. )->with(
  73. [
  74. 'entity_type' => \Magento\GoogleOptimizer\Model\Code::ENTITY_TYPE_PAGE,
  75. 'entity_id' => $pageId,
  76. 'store_id' => 0,
  77. 'experiment_script' => $experimentScript,
  78. ]
  79. );
  80. $this->_codeMock->expects($this->once())->method('save');
  81. $this->_modelObserver->execute($this->_eventObserverMock);
  82. }
  83. /**
  84. * @param array $params
  85. * @dataProvider dataProviderWrongRequestForCreating
  86. */
  87. public function testCreatingCodeIfRequestIsNotValid($params)
  88. {
  89. $this->_helperMock->expects($this->once())->method('isGoogleExperimentActive')->will($this->returnValue(true));
  90. $this->_requestMock->expects(
  91. $this->once()
  92. )->method(
  93. 'getParam'
  94. )->with(
  95. 'google_experiment'
  96. )->will(
  97. $this->returnValue($params)
  98. );
  99. $this->_modelObserver->execute($this->_eventObserverMock);
  100. }
  101. /**
  102. * @return array
  103. */
  104. public function dataProviderWrongRequestForCreating()
  105. {
  106. return [
  107. // if param 'google_experiment' is not array
  108. ['wrong type'],
  109. // if param 'experiment_script' is missed
  110. [['code_id' => '']],
  111. // if param 'code_id' is missed
  112. [['experiment_script' => '']]];
  113. }
  114. public function testEditingCodeIfRequestIsValid()
  115. {
  116. $pageId = 3;
  117. $experimentScript = 'some string';
  118. $codeId = 5;
  119. $this->_pageMock->expects($this->once())->method('getId')->will($this->returnValue($pageId));
  120. $this->_helperMock->expects($this->once())->method('isGoogleExperimentActive')->will($this->returnValue(true));
  121. $this->_requestMock->expects(
  122. $this->exactly(3)
  123. )->method(
  124. 'getParam'
  125. )->with(
  126. 'google_experiment'
  127. )->will(
  128. $this->returnValue(['code_id' => $codeId, 'experiment_script' => $experimentScript])
  129. );
  130. $this->_codeMock->expects($this->once())->method('load')->with($codeId);
  131. $this->_codeMock->expects($this->once())->method('getId')->will($this->returnValue($codeId));
  132. $this->_codeMock->expects(
  133. $this->once()
  134. )->method(
  135. 'addData'
  136. )->with(
  137. [
  138. 'entity_type' => \Magento\GoogleOptimizer\Model\Code::ENTITY_TYPE_PAGE,
  139. 'entity_id' => $pageId,
  140. 'store_id' => $this->_storeId,
  141. 'experiment_script' => $experimentScript,
  142. ]
  143. );
  144. $this->_codeMock->expects($this->once())->method('save');
  145. $this->_modelObserver->execute($this->_eventObserverMock);
  146. }
  147. /**
  148. * @expectedException \InvalidArgumentException
  149. * @expectedExceptionMessage Code does not exist
  150. */
  151. public function testEditingCodeIfCodeModelIsNotFound()
  152. {
  153. $experimentScript = 'some string';
  154. $codeId = 5;
  155. $this->_helperMock->expects($this->once())->method('isGoogleExperimentActive')->will($this->returnValue(true));
  156. $this->_requestMock->expects(
  157. $this->exactly(3)
  158. )->method(
  159. 'getParam'
  160. )->with(
  161. 'google_experiment'
  162. )->will(
  163. $this->returnValue(['code_id' => $codeId, 'experiment_script' => $experimentScript])
  164. );
  165. $this->_codeMock->expects($this->once())->method('load')->with($codeId);
  166. $this->_codeMock->expects($this->atLeastOnce())->method('getId')->will($this->returnValue(false));
  167. $this->_codeMock->expects($this->never())->method('save');
  168. $this->_modelObserver->execute($this->_eventObserverMock);
  169. }
  170. public function testRemovingCode()
  171. {
  172. $codeId = 5;
  173. $this->_helperMock->expects(
  174. $this->once()
  175. )->method(
  176. 'isGoogleExperimentActive'
  177. )->with(
  178. $this->_storeId
  179. )->will(
  180. $this->returnValue(true)
  181. );
  182. $this->_requestMock->expects(
  183. $this->exactly(3)
  184. )->method(
  185. 'getParam'
  186. )->with(
  187. 'google_experiment'
  188. )->will(
  189. $this->returnValue(['code_id' => $codeId, 'experiment_script' => ''])
  190. );
  191. $this->_codeMock->expects($this->once())->method('load')->with($codeId);
  192. $this->_codeMock->expects($this->once())->method('getId')->will($this->returnValue($codeId));
  193. $this->_codeMock->expects($this->never())->method('save');
  194. $this->_codeMock->expects($this->once())->method('delete');
  195. $this->_modelObserver->execute($this->_eventObserverMock);
  196. }
  197. public function testManagingCodeIfGoogleExperimentIsDisabled()
  198. {
  199. $this->_helperMock->expects(
  200. $this->once()
  201. )->method(
  202. 'isGoogleExperimentActive'
  203. )->with(
  204. $this->_storeId
  205. )->will(
  206. $this->returnValue(false)
  207. );
  208. $this->_codeMock->expects($this->never())->method('load');
  209. $this->_codeMock->expects($this->never())->method('save');
  210. $this->_codeMock->expects($this->never())->method('delete');
  211. $this->_modelObserver->execute($this->_eventObserverMock);
  212. }
  213. }