IndexTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Captcha\Test\Unit\Controller\Refresh;
  7. class IndexTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \PHPUnit_Framework_MockObject_MockObject
  11. */
  12. protected $captchaHelperMock;
  13. /**
  14. * @var \PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $captchaMock;
  17. /**
  18. * @var \PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $requestMock;
  21. /**
  22. * @var \PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $responseMock;
  25. /**
  26. * @var \PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $contextMock;
  29. /**
  30. * @var \PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $viewMock;
  33. /**
  34. * @var \PHPUnit_Framework_MockObject_MockObject
  35. */
  36. protected $layoutMock;
  37. /**
  38. * @var \PHPUnit_Framework_MockObject_MockObject
  39. */
  40. protected $flagMock;
  41. /**
  42. * @var \PHPUnit_Framework_MockObject_MockObject
  43. */
  44. protected $serializerMock;
  45. /**
  46. * @var \Magento\Captcha\Controller\Refresh\Index
  47. */
  48. protected $model;
  49. protected function setUp()
  50. {
  51. $this->captchaHelperMock = $this->createMock(\Magento\Captcha\Helper\Data::class);
  52. $this->captchaMock = $this->createMock(\Magento\Captcha\Model\DefaultModel::class);
  53. $this->requestMock = $this->createMock(\Magento\Framework\App\Request\Http::class);
  54. $this->responseMock = $this->createMock(\Magento\Framework\App\Response\Http::class);
  55. $this->contextMock = $this->createMock(\Magento\Framework\App\Action\Context::class);
  56. $this->viewMock = $this->createMock(\Magento\Framework\App\ViewInterface::class);
  57. $this->layoutMock = $this->createMock(\Magento\Framework\View\LayoutInterface::class);
  58. $this->flagMock = $this->createMock(\Magento\Framework\App\ActionFlag::class);
  59. $this->serializerMock = $this->createMock(\Magento\Framework\Serialize\Serializer\Json::class);
  60. $this->contextMock->expects($this->any())->method('getRequest')->will($this->returnValue($this->requestMock));
  61. $this->contextMock->expects($this->any())->method('getView')->will($this->returnValue($this->viewMock));
  62. $this->contextMock->expects($this->any())->method('getResponse')->will($this->returnValue($this->responseMock));
  63. $this->contextMock->expects($this->any())->method('getActionFlag')->will($this->returnValue($this->flagMock));
  64. $this->viewMock->expects($this->any())->method('getLayout')->will($this->returnValue($this->layoutMock));
  65. $this->model = new \Magento\Captcha\Controller\Refresh\Index(
  66. $this->contextMock,
  67. $this->captchaHelperMock,
  68. $this->serializerMock
  69. );
  70. }
  71. /**
  72. * @dataProvider executeDataProvider
  73. * @param int $formId
  74. * @param int $callsNumber
  75. */
  76. public function testExecute($formId, $callsNumber)
  77. {
  78. $content = ['formId' => $formId];
  79. $imgSource = ['imgSrc' => 'source'];
  80. $blockMethods = ['setFormId', 'setIsAjax', 'toHtml'];
  81. $blockMock = $this->createPartialMock(\Magento\Captcha\Block\Captcha::class, $blockMethods);
  82. $this->requestMock->expects($this->any())->method('getPost')->with('formId')->will($this->returnValue($formId));
  83. $this->requestMock->expects($this->exactly($callsNumber))->method('getContent')
  84. ->will($this->returnValue(json_encode($content)));
  85. $this->captchaHelperMock->expects($this->any())->method('getCaptcha')->with($formId)
  86. ->will($this->returnValue($this->captchaMock));
  87. $this->captchaMock->expects($this->once())->method('generate');
  88. $this->captchaMock->expects($this->once())->method('getBlockName')->will($this->returnValue('block'));
  89. $this->captchaMock->expects($this->once())->method('getImgSrc')->will($this->returnValue('source'));
  90. $this->layoutMock->expects($this->once())->method('createBlock')->with('block')
  91. ->will($this->returnValue($blockMock));
  92. $blockMock->expects($this->any())->method('setFormId')->with($formId)->will($this->returnValue($blockMock));
  93. $blockMock->expects($this->any())->method('setIsAjax')->with(true)->will($this->returnValue($blockMock));
  94. $blockMock->expects($this->once())->method('toHtml');
  95. $this->responseMock->expects($this->once())->method('representJson')->with(json_encode($imgSource));
  96. $this->flagMock->expects($this->once())->method('set')->with('', 'no-postDispatch', true);
  97. $this->serializerMock->expects($this->exactly($callsNumber))
  98. ->method('unserialize')->will($this->returnValue($content));
  99. $this->serializerMock->expects($this->once())
  100. ->method('serialize')->will($this->returnValue(json_encode($imgSource)));
  101. $this->model->execute();
  102. }
  103. /**
  104. * @return array
  105. */
  106. public function executeDataProvider()
  107. {
  108. return [
  109. [
  110. 'formId' => null,
  111. 'callsNumber' => 1,
  112. ],
  113. [
  114. 'formId' => 1,
  115. 'callsNumber' => 0,
  116. ]
  117. ];
  118. }
  119. }