|  |  |  | <?php
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace yiiunit\extensions\bootstrap;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use yii\base\DynamicModel;
 | 
					
						
							|  |  |  | use yii\bootstrap\ActiveField;
 | 
					
						
							|  |  |  | use yii\bootstrap\ActiveForm;
 | 
					
						
							|  |  |  | use Yii;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ActiveFieldTest extends TestCase
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var ActiveField
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     private $activeField;
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var DynamicModel
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     private $helperModel;
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var ActiveForm
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     private $helperForm;
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var string
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     private $attributeName = 'attributeName';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function setUp()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         // dirty way to have Request object not throwing exception when running testHomeLinkNull()
 | 
					
						
							|  |  |  |         $_SERVER['SCRIPT_FILENAME'] = "index.php";
 | 
					
						
							|  |  |  |         $_SERVER['SCRIPT_NAME'] = "index.php";
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         parent::setUp();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->helperModel = new DynamicModel(['attributeName']);
 | 
					
						
							|  |  |  |         ob_start();
 | 
					
						
							|  |  |  |         $this->helperForm = ActiveForm::begin(['action' => '/something', 'enableClientScript' => false]);
 | 
					
						
							|  |  |  |         ActiveForm::end();
 | 
					
						
							|  |  |  |         ob_end_clean();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->activeField = new ActiveField(['form' => $this->helperForm]);
 | 
					
						
							|  |  |  |         $this->activeField->model = $this->helperModel;
 | 
					
						
							|  |  |  |         $this->activeField->attribute = $this->attributeName;
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Tests :
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testRadioList()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         $html = $this->activeField->radioList([1 => 'name1', 2 => 'name2'])->render();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $expectedHtml = <<<HTML
 | 
					
						
							|  |  |  | <div class="form-group field-dynamicmodel-attributename">
 | 
					
						
							|  |  |  | <label class="control-label">Attribute Name</label>
 | 
					
						
							|  |  |  | <input type="hidden" name="DynamicModel[attributeName]" value=""><div id="dynamicmodel-attributename"><div class="radio"><label><input type="radio" name="DynamicModel[attributeName]" value="1"> name1</label></div>
 | 
					
						
							|  |  |  | <div class="radio"><label><input type="radio" name="DynamicModel[attributeName]" value="2"> name2</label></div></div>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <p class="help-block help-block-error"></p>
 | 
					
						
							|  |  |  | </div>
 | 
					
						
							|  |  |  | HTML;
 | 
					
						
							|  |  |  |         $this->assertEqualsWithoutLE($expectedHtml, $html);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testCheckboxList()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         $html = $this->activeField->checkboxList([1 => 'name1', 2 => 'name2'])->render();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $expectedHtml = <<<HTML
 | 
					
						
							|  |  |  | <div class="form-group field-dynamicmodel-attributename">
 | 
					
						
							|  |  |  | <label class="control-label">Attribute Name</label>
 | 
					
						
							|  |  |  | <input type="hidden" name="DynamicModel[attributeName]" value=""><div id="dynamicmodel-attributename"><div class="checkbox"><label><input type="checkbox" name="DynamicModel[attributeName][]" value="1"> name1</label></div>
 | 
					
						
							|  |  |  | <div class="checkbox"><label><input type="checkbox" name="DynamicModel[attributeName][]" value="2"> name2</label></div></div>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <p class="help-block help-block-error"></p>
 | 
					
						
							|  |  |  | </div>
 | 
					
						
							|  |  |  | HTML;
 | 
					
						
							|  |  |  |         $this->assertEqualsWithoutLE($expectedHtml, $html);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @depends testRadioList
 | 
					
						
							|  |  |  |      *
 | 
					
						
							|  |  |  |      * @see https://github.com/yiisoft/yii2-bootstrap/issues/81
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function testRadioListItemOptions()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         $content = $this->activeField->radioList([1 => 'name1', 2 => 'name2'], [
 | 
					
						
							|  |  |  |             'itemOptions' => [
 | 
					
						
							|  |  |  |                 'data-attribute' => 'test'
 | 
					
						
							|  |  |  |             ]
 | 
					
						
							|  |  |  |         ])->render();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertContains('data-attribute="test"', $content);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @depends testCheckboxList
 | 
					
						
							|  |  |  |      *
 | 
					
						
							|  |  |  |      * @see https://github.com/yiisoft/yii2-bootstrap/issues/81
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function testCheckboxListItemOptions()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         $content = $this->activeField->checkboxList([1 => 'name1', 2 => 'name2'], [
 | 
					
						
							|  |  |  |             'itemOptions' => [
 | 
					
						
							|  |  |  |                 'data-attribute' => 'test'
 | 
					
						
							|  |  |  |             ]
 | 
					
						
							|  |  |  |         ])->render();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertContains('data-attribute="test"', $content);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 |