', $result);
$result = $this->Form->control('Article.created', [
'type' => 'datetime',
]);
$this->assertContains('
', $result);
}
/**
* testFormGroupTemplates method
*
* Test that *Container templates are used by input.
*
* @return void
*/
public function testFormGroupTemplates()
{
$this->Form->setTemplates([
'radioFormGroup' => '
{{label}}{{input}}
',
]);
$this->Form->create($this->article);
$result = $this->Form->control('accept', [
'type' => 'radio',
'options' => ['Y', 'N'],
]);
$this->assertContains('
', $result);
}
/**
* testResetTemplates method
*
* Test resetting templates.
*
* @return void
*/
public function testResetTemplates()
{
$this->Form->setTemplates(['input' => '']);
$this->assertEquals('', $this->Form->templater()->get('input'));
$this->Form->resetTemplates();
$this->assertNotEquals('', $this->Form->templater()->get('input'));
}
/**
* testContext method
*
* Test the context method.
*
* @return void
*/
public function testContext()
{
$result = $this->Form->context();
$this->assertInstanceOf('Cake\View\Form\ContextInterface', $result);
$mock = $this->getMockBuilder('Cake\View\Form\ContextInterface')->getMock();
$this->assertSame($mock, $this->Form->context($mock));
$this->assertSame($mock, $this->Form->context());
}
/**
* testAutoDomId method
*
* @return void
*/
public function testAutoDomId()
{
$result = $this->Form->text('field', ['id' => true]);
$expected = [
'input' => ['type' => 'text', 'name' => 'field', 'id' => 'field'],
];
$this->assertHtml($expected, $result);
// Ensure id => doesn't cause problem when multiple inputs are generated.
$result = $this->Form->radio('field', ['option A', 'option B'], ['id' => true]);
$expected = [
'input' => ['type' => 'hidden', 'name' => 'field', 'value' => ''],
['label' => ['for' => 'field-0']],
['input' => ['type' => 'radio', 'name' => 'field', 'value' => '0', 'id' => 'field-0']],
'option A',
'/label',
['label' => ['for' => 'field-1']],
['input' => ['type' => 'radio', 'name' => 'field', 'value' => '1', 'id' => 'field-1']],
'option B',
'/label',
];
$this->assertHtml($expected, $result);
$result = $this->Form->select(
'multi_field',
['first', 'second'],
['multiple' => 'checkbox', 'id' => true]
);
$expected = [
'input' => [
'type' => 'hidden', 'name' => 'multi_field', 'value' => '',
],
['div' => ['class' => 'checkbox']],
['label' => ['for' => 'multi-field-0']],
['input' => [
'type' => 'checkbox', 'name' => 'multi_field[]',
'value' => '0', 'id' => 'multi-field-0',
]],
'first',
'/label',
'/div',
['div' => ['class' => 'checkbox']],
['label' => ['for' => 'multi-field-1']],
['input' => [
'type' => 'checkbox', 'name' => 'multi_field[]',
'value' => '1', 'id' => 'multi-field-1',
]],
'second',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
}
/**
* Test the basic setters and getters for value sources
*
* @return void
*/
public function testFormValueSourcesSettersGetters()
{
$this->View->setRequest($this->View->getRequest()
->withData('id', '1')
->withQueryParams(['id' => '2']));
$expected = ['context'];
$result = $this->Form->getValueSources();
$this->assertEquals($expected, $result);
$expected = ['query', 'data', 'context'];
$this->Form->setValueSources(['query', 'data', 'invalid', 'context', 'foo']);
$result = $this->Form->getValueSources();
$this->assertEquals($expected, $result);
$this->Form->setValueSources(['context']);
$expected = '1';
$result = $this->Form->getSourceValue('id');
$this->assertEquals($expected, $result);
$this->Form->setValueSources('query');
$expected = ['query'];
$result = $this->Form->getValueSources();
$this->assertEquals($expected, $result);
$expected = '2';
$result = $this->Form->getSourceValue('id');
$this->assertEquals($expected, $result);
$this->Form->setValueSources(['data']);
$expected = '1';
$result = $this->Form->getSourceValue('id');
$this->assertEquals($expected, $result);
$this->Form->setValueSources(['query', 'data']);
$expected = '2';
$result = $this->Form->getSourceValue('id');
$this->assertEquals($expected, $result);
}
/**
* Tests the different input rendering values based on sources values switching
*
* @return void
*/
public function testFormValueSourcesSingleSwitchRendering()
{
$this->loadFixtures('Articles');
$articles = $this->getTableLocator()->get('Articles');
$article = new Article();
$articles->patchEntity($article, ['id' => '3']);
$this->Form->create($article);
$this->Form->setValueSources(['context']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '3']],
];
$this->assertHtml($expected, $result);
$this->View->setRequest($this->View->getRequest()->withQueryParams(['id' => 5]));
$this->Form->setValueSources(['query']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '5']],
];
$this->assertHtml($expected, $result);
$this->View->setRequest($this->View->getRequest()
->withQueryParams(['id' => '5a'])
->withData('id', '5b'));
$this->Form->setValueSources(['context']);
$this->Form->create($article);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '5b']],
];
$this->assertHtml($expected, $result);
$this->Form->setValueSources(['data']);
$this->Form->create($article);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '5b']],
];
$this->assertHtml($expected, $result);
$this->Form->setValueSources(['query']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '5a']],
];
$this->assertHtml($expected, $result);
}
/**
* Tests the different input rendering values based on sources values switching while supplying
* an entity (base context) and multiple sources (such as data, query)
*
* @return void
*/
public function testFormValueSourcesListSwitchRendering()
{
$this->loadFixtures('Articles');
$articles = $this->getTableLocator()->get('Articles');
$article = new Article();
$articles->patchEntity($article, ['id' => '3']);
$this->View->setRequest($this->View->getRequest()->withQueryParams(['id' => '9']));
$this->Form->create($article);
$this->Form->setValueSources(['context', 'query']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '3']],
];
$this->assertHtml($expected, $result);
$this->Form->setValueSources(['query', 'context']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '9']],
];
$this->assertHtml($expected, $result);
$this->Form->setValueSources(['data', 'query', 'context']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '9']],
];
$this->assertHtml($expected, $result);
$this->View->setRequest($this->View->getRequest()
->withData('id', '8')
->withQueryParams(['id' => '9']));
$this->Form->setValueSources(['data', 'query', 'context']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '8']],
];
$this->assertHtml($expected, $result);
}
/**
* Test the different form input renderings based on values sources switchings through form options
*
* @return void
*/
public function testFormValueSourcesSwitchViaOptionsRendering()
{
$this->loadFixtures('Articles');
$articles = $this->getTableLocator()->get('Articles');
$article = new Article();
$articles->patchEntity($article, ['id' => '3']);
$this->View->setRequest(
$this->View->getRequest()->withData('id', 4)->withQueryParams(['id' => 5])
);
$this->Form->create($article, ['valueSources' => 'query']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '5']],
];
$this->assertHtml($expected, $result);
$result = $this->Form->getSourceValue('id');
$this->assertEquals('5', $result);
$this->Form->setValueSources(['context']);
$this->Form->create($article, ['valueSources' => 'query']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '5']],
];
$this->assertHtml($expected, $result);
$result = $this->Form->getSourceValue('id');
$this->assertEquals('5', $result);
$this->Form->setValueSources(['query']);
$this->Form->create($article, ['valueSources' => 'data']);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '4']],
];
$this->assertHtml($expected, $result);
$result = $this->Form->getSourceValue('id');
$this->assertEquals('4', $result);
$this->Form->setValueSources(['query']);
$this->Form->create($article, ['valueSources' => ['context', 'data']]);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '4']],
];
$this->assertHtml($expected, $result);
$result = $this->Form->getSourceValue('id');
$this->assertEquals('4', $result);
}
/**
* Test the different form input renderings based on values sources switchings through form options
*
* @return void
*/
public function testFormValueSourcesSwitchViaOptionsAndSetterRendering()
{
$this->loadFixtures('Articles');
$articles = $this->getTableLocator()->get('Articles');
$article = new Article();
$articles->patchEntity($article, ['id' => '3']);
$this->View->setRequest(
$this->View->getRequest()->withData('id', 10)->withQueryParams(['id' => 11])
);
$this->Form->setValueSources(['context'])
->create($article, ['valueSources' => ['query', 'data']]);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '11']],
];
$this->assertHtml($expected, $result);
$result = $this->Form->getSourceValue('id');
$this->assertEquals('11', $result);
$this->View->setRequest($this->View->getRequest()->withQueryParams([]));
$this->Form->setValueSources(['context'])
->create($article, ['valueSources' => ['query', 'data']]);
$result = $this->Form->control('id');
$expected = [
['input' => ['type' => 'hidden', 'name' => 'id', 'id' => 'id', 'value' => '10']],
];
$this->assertHtml($expected, $result);
$result = $this->Form->getSourceValue('id');
$this->assertEquals('10', $result);
}
/**
* Test the different form values sources resetting through From::end();
*
* @return void
*/
public function testFormValueSourcesResetViaEnd()
{
$expected = ['context'];
$result = $this->Form->getValueSources();
$this->assertEquals($expected, $result);
$expected = ['query', 'context', 'data'];
$this->Form->setValueSources(['query', 'context', 'data']);
$result = $this->Form->getValueSources();
$this->assertEquals($expected, $result);
$this->Form->create();
$result = $this->Form->getValueSources();
$this->assertEquals($expected, $result);
$this->Form->end();
$result = $this->Form->getValueSources();
$this->assertEquals(['context'], $result);
}
/**
* Test sources values defaults handling
*
* @return void
*/
public function testFormValueSourcesDefaults()
{
$this->View->setRequest(
$this->View->getRequest()->withQueryParams(['password' => 'open Sesame'])
);
$this->Form->create();
$result = $this->Form->password('password');
$expected = ['input' => ['type' => 'password', 'name' => 'password']];
$this->assertHtml($expected, $result);
$result = $this->Form->password('password', ['default' => 'helloworld']);
$expected = ['input' => ['type' => 'password', 'name' => 'password', 'value' => 'helloworld']];
$this->assertHtml($expected, $result);
$this->Form->setValueSources('query');
$result = $this->Form->password('password', ['default' => 'helloworld']);
$expected = ['input' => ['type' => 'password', 'name' => 'password', 'value' => 'open Sesame']];
$this->assertHtml($expected, $result);
$this->Form->setValueSources('data');
$result = $this->Form->password('password', ['default' => 'helloworld']);
$expected = ['input' => ['type' => 'password', 'name' => 'password', 'value' => 'helloworld']];
$this->assertHtml($expected, $result);
}
/**
* Test sources values schema defaults handling
*
* @return void
*/
public function testSourcesValueDoesntExistPassThrough()
{
$this->View->setRequest($this->View->getRequest()->withQueryParams(['category' => 'sesame-cookies']));
$articles = $this->getTableLocator()->get('Articles');
$entity = $articles->newEntity();
$this->Form->create($entity);
$this->Form->setValueSources(['query', 'context']);
$result = $this->Form->getSourceValue('category');
$this->assertEquals('sesame-cookies', $result);
$this->Form->setValueSources(['context', 'query']);
$result = $this->Form->getSourceValue('category');
$this->assertEquals('sesame-cookies', $result);
}
/**
* testNestedLabelInput method
*
* Test the `nestedInput` parameter
*
* @group deprecated
* @return void
*/
public function testNestedLabelInput()
{
$this->deprecated(function () {
$result = $this->Form->input('foo', ['nestedInput' => true]);
$expected = [
'div' => ['class' => 'input text'],
'label' => ['for' => 'foo'],
['input' => [
'type' => 'text',
'name' => 'foo',
'id' => 'foo',
]],
'Foo',
'/label',
'/div',
];
$this->assertHtml($expected, $result);
});
}
/**
* Tests to make sure `labelOptions` is rendered correctly by MultiCheckboxWidget and RadioWidget
*
* This test makes sure `false` excludes the label from the render
*
* @return void
*/
public function testControlLabelManipulationDisableLabels()
{
$result = $this->Form->control('test', [
'type' => 'radio',
'options' => ['A', 'B'],
'labelOptions' => false,
]);
$expected = [
['div' => ['class' => 'input radio']],
'