'',
];
$this->templates = new StringTemplate($templates);
$this->context = new NullContext([]);
$this->DateTime = new DateTimeWidget($this->templates);
}
/**
* Data provider for testing various acceptable selected values.
*
* @return array
*/
public static function selectedValuesProvider(): array
{
$date = new DateTime('2014-01-20 12:30:45');
return [
'DateTime' => [$date],
'string' => [$date->format('Y-m-d H:i:s')],
'int string' => [$date->format('U')],
'int' => [$date->getTimestamp()],
];
}
/**
* test rendering selected values.
*
* @param mixed $selected
*/
#[DataProvider('selectedValuesProvider')]
public function testRenderValid($selected): void
{
$result = $this->DateTime->render(['val' => $selected], $this->context);
$expected = [
'input' => [
'type' => 'datetime-local',
'name' => '',
'value' => '2014-01-20T12:30:45',
'step' => '1',
],
];
$this->assertHtml($expected, $result);
}
/**
* testTimezoneOption
*/
public function testTimezoneOption(): void
{
$result = $this->DateTime->render([
'val' => '2019-02-03 10:00:00',
'timezone' => 'Asia/Kolkata',
], $this->context);
$expected = [
'input' => [
'type' => 'datetime-local',
'name' => '',
'value' => '2019-02-03T15:30:00',
'step' => '1',
],
];
$this->assertHtml($expected, $result);
}
public function testUnsettingStep(): void
{
$result = $this->DateTime->render([
'val' => '2019-02-03 10:11:12',
'step' => null,
], $this->context);
$expected = [
'input' => [
'type' => 'datetime-local',
'name' => '',
'value' => '2019-02-03T10:11:12',
],
];
$this->assertHtml($expected, $result);
$result = $this->DateTime->render([
'val' => '2019-02-03 10:11:12',
'step' => false,
], $this->context);
$expected = [
'input' => [
'type' => 'datetime-local',
'name' => '',
'value' => '2019-02-03T10:11:12',
],
];
$this->assertHtml($expected, $result);
}
public function testDatetimeFormat(): void
{
$result = $this->DateTime->render([
'val' => '2019-02-03 10:11:12',
'format' => 'Y-m-d\TH:i',
], $this->context);
$expected = [
'input' => [
'type' => 'datetime-local',
'name' => '',
'value' => '2019-02-03T10:11',
],
];
$this->assertHtml($expected, $result);
$result = $this->DateTime->render([
'val' => '2019-02-03 10:11:12',
'format' => 'Y-m-d\TH:i',
'step' => 120,
], $this->context);
$expected = [
'input' => [
'type' => 'datetime-local',
'name' => '',
'step' => '120',
'value' => '2019-02-03T10:11',
],
];
$this->assertHtml($expected, $result);
$result = $this->DateTime->render([
'type' => 'time',
'val' => '10:11:12',
'format' => 'H:i',
], $this->context);
$expected = [
'input' => [
'type' => 'time',
'name' => '',
'value' => '10:11',
],
];
$this->assertHtml($expected, $result);
$result = $this->DateTime->render([
'type' => 'time',
'val' => '10:11:12',
'format' => 'H:i',
'step' => 120,
], $this->context);
$expected = [
'input' => [
'type' => 'time',
'name' => '',
'step' => '120',
'value' => '10:11',
],
];
$this->assertHtml($expected, $result);
}
/**
* Test rendering with templateVars
*/
public function testRenderTemplateVars(): void
{
$templates = [
'input' => '{{help}}',
];
$this->templates->add($templates);
$result = $this->DateTime->render([
'name' => 'date',
'templateVars' => ['help' => 'some help'],
], $this->context);
$this->assertStringContainsString('some help', $result);
}
/**
* testRenderInvalidTypeException
*/
public function testRenderInvalidTypeException(): void
{
$this->expectException('InvalidArgumentException');
$this->expectExceptionMessage('Invalid type `foo` for input tag, expected datetime-local, date, time, month or week');
$this->DateTime->render(['type' => 'foo', 'val' => new DateTime()], $this->context);
}
/**
* Test that secureFields omits removed selects
*/
public function testSecureFields(): void
{
$data = [
'name' => 'date',
];
$result = $this->DateTime->secureFields($data);
$expected = [
'date',
];
$this->assertEquals($expected, $result);
}
}