Completed
Push — master ( 5ba1c4...dfe375 )
by Daniel
13:10
created

testDescriptionTemplate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 8
c 1
b 1
f 0
nc 1
nop 0
dl 0
loc 12
rs 9.4285
1
<?php
2
/**
3
 * @package framework
4
 * @subpackage forms
5
 */
6
class MemberDatetimeOptionsetFieldTest extends SapphireTest {
7
8
	protected static $fixture_file = 'MemberDatetimeOptionsetFieldTest.yml';
9
10
	protected function createDateFormatFieldForMember($member) {
11
		require_once 'Zend/Date.php';
12
		$defaultDateFormat = Zend_Locale_Format::getDateFormat($member->Locale);
13
		$dateFormatMap = array(
14
			'yyyy-MM-dd' => Zend_Date::now()->toString('yyyy-MM-dd'),
15
			'yyyy/MM/dd' => Zend_Date::now()->toString('yyyy/MM/dd'),
16
			'MM/dd/yyyy' => Zend_Date::now()->toString('MM/dd/yyyy'),
17
			'dd/MM/yyyy' => Zend_Date::now()->toString('dd/MM/yyyy'),
18
		);
19
		$dateFormatMap[$defaultDateFormat] = Zend_Date::now()->toString($defaultDateFormat) . ' (default)';
20
		$field = new MemberDatetimeOptionsetField(
21
			'DateFormat',
22
			'Date format',
23
			$dateFormatMap
24
		);
25
		$field->setValue($member->DateFormat);
26
		return $field;
27
	}
28
29
	protected function createTimeFormatFieldForMember($member) {
30
		require_once 'Zend/Date.php';
31
		$defaultTimeFormat = Zend_Locale_Format::getTimeFormat($member->Locale);
32
		$timeFormatMap = array(
33
			'h:mm a' => Zend_Date::now()->toString('h:mm a'),
34
			'H:mm' => Zend_Date::now()->toString('H:mm'),
35
		);
36
		$timeFormatMap[$defaultTimeFormat] = Zend_Date::now()->toString($defaultTimeFormat) . ' (default)';
37
		$field = new MemberDatetimeOptionsetField(
38
			'TimeFormat',
39
			'Time format',
40
			$timeFormatMap
41
		);
42
		$field->setValue($member->TimeFormat);
43
		return $field;
44
	}
45
46
	public function testDateFormatDefaultCheckedInFormField() {
47
		Config::inst()->update('i18n', 'date_format', 'yyyy-MM-dd');
48
		$field = $this->createDateFormatFieldForMember($this->objFromFixture('Member', 'noformatmember'));
49
		$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
50
			new FieldList())); // fake form
51
		$parser = new CSSContentParser($field->Field());
52
		$xmlArr = $parser->getBySelector('#Form_Form_DateFormat_yyyy-MM-dd');
53
		$this->assertEquals('checked', (string) $xmlArr[0]['checked']);
54
	}
55
56
	public function testTimeFormatDefaultCheckedInFormField() {
57
		Config::inst()->update('i18n', 'time_format', 'h:mm:ss a');
58
		$field = $this->createTimeFormatFieldForMember($this->objFromFixture('Member', 'noformatmember'));
59
		$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
60
			new FieldList())); // fake form
61
		$parser = new CSSContentParser($field->Field());
62
		$xmlArr = $parser->getBySelector('#Form_Form_TimeFormat_h:mm:ss_a');
63
		$this->assertEquals('checked', (string) $xmlArr[0]['checked']);
64
	}
65
66
	public function testDateFormatChosenIsCheckedInFormField() {
67
		$member = $this->objFromFixture('Member', 'noformatmember');
68
		$member->setField('DateFormat', 'MM/dd/yyyy');
69
		$field = $this->createDateFormatFieldForMember($member);
70
		$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
71
			new FieldList())); // fake form
72
		$parser = new CSSContentParser($field->Field());
73
		$xmlArr = $parser->getBySelector('#Form_Form_DateFormat_MM_dd_yyyy');
74
		$this->assertEquals('checked', (string) $xmlArr[0]['checked']);
75
	}
76
77
	public function testDateFormatCustomFormatAppearsInCustomInputInField() {
78
		$member = $this->objFromFixture('Member', 'noformatmember');
79
		$member->setField('DateFormat', 'dd MM yy');
80
		$field = $this->createDateFormatFieldForMember($member);
81
		$field->setForm(new Form(new MemberDatetimeOptionsetFieldTest_Controller(), 'Form', new FieldList(),
82
			new FieldList())); // fake form
83
		$parser = new CSSContentParser($field->Field());
84
		$xmlInputArr = $parser->getBySelector('.valcustom input');
85
		$this->assertEquals('checked', (string) $xmlInputArr[0]['checked']);
86
		$this->assertEquals('dd MM yy', (string) $xmlInputArr[1]['value']);
87
	}
88
89
	public function testDateFormValid() {
90
		$field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat');
91
		$validator = new RequiredFields();
92
		$this->assertTrue($field->validate($validator));
93
		$field->setValue(array(
94
			'Options' => '__custom__',
95
			'Custom' => 'dd MM yyyy'
96
		));
97
		$this->assertTrue($field->validate($validator));
98
		$field->setValue(array(
99
			'Options' => '__custom__',
100
			'Custom' => 'sdfdsfdfd1244'
101
		));
102
		$this->assertFalse($field->validate($validator));
103
	}
104
105
	public function testDescriptionTemplate() {
106
		$field = new MemberDatetimeOptionsetField('DateFormat', 'DateFormat');
107
108
		$this->assertEmpty($field->getDescription());
109
110
		$field->setDescription('Test description');
111
		$this->assertEquals('Test description', $field->getDescription());
112
113
		$field->setDescriptionTemplate('MemberDatetimeOptionsetField_description_time');
114
		$this->assertNotEmpty($field->getDescription());
115
		$this->assertNotEquals('Test description', $field->getDescription());
116
	}
117
118
}
119
class MemberDatetimeOptionsetFieldTest_Controller extends Controller {
120
121
	public function Link() {
122
		return 'test';
123
	}
124
125
}
126