FormTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Data\Test\Unit;
  7. use \Magento\Framework\Data\Form;
  8. /**
  9. * Tests for \Magento\Framework\Data\FormFactory
  10. * @SuppressWarnings(PHPMD.LongVariable)
  11. */
  12. class FormTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var \PHPUnit_Framework_MockObject_MockObject
  16. */
  17. protected $_factoryElementMock;
  18. /**
  19. * @var \PHPUnit_Framework_MockObject_MockObject
  20. */
  21. protected $_factoryCollectionMock;
  22. /**
  23. * @var \PHPUnit_Framework_MockObject_MockObject
  24. */
  25. protected $_formKeyMock;
  26. /**
  27. * @var \Magento\Framework\Data\Form
  28. */
  29. protected $_form;
  30. protected function setUp()
  31. {
  32. $this->_factoryElementMock = $this->createMock(\Magento\Framework\Data\Form\Element\Factory::class);
  33. $this->_factoryCollectionMock =
  34. $this->createPartialMock(\Magento\Framework\Data\Form\Element\CollectionFactory::class, ['create']);
  35. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  36. $collectionModel = $objectManager->getObject(\Magento\Framework\Data\Form\Element\Collection::class);
  37. $this->_factoryCollectionMock
  38. ->expects($this->any())
  39. ->method('create')
  40. ->will($this->returnValue($collectionModel));
  41. $this->_formKeyMock = $this->createPartialMock(\Magento\Framework\Data\Form\FormKey::class, ['getFormKey']);
  42. $this->_form = new Form($this->_factoryElementMock, $this->_factoryCollectionMock, $this->_formKeyMock);
  43. }
  44. public function testFormKeyUsing()
  45. {
  46. $formKey = 'form-key';
  47. $this->_formKeyMock->expects($this->once())->method('getFormKey')->will($this->returnValue($formKey));
  48. $this->_form->setUseContainer(true);
  49. $this->_form->setMethod('post');
  50. $this->assertContains($formKey, $this->_form->toHtml());
  51. }
  52. public function testSettersGetters()
  53. {
  54. $setElementRenderer = $this->getMockBuilder(\Magento\Backend\Block\Widget\Form\Renderer\Element::class)
  55. ->disableOriginalConstructor()
  56. ->getMock();
  57. // note: this results in setting a static variable in the Form class
  58. $this->_form->setElementRenderer($setElementRenderer);
  59. $getElementRenderer = $this->_form->getElementRenderer();
  60. $this->assertSame($setElementRenderer, $getElementRenderer);
  61. // restore our Form to its earlier state
  62. $this->_form->setElementRenderer(null);
  63. $setFieldsetRenderer = $this->getMockBuilder(\Magento\Backend\Block\Widget\Form\Renderer\Fieldset::class)
  64. ->disableOriginalConstructor()
  65. ->getMock();
  66. $this->_form->setFieldsetRenderer($setFieldsetRenderer);
  67. $getFieldsetRenderer = $this->_form->getFieldsetRenderer();
  68. $this->assertSame($setFieldsetRenderer, $getFieldsetRenderer);
  69. $setFieldsetElementRenderer = $this->getMockBuilder(\Magento\Backend\Block\Widget\Form\Renderer\Fieldset::class)
  70. ->disableOriginalConstructor()
  71. ->getMock();
  72. $this->_form->setFieldsetElementRenderer($setFieldsetElementRenderer);
  73. $getFieldsetElementRenderer = $this->_form->getFieldsetElementRenderer();
  74. $this->assertSame($setFieldsetElementRenderer, $getFieldsetElementRenderer);
  75. $this->assertSame($this->_form->getHtmlAttributes(), ['id', 'name', 'method',
  76. 'action', 'enctype', 'class', 'onsubmit', 'target']);
  77. $this->_form->setFieldContainerIdPrefix('abc');
  78. $this->assertSame($this->_form->getFieldContainerIdPrefix(), 'abc');
  79. $result = $this->_form->addSuffixToName('123', 'abc');
  80. $this->assertSame($result, 'abc[123]');
  81. }
  82. /**
  83. * @expectedException \InvalidArgumentException
  84. * @expectedExceptionMessage An element with a "1" ID already exists.
  85. */
  86. public function testElementExistsException()
  87. {
  88. $buttonElement = $this->getMockBuilder(\Magento\Framework\Data\Form\Element\Button::class)
  89. ->disableOriginalConstructor()
  90. ->getMock();
  91. $buttonElement->expects($this->any())->method('getId')->will($this->returnValue('1'));
  92. $this->_form->addElement($buttonElement);
  93. $this->_form->addElementToCollection($buttonElement);
  94. $this->_form->checkElementId($buttonElement->getId());
  95. }
  96. public function testElementOperations()
  97. {
  98. $buttonElement = $this->getMockBuilder(\Magento\Framework\Data\Form\Element\Button::class)
  99. ->disableOriginalConstructor()
  100. ->getMock();
  101. $buttonElement->expects($this->any())->method('getId')->will($this->returnValue('1'));
  102. $buttonElement->expects($this->any())->method('getName')->will($this->returnValue('Hero'));
  103. $this->_form->addElement($buttonElement);
  104. $this->_form->addElementToCollection($buttonElement);
  105. $this->_form->addValues(['1', '2', '3']);
  106. $this->_form->setValues(['4', '5', '6']);
  107. $this->_form->addFieldNameSuffix('abc123');
  108. $this->_form->removeField($buttonElement->getId());
  109. $this->assertSame($this->_form->checkElementId($buttonElement->getId()), true);
  110. }
  111. }