silverstripe-framework/tests/forms/MemberDatetimeOptionsetFieldTest.php
Damian Mooyman c9b6e9bac0
API Update template lookup to late resolution for performance reasons
API Update behaviour of form fields to use standard template lookup mechanism
API Support custom "type" parameter to template lookup
2016-09-06 12:54:03 +12:00

126 lines
4.9 KiB
PHP

<?php
/**
* @package framework
* @subpackage forms
*/
class MemberDatetimeOptionsetFieldTest extends SapphireTest {
protected static $fixture_file = 'MemberDatetimeOptionsetFieldTest.yml';
protected function createDateFormatFieldForMember($member) {
require_once 'Zend/Date.php';
$defaultDateFormat = Zend_Locale_Format::getDateFormat($member->Locale);
$dateFormatMap = array(
'yyyy-MM-dd' => Zend_Date::now()->toString('yyyy-MM-dd'),
'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'),
'MM/dd/yyyy' => Zend_Date::now()->toString('MM/dd/yyyy'),
'dd/MM/yyyy' => Zend_Date::now()->toString('dd/MM/yyyy'),
);
$dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat) . ' (default)';
$field = new MemberDatetimeOptionsetField(
'DateFormat',
'Date format',
$dateFormatMap
);
$field->setValue($member->DateFormat);
return $field;
}
protected function createTimeFormatFieldForMember($member) {
require_once 'Zend/Date.php';
$defaultTimeFormat = Zend_Locale_Format::getTimeFormat($member->Locale);
$timeFormatMap = array(
'h:mm a' => Zend_Date::now()->toString('h:mm a'),
'H:mm' => Zend_Date::now()->toString('H:mm'),
);
$timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat) . ' (default)';
$field = new MemberDatetimeOptionsetField(
'TimeFormat',
'Time format',
$timeFormatMap
);
$field->setValue($member->TimeFormat);
return $field;
}
public function testDateFormatDefaultCheckedInFormField() {
Config::inst()->update('i18n', 'date_format', 'yyyy-MM-dd');
$field = $this->createDateFormatFieldForMember($this->objFromFixture('SilverStripe\\Security\\Member', 'noformatmember'));
$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
new FieldList())); // fake form
$parser = new CSSContentParser($field->Field());
$xmlArr = $parser->getBySelector('#Form_Form_DateFormat_yyyy-MM-dd');
$this->assertEquals('checked', (string) $xmlArr[0]['checked']);
}
public function testTimeFormatDefaultCheckedInFormField() {
Config::inst()->update('i18n', 'time_format', 'h:mm:ss a');
$field = $this->createTimeFormatFieldForMember($this->objFromFixture('SilverStripe\\Security\\Member', 'noformatmember'));
$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
new FieldList())); // fake form
$parser = new CSSContentParser($field->Field());
$xmlArr = $parser->getBySelector('#Form_Form_TimeFormat_h:mm:ss_a');
$this->assertEquals('checked', (string) $xmlArr[0]['checked']);
}
public function testDateFormatChosenIsCheckedInFormField() {
$member = $this->objFromFixture('SilverStripe\\Security\\Member', 'noformatmember');
$member->setField('DateFormat', 'MM/dd/yyyy');
$field = $this->createDateFormatFieldForMember($member);
$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
new FieldList())); // fake form
$parser = new CSSContentParser($field->Field());
$xmlArr = $parser->getBySelector('#Form_Form_DateFormat_MM_dd_yyyy');
$this->assertEquals('checked', (string) $xmlArr[0]['checked']);
}
public function testDateFormatCustomFormatAppearsInCustomInputInField() {
$member = $this->objFromFixture('SilverStripe\\Security\\Member', 'noformatmember');
$member->setField('DateFormat', 'dd MM yy');
$field = $this->createDateFormatFieldForMember($member);
$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
new FieldList())); // fake form
$parser = new CSSContentParser($field->Field());
$xmlInputArr = $parser->getBySelector('.valcustom input');
$this->assertEquals('checked', (string) $xmlInputArr[0]['checked']);
$this->assertEquals('dd MM yy', (string) $xmlInputArr[1]['value']);
}
public function testDateFormValid() {
$field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat');
$validator = new RequiredFields();
$this->assertTrue($field->validate($validator));
$field->setValue(array(
'Options' => '__custom__',
'Custom' => 'dd MM yyyy'
));
$this->assertTrue($field->validate($validator));
$field->setValue(array(
'Options' => '__custom__',
'Custom' => 'sdfdsfdfd1244'
));
$this->assertFalse($field->validate($validator));
}
public function testDescriptionTemplate() {
$field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat');
$this->assertEmpty($field->getDescription());
$field->setDescription('Test description');
$this->assertEquals('Test description', $field->getDescription());
$field->setDescriptionTemplate('MemberDatetimeOptionsetField_description_time');
$this->assertNotEmpty($field->getDescription());
$this->assertNotEquals('Test description', $field->getDescription());
}
}
class MemberDatetimeOptionsetFieldTest_Controller extends Controller {
public function Link($action = null) {
return Controller::join_links('test', $action, '/');
}
}