BuilderCompositeTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Test\Unit\Gateway\Request;
  7. use Magento\Payment\Gateway\Request\BuilderComposite;
  8. use Magento\Payment\Gateway\Request\BuilderInterface;
  9. class BuilderCompositeTest extends \PHPUnit\Framework\TestCase
  10. {
  11. public function testBuildEmpty()
  12. {
  13. $tMapFactory = $this->getMockBuilder(\Magento\Framework\ObjectManager\TMapFactory::class)
  14. ->disableOriginalConstructor()
  15. ->setMethods(['create'])
  16. ->getMock();
  17. $tMap = $this->getMockBuilder(\Magento\Framework\ObjectManager\TMap::class)
  18. ->disableOriginalConstructor()
  19. ->getMock();
  20. $tMapFactory->expects(static::once())
  21. ->method('create')
  22. ->with(
  23. [
  24. 'array' => [],
  25. 'type' => BuilderInterface::class
  26. ]
  27. )
  28. ->willReturn($tMap);
  29. $tMap->expects(static::once())
  30. ->method('getIterator')
  31. ->willReturn(new \ArrayIterator([]));
  32. $builder = new BuilderComposite($tMapFactory, []);
  33. static::assertEquals([], $builder->build([]));
  34. }
  35. /**
  36. * @param array $expected
  37. * @covers \Magento\Payment\Gateway\Request\BuilderComposite::build
  38. * @dataProvider buildDataProvider
  39. */
  40. public function testBuild(array $expected)
  41. {
  42. $tMapFactory = $this->getMockBuilder(\Magento\Framework\ObjectManager\TMapFactory::class)
  43. ->disableOriginalConstructor()
  44. ->setMethods(['create'])
  45. ->getMock();
  46. $tMap = $this->getMockBuilder(\Magento\Framework\ObjectManager\TMap::class)
  47. ->disableOriginalConstructor()
  48. ->getMock();
  49. $customerBuilder = $this->getMockBuilder(\Magento\Payment\Gateway\Request\BuilderInterface::class)
  50. ->getMockForAbstractClass();
  51. $productBuilder = $this->getMockBuilder(\Magento\Payment\Gateway\Request\BuilderInterface::class)
  52. ->getMockForAbstractClass();
  53. $magentoBuilder = $this->getMockBuilder(\Magento\Payment\Gateway\Request\BuilderInterface::class)
  54. ->getMockForAbstractClass();
  55. $customerBuilder->expects(static::once())
  56. ->method('build')
  57. ->willReturn(
  58. [
  59. 'user' => $expected['user'],
  60. 'address' => $expected['address']
  61. ]
  62. );
  63. $productBuilder->expects(static::once())
  64. ->method('build')
  65. ->willReturn(
  66. [
  67. 'amount' => $expected['amount'],
  68. 'currency' => $expected['currency'],
  69. 'item' => $expected['item'],
  70. 'quantity' => $expected['quantity'],
  71. 'options' => ['product' => $expected['options']['product']]
  72. ]
  73. );
  74. $magentoBuilder->expects(static::once())
  75. ->method('build')
  76. ->willReturn(
  77. [
  78. 'url' => $expected['url'],
  79. 'options' => ['magento' => $expected['options']['magento']]
  80. ]
  81. );
  82. $tMapFactory->expects(static::once())
  83. ->method('create')
  84. ->with(
  85. [
  86. 'array' => [
  87. 'customer' => \Magento\Payment\Gateway\Request\BuilderInterface::class,
  88. 'product' => \Magento\Payment\Gateway\Request\BuilderInterface::class,
  89. 'magento' => \Magento\Payment\Gateway\Request\BuilderInterface::class
  90. ],
  91. 'type' => BuilderInterface::class
  92. ]
  93. )
  94. ->willReturn($tMap);
  95. $tMap->expects(static::once())
  96. ->method('getIterator')
  97. ->willReturn(new \ArrayIterator([$customerBuilder, $productBuilder, $magentoBuilder]));
  98. $builder = new BuilderComposite(
  99. $tMapFactory,
  100. [
  101. 'customer' => \Magento\Payment\Gateway\Request\BuilderInterface::class,
  102. 'product' => \Magento\Payment\Gateway\Request\BuilderInterface::class,
  103. 'magento' => \Magento\Payment\Gateway\Request\BuilderInterface::class
  104. ]
  105. );
  106. static::assertEquals($expected, $builder->build([]));
  107. }
  108. /**
  109. * Get list of variations
  110. */
  111. public function buildDataProvider()
  112. {
  113. return [
  114. [[
  115. 'user' => 'Mrs G. Crump',
  116. 'address' => '46 Egernon Crescent',
  117. 'amount' => 10.00,
  118. 'currency' => 'pound',
  119. 'item' => 'gas cooker',
  120. 'quantity' => 1,
  121. 'options' => ['product' => '', 'magento' => 'magento'],
  122. 'url' => 'https://url.in',
  123. ]],
  124. [[
  125. 'user' => 'John Doe',
  126. 'address' => '46 Main Street',
  127. 'amount' => 250.00,
  128. 'currency' => 'usd',
  129. 'item' => 'phone',
  130. 'quantity' => 2,
  131. 'options' => ['product' => 'product', 'magento' => 'magento'],
  132. 'url' => 'https://url.io',
  133. ]],
  134. [[
  135. 'user' => 'John Smit',
  136. 'address' => '46 Egernon Crescent',
  137. 'amount' => 1100.00,
  138. 'currency' => 'usd',
  139. 'item' => 'notebook',
  140. 'quantity' => 1,
  141. 'options' => ['product' => ['discount' => ['price' => 2.00]], 'magento' => 'magento'],
  142. 'url' => 'http://url.ua',
  143. ]],
  144. ];
  145. }
  146. }