PageRenderTime 53ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/protected/extensions/PayumYiiExtension/vendor/payum/payum/tests/Payum/Tests/Bridge/Psr/Log/LogExecutedActionsExtensionTest.php

https://gitlab.com/cuitianze/eduwind
PHP | 434 lines | 289 code | 78 blank | 67 comment | 2 complexity | a7dde7c168d7e87ec780ce7b16d18399 MD5 | raw file
  1. <?php
  2. namespace Payum\Tests\Bridge\Psr\Log;
  3. use Payum\Action\ActionInterface;
  4. use Payum\Bridge\Psr\Log\LogExecutedActionsExtension;
  5. use Payum\Request\CaptureRequest;
  6. use Payum\Request\InteractiveRequestInterface;
  7. use Payum\Request\RedirectUrlInteractiveRequest;
  8. use Psr\Log\LoggerInterface;
  9. class LogExecutedActionsExtensionTest extends \PHPUnit_Framework_TestCase
  10. {
  11. public static function setUpBeforeClass()
  12. {
  13. if (false == interface_exists('Psr\Log\LoggerInterface')) {
  14. throw new \PHPUnit_Framework_SkippedTestError('To run these tests install psr log lib.');
  15. }
  16. }
  17. /**
  18. * @test
  19. */
  20. public function shouldImplementExtensionInterface()
  21. {
  22. $rc = new \ReflectionClass('Payum\Bridge\Psr\Log\LogExecutedActionsExtension');
  23. $this->assertTrue($rc->implementsInterface('Payum\Extension\ExtensionInterface'));
  24. }
  25. /**
  26. * @test
  27. */
  28. public function shouldImplementLoggerAwareInterface()
  29. {
  30. $rc = new \ReflectionClass('Payum\Bridge\Psr\Log\LogExecutedActionsExtension');
  31. $this->assertTrue($rc->implementsInterface('Psr\Log\LoggerAwareInterface'));
  32. }
  33. /**
  34. * @test
  35. */
  36. public function couldBeConstructedWithoutAnyArguments()
  37. {
  38. $extension = new LogExecutedActionsExtension;
  39. $this->assertAttributeInstanceOf('Psr\Log\NullLogger', 'logger', $extension);
  40. }
  41. /**
  42. * @test
  43. */
  44. public function couldBeConstructedWithCustomLoggergivenAsFirstArgument()
  45. {
  46. $expectedLogger = $this->createLoggerMock();
  47. $extension = new LogExecutedActionsExtension($expectedLogger);
  48. $this->assertAttributeSame($expectedLogger, 'logger', $extension);
  49. }
  50. /**
  51. * @test
  52. */
  53. public function shouldAllowSetLogger()
  54. {
  55. $expectedLogger = $this->createLoggerMock();
  56. $extension = new LogExecutedActionsExtension;
  57. //guard
  58. $this->assertAttributeInstanceOf('Psr\Log\NullLogger', 'logger', $extension);
  59. $extension->setLogger($expectedLogger);
  60. $this->assertAttributeSame($expectedLogger, 'logger', $extension);
  61. }
  62. /**
  63. * @test
  64. */
  65. public function shouldNotLogAnythingOnPreExecute()
  66. {
  67. $logger = $this->createLoggerMock();
  68. $logger
  69. ->expects($this->never())
  70. ->method('debug')
  71. ;
  72. $extension = new LogExecutedActionsExtension($logger);
  73. $extension->onPreExecute(new \stdClass);
  74. }
  75. /**
  76. * @test
  77. */
  78. public function shouldNotLogAnythingOnPostExecute()
  79. {
  80. $logger = $this->createLoggerMock();
  81. $logger
  82. ->expects($this->never())
  83. ->method('debug')
  84. ;
  85. $extension = new LogExecutedActionsExtension($logger);
  86. $extension->onPostExecute(new \stdClass, $this->createActionMock());
  87. }
  88. /**
  89. * @test
  90. */
  91. public function shouldIncrementStackOnPreExecute()
  92. {
  93. $logger = $this->createLoggerMock();
  94. $logger
  95. ->expects($this->at(0))
  96. ->method('debug')
  97. ->with($this->stringStartsWith('[Payum] 2# '))
  98. ;
  99. $extension = new LogExecutedActionsExtension($logger);
  100. $extension->onPreExecute('string');
  101. $extension->onPreExecute('string');
  102. $extension->onExecute(new \stdClass, $this->createActionMock());
  103. }
  104. /**
  105. * @test
  106. */
  107. public function shouldDecrementStackOnPostExecute()
  108. {
  109. $request = new \stdClass;
  110. $action = $this->createActionMock();
  111. $logger = $this->createLoggerMock();
  112. $logger
  113. ->expects($this->at(0))
  114. ->method('debug')
  115. ->with($this->stringStartsWith('[Payum] 2# '))
  116. ;
  117. $logger
  118. ->expects($this->at(1))
  119. ->method('debug')
  120. ->with($this->stringStartsWith('[Payum] 1# '))
  121. ;
  122. $extension = new LogExecutedActionsExtension($logger);
  123. $extension->onPreExecute($request);
  124. $extension->onPreExecute($request);
  125. $extension->onExecute($request, $action);
  126. $extension->onPostExecute($request, $action);
  127. $extension->onExecute($request, $action);
  128. }
  129. /**
  130. * @test
  131. */
  132. public function shouldDecrementStackOnException()
  133. {
  134. $logger = $this->createLoggerMock();
  135. $logger
  136. ->expects($this->at(0))
  137. ->method('debug')
  138. ->with($this->stringStartsWith('[Payum] 2# '))
  139. ;
  140. $logger
  141. ->expects($this->at(1))
  142. ->method('debug')
  143. ->with($this->stringStartsWith('[Payum] 1# '))
  144. ;
  145. $extension = new LogExecutedActionsExtension($logger);
  146. $extension->onPreExecute('string');
  147. $extension->onPreExecute('string');
  148. $extension->onException(new \Exception, new \stdClass);
  149. $extension->onException(new \Exception, new \stdClass, $this->createActionMock());
  150. }
  151. /**
  152. * @test
  153. */
  154. public function shouldDecrementStackOnInteractiveRequest()
  155. {
  156. $logger = $this->createLoggerMock();
  157. $logger
  158. ->expects($this->at(0))
  159. ->method('debug')
  160. ->with($this->stringStartsWith('[Payum] 2# '))
  161. ;
  162. $logger
  163. ->expects($this->at(1))
  164. ->method('debug')
  165. ->with($this->stringStartsWith('[Payum] 1# '))
  166. ;
  167. $extension = new LogExecutedActionsExtension($logger);
  168. $extension->onPreExecute('string');
  169. $extension->onPreExecute('string');
  170. $extension->onInteractiveRequest($this->createInteractiveRequestMock(), new \stdClass, $this->createActionMock());
  171. $extension->onInteractiveRequest($this->createInteractiveRequestMock(), new \stdClass, $this->createActionMock());
  172. }
  173. /**
  174. * @test
  175. */
  176. public function shouldLogNotObjectActionAndRequestOnExecute()
  177. {
  178. $stringRequest = 'a string';
  179. $arrayRequest = array();
  180. $action = new FooAction;
  181. $logger = $this->createLoggerMock();
  182. $logger
  183. ->expects($this->at(0))
  184. ->method('debug')
  185. ->with('[Payum] 1# '.get_class($action).'::execute(string)')
  186. ;
  187. $logger
  188. ->expects($this->at(1))
  189. ->method('debug')
  190. ->with('[Payum] 1# '.get_class($action).'::execute(array)')
  191. ;
  192. $extension = new LogExecutedActionsExtension($logger);
  193. $extension->onPreExecute($stringRequest);
  194. $extension->onExecute($stringRequest, $action);
  195. $extension->onExecute($arrayRequest, $action);
  196. }
  197. /**
  198. * @test
  199. */
  200. public function shouldLogActionAndObjectRequestOnExecute()
  201. {
  202. $action = new FooAction;
  203. $stdRequest = new \stdClass;
  204. $namespacedRequest = new NamespacedRequest;
  205. $logger = $this->createLoggerMock();
  206. $logger
  207. ->expects($this->at(0))
  208. ->method('debug')
  209. ->with('[Payum] 1# '.get_class($action).'::execute(stdClass)')
  210. ;
  211. $logger
  212. ->expects($this->at(1))
  213. ->method('debug')
  214. ->with('[Payum] 1# '.get_class($action).'::execute(NamespacedRequest)')
  215. ;
  216. $extension = new LogExecutedActionsExtension($logger);
  217. $extension->onPreExecute($stdRequest);
  218. $extension->onExecute($stdRequest, $action);
  219. $extension->onExecute($namespacedRequest, $action);
  220. }
  221. /**
  222. * @test
  223. */
  224. public function shouldLogActionAndModelRequestWithModelNoObjectOnExecute()
  225. {
  226. $action = new FooAction;
  227. $model = array();
  228. $modelRequest = new CaptureRequest($model);
  229. $logger = $this->createLoggerMock();
  230. $logger
  231. ->expects($this->at(0))
  232. ->method('debug')
  233. ->with('[Payum] 1# '.get_class($action).'::execute(CaptureRequest{model: ArrayObject})')
  234. ;
  235. $extension = new LogExecutedActionsExtension($logger);
  236. $extension->onPreExecute($modelRequest);
  237. $extension->onExecute($modelRequest, $action);
  238. }
  239. /**
  240. * @test
  241. */
  242. public function shouldLogActionAndModelRequestWithObjectModelOnExecute()
  243. {
  244. $action = new FooAction;
  245. $stdModel = new \stdClass;
  246. $stdModelRequest = new CaptureRequest($stdModel);
  247. $logger = $this->createLoggerMock();
  248. $logger
  249. ->expects($this->at(0))
  250. ->method('debug')
  251. ->with('[Payum] 1# '.get_class($action).'::execute(CaptureRequest{model: stdClass})')
  252. ;
  253. $extension = new LogExecutedActionsExtension($logger);
  254. $extension->onPreExecute($stdModelRequest);
  255. $extension->onExecute($stdModelRequest, $action);
  256. }
  257. /**
  258. * @test
  259. */
  260. public function shouldLogOnInteractiveRequest()
  261. {
  262. $action = new FooAction;
  263. $interactiveRequest = $this->createInteractiveRequestMock();
  264. $ro = new \ReflectionObject($interactiveRequest);
  265. $logger = $this->createLoggerMock();
  266. $logger
  267. ->expects($this->at(0))
  268. ->method('debug')
  269. ->with('[Payum] 1# FooAction::execute(string) throws interactive '.$ro->getShortName())
  270. ;
  271. $extension = new LogExecutedActionsExtension($logger);
  272. $extension->onPreExecute('string');
  273. $extension->onInteractiveRequest($interactiveRequest, 'string', $action);
  274. }
  275. /**
  276. * @test
  277. */
  278. public function shouldLogRedirectUrlInteractiveRequestWithUrlIncludedOnInteractiveRequest()
  279. {
  280. $action = new FooAction;
  281. $interactiveRequest = new RedirectUrlInteractiveRequest('http://example.com');
  282. $logger = $this->createLoggerMock();
  283. $logger
  284. ->expects($this->at(0))
  285. ->method('debug')
  286. ->with('[Payum] 1# FooAction::execute(string) throws interactive RedirectUrlInteractiveRequest{url: '.$interactiveRequest->getUrl().'}')
  287. ;
  288. $extension = new LogExecutedActionsExtension($logger);
  289. $extension->onPreExecute('string');
  290. $extension->onInteractiveRequest($interactiveRequest, 'string', $action);
  291. }
  292. /**
  293. * @test
  294. */
  295. public function shouldLogOnExceptionWhenActionPassed()
  296. {
  297. $action = new FooAction;
  298. $logger = $this->createLoggerMock();
  299. $logger
  300. ->expects($this->at(0))
  301. ->method('debug')
  302. ->with('[Payum] 1# FooAction::execute(string) throws exception LogicException')
  303. ;
  304. $extension = new LogExecutedActionsExtension($logger);
  305. $extension->onPreExecute('string');
  306. $extension->onException(new \LogicException, 'string', $action);
  307. }
  308. /**
  309. * @test
  310. */
  311. public function shouldLogOnExceptionWhenActionNotPassed()
  312. {
  313. $logger = $this->createLoggerMock();
  314. $logger
  315. ->expects($this->at(0))
  316. ->method('debug')
  317. ->with('[Payum] 1# Payment::execute(string) throws exception LogicException')
  318. ;
  319. $extension = new LogExecutedActionsExtension($logger);
  320. $extension->onPreExecute('string');
  321. $extension->onException(new \LogicException, 'string');
  322. }
  323. /**
  324. * @return \PHPUnit_Framework_MockObject_MockObject|LoggerInterface
  325. */
  326. protected function createLoggerMock()
  327. {
  328. return $this->getMock('Psr\Log\LoggerInterface');
  329. }
  330. /**
  331. * @return \PHPUnit_Framework_MockObject_MockObject|InteractiveRequestInterface
  332. */
  333. protected function createInteractiveRequestMock()
  334. {
  335. return $this->getMock('Payum\Request\InteractiveRequestInterface');
  336. }
  337. /**
  338. * @return \PHPUnit_Framework_MockObject_MockObject|ActionInterface
  339. */
  340. protected function createActionMock()
  341. {
  342. return $this->getMock('Payum\Action\ActionInterface');
  343. }
  344. }
  345. class NamespacedRequest
  346. {
  347. }
  348. class FooAction implements ActionInterface
  349. {
  350. public function execute($request)
  351. {
  352. }
  353. public function supports($request)
  354. {
  355. }
  356. }