comparison vendor/sabre/vobject/tests/VObject/Component/VCardTest.php @ 7:430dbd5346f7

vendor sabre as distributed
author Charlie Root
date Sat, 13 Jan 2018 09:06:10 -0500
parents
children
comparison
equal deleted inserted replaced
6:cec75ba50afc 7:430dbd5346f7
1 <?php
2
3 namespace Sabre\VObject\Component;
4
5 use Sabre\VObject;
6
7 class VCardTest extends \PHPUnit_Framework_TestCase {
8
9 /**
10 * @dataProvider validateData
11 */
12 function testValidate($input, $expectedWarnings, $expectedRepairedOutput) {
13
14 $vcard = VObject\Reader::read($input);
15
16 $warnings = $vcard->validate();
17
18 $warnMsg = array();
19 foreach($warnings as $warning) {
20 $warnMsg[] = $warning['message'];
21 }
22
23 $this->assertEquals($expectedWarnings, $warnMsg);
24
25 $vcard->validate(VObject\Component::REPAIR);
26
27 $this->assertEquals(
28 $expectedRepairedOutput,
29 $vcard->serialize()
30 );
31
32 }
33
34 public function validateData() {
35
36 $tests = array();
37
38 // Correct
39 $tests[] = array(
40 "BEGIN:VCARD\r\nVERSION:4.0\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
41 array(),
42 "BEGIN:VCARD\r\nVERSION:4.0\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
43 );
44
45 // No VERSION
46 $tests[] = array(
47 "BEGIN:VCARD\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
48 array(
49 'VERSION MUST appear exactly once in a VCARD component',
50 ),
51 "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
52 );
53
54 // Unknown version
55 $tests[] = array(
56 "BEGIN:VCARD\r\nVERSION:2.2\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
57 array(
58 'Only vcard version 4.0 (RFC6350), version 3.0 (RFC2426) or version 2.1 (icm-vcard-2.1) are supported.',
59 ),
60 "BEGIN:VCARD\r\nVERSION:2.1\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
61 );
62
63 // No FN
64 $tests[] = array(
65 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nEND:VCARD\r\n",
66 array(
67 'The FN property must appear in the VCARD component exactly 1 time',
68 ),
69 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nEND:VCARD\r\n",
70 );
71 // No FN, N fallback
72 $tests[] = array(
73 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;John;;;;;\r\nEND:VCARD\r\n",
74 array(
75 'The FN property must appear in the VCARD component exactly 1 time',
76 ),
77 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;John;;;;;\r\nFN:John Doe\r\nEND:VCARD\r\n",
78 );
79 // No FN, N fallback, no first name
80 $tests[] = array(
81 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;;;;;;\r\nEND:VCARD\r\n",
82 array(
83 'The FN property must appear in the VCARD component exactly 1 time',
84 ),
85 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;;;;;;\r\nFN:Doe\r\nEND:VCARD\r\n",
86 );
87
88 // No FN, ORG fallback
89 $tests[] = array(
90 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nORG:Acme Co.\r\nEND:VCARD\r\n",
91 array(
92 'The FN property must appear in the VCARD component exactly 1 time',
93 ),
94 "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nORG:Acme Co.\r\nFN:Acme Co.\r\nEND:VCARD\r\n",
95 );
96 return $tests;
97
98 }
99
100 function testGetDocumentType() {
101
102 $vcard = new VCard(array(), false);
103 $vcard->VERSION = '2.1';
104 $this->assertEquals(VCard::VCARD21, $vcard->getDocumentType());
105
106 $vcard = new VCard(array(), false);
107 $vcard->VERSION = '3.0';
108 $this->assertEquals(VCard::VCARD30, $vcard->getDocumentType());
109
110 $vcard = new VCard(array(), false);
111 $vcard->VERSION = '4.0';
112 $this->assertEquals(VCard::VCARD40, $vcard->getDocumentType());
113
114 $vcard = new VCard(array(), false);
115 $this->assertEquals(VCard::UNKNOWN, $vcard->getDocumentType());
116 }
117
118 function testPreferredNoPref() {
119
120 $vcard = <<<VCF
121 BEGIN:VCARD
122 VERSION:3.0
123 EMAIL:1@example.org
124 EMAIL:2@example.org
125 END:VCARD
126 VCF;
127
128 $vcard = VObject\Reader::read($vcard);
129 $this->assertEquals('1@example.org', $vcard->preferred('EMAIL')->getValue());
130
131 }
132
133 function testPreferredWithPref() {
134
135 $vcard = <<<VCF
136 BEGIN:VCARD
137 VERSION:3.0
138 EMAIL:1@example.org
139 EMAIL;TYPE=PREF:2@example.org
140 END:VCARD
141 VCF;
142
143 $vcard = VObject\Reader::read($vcard);
144 $this->assertEquals('2@example.org', $vcard->preferred('EMAIL')->getValue());
145
146 }
147
148 function testPreferredWith40Pref() {
149
150 $vcard = <<<VCF
151 BEGIN:VCARD
152 VERSION:4.0
153 EMAIL:1@example.org
154 EMAIL;PREF=3:2@example.org
155 EMAIL;PREF=2:3@example.org
156 END:VCARD
157 VCF;
158
159 $vcard = VObject\Reader::read($vcard);
160 $this->assertEquals('3@example.org', $vcard->preferred('EMAIL')->getValue());
161
162 }
163
164 function testPreferredNotFound() {
165
166 $vcard = <<<VCF
167 BEGIN:VCARD
168 VERSION:4.0
169 END:VCARD
170 VCF;
171
172 $vcard = VObject\Reader::read($vcard);
173 $this->assertNull($vcard->preferred('EMAIL'));
174
175 }
176
177 function testNoUIDCardDAV() {
178
179 $vcard = <<<VCF
180 BEGIN:VCARD
181 VERSION:4.0
182 FN:John Doe
183 END:VCARD
184 VCF;
185 $this->assertValidate(
186 $vcard,
187 VCARD::PROFILE_CARDDAV,
188 3,
189 'vCards on CardDAV servers MUST have a UID property.'
190 );
191
192 }
193
194 function testNoUIDNoCardDAV() {
195
196 $vcard = <<<VCF
197 BEGIN:VCARD
198 VERSION:4.0
199 FN:John Doe
200 END:VCARD
201 VCF;
202 $this->assertValidate(
203 $vcard,
204 0,
205 2,
206 'Adding a UID to a vCard property is recommended.'
207 );
208
209 }
210 function testNoUIDNoCardDAVRepair() {
211
212 $vcard = <<<VCF
213 BEGIN:VCARD
214 VERSION:4.0
215 FN:John Doe
216 END:VCARD
217 VCF;
218 $this->assertValidate(
219 $vcard,
220 VCARD::REPAIR,
221 1,
222 'Adding a UID to a vCard property is recommended.'
223 );
224
225 }
226
227 function testVCard21CardDAV() {
228
229 $vcard = <<<VCF
230 BEGIN:VCARD
231 VERSION:2.1
232 FN:John Doe
233 UID:foo
234 END:VCARD
235 VCF;
236 $this->assertValidate(
237 $vcard,
238 VCARD::PROFILE_CARDDAV,
239 3,
240 'CardDAV servers are not allowed to accept vCard 2.1.'
241 );
242
243 }
244
245 function testVCard21NoCardDAV() {
246
247 $vcard = <<<VCF
248 BEGIN:VCARD
249 VERSION:2.1
250 FN:John Doe
251 UID:foo
252 END:VCARD
253 VCF;
254 $this->assertValidate(
255 $vcard,
256 0,
257 0
258 );
259
260 }
261
262 function assertValidate($vcf, $options, $expectedLevel, $expectedMessage = null) {
263
264 $vcal = VObject\Reader::read($vcf);
265 $result = $vcal->validate($options);
266
267 $this->assertValidateResult($result, $expectedLevel, $expectedMessage);
268
269 }
270
271 function assertValidateResult($input, $expectedLevel, $expectedMessage = null) {
272
273 $messages = array();
274 foreach($input as $warning) {
275 $messages[] = $warning['message'];
276 }
277
278 if ($expectedLevel === 0) {
279 $this->assertEquals(0, count($input), 'No validation messages were expected. We got: ' . implode(', ', $messages));
280 } else {
281 $this->assertEquals(1, count($input), 'We expected exactly 1 validation message, We got: ' . implode(', ', $messages));
282
283 $this->assertEquals($expectedMessage, $input[0]['message']);
284 $this->assertEquals($expectedLevel, $input[0]['level']);
285 }
286
287 }
288 }