diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/sabre/vobject/tests/VObject/Component/VCardTest.php	Sat Jan 13 09:06:10 2018 -0500
@@ -0,0 +1,288 @@
+<?php
+
+namespace Sabre\VObject\Component;
+
+use Sabre\VObject;
+
+class VCardTest extends \PHPUnit_Framework_TestCase {
+
+    /**
+     * @dataProvider validateData
+     */
+    function testValidate($input, $expectedWarnings, $expectedRepairedOutput) {
+
+        $vcard = VObject\Reader::read($input);
+
+        $warnings = $vcard->validate();
+
+        $warnMsg = array();
+        foreach($warnings as $warning) {
+            $warnMsg[] = $warning['message'];
+        }
+
+        $this->assertEquals($expectedWarnings, $warnMsg);
+
+        $vcard->validate(VObject\Component::REPAIR);
+
+        $this->assertEquals(
+            $expectedRepairedOutput,
+            $vcard->serialize()
+        );
+
+    }
+
+    public function validateData() {
+
+        $tests = array();
+
+        // Correct
+        $tests[] = array(
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
+            array(),
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
+        );
+
+        // No VERSION
+        $tests[] = array(
+            "BEGIN:VCARD\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
+            array(
+                'VERSION MUST appear exactly once in a VCARD component',
+            ),
+            "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
+        );
+
+        // Unknown version
+        $tests[] = array(
+            "BEGIN:VCARD\r\nVERSION:2.2\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
+            array(
+                'Only vcard version 4.0 (RFC6350), version 3.0 (RFC2426) or version 2.1 (icm-vcard-2.1) are supported.',
+            ),
+            "BEGIN:VCARD\r\nVERSION:2.1\r\nFN:John Doe\r\nUID:foo\r\nEND:VCARD\r\n",
+        );
+
+        // No FN
+        $tests[] = array(
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nEND:VCARD\r\n",
+            array(
+                'The FN property must appear in the VCARD component exactly 1 time',
+            ),
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nEND:VCARD\r\n",
+        );
+        // No FN, N fallback
+        $tests[] = array(
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;John;;;;;\r\nEND:VCARD\r\n",
+            array(
+                'The FN property must appear in the VCARD component exactly 1 time',
+            ),
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;John;;;;;\r\nFN:John Doe\r\nEND:VCARD\r\n",
+        );
+        // No FN, N fallback, no first name
+        $tests[] = array(
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;;;;;;\r\nEND:VCARD\r\n",
+            array(
+                'The FN property must appear in the VCARD component exactly 1 time',
+            ),
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nN:Doe;;;;;;\r\nFN:Doe\r\nEND:VCARD\r\n",
+        );
+
+        // No FN, ORG fallback
+        $tests[] = array(
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nORG:Acme Co.\r\nEND:VCARD\r\n",
+            array(
+                'The FN property must appear in the VCARD component exactly 1 time',
+            ),
+            "BEGIN:VCARD\r\nVERSION:4.0\r\nUID:foo\r\nORG:Acme Co.\r\nFN:Acme Co.\r\nEND:VCARD\r\n",
+        );
+        return $tests;
+
+    }
+
+    function testGetDocumentType() {
+
+        $vcard = new VCard(array(), false);
+        $vcard->VERSION = '2.1';
+        $this->assertEquals(VCard::VCARD21, $vcard->getDocumentType());
+
+        $vcard = new VCard(array(), false);
+        $vcard->VERSION = '3.0';
+        $this->assertEquals(VCard::VCARD30, $vcard->getDocumentType());
+
+        $vcard = new VCard(array(), false);
+        $vcard->VERSION = '4.0';
+        $this->assertEquals(VCard::VCARD40, $vcard->getDocumentType());
+
+        $vcard = new VCard(array(), false);
+        $this->assertEquals(VCard::UNKNOWN, $vcard->getDocumentType());
+    }
+
+    function testPreferredNoPref() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:3.0
+EMAIL:1@example.org
+EMAIL:2@example.org
+END:VCARD
+VCF;
+
+        $vcard = VObject\Reader::read($vcard);
+        $this->assertEquals('1@example.org', $vcard->preferred('EMAIL')->getValue());
+
+    }
+
+    function testPreferredWithPref() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:3.0
+EMAIL:1@example.org
+EMAIL;TYPE=PREF:2@example.org
+END:VCARD
+VCF;
+
+        $vcard = VObject\Reader::read($vcard);
+        $this->assertEquals('2@example.org', $vcard->preferred('EMAIL')->getValue());
+
+    }
+
+    function testPreferredWith40Pref() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+EMAIL:1@example.org
+EMAIL;PREF=3:2@example.org
+EMAIL;PREF=2:3@example.org
+END:VCARD
+VCF;
+
+        $vcard = VObject\Reader::read($vcard);
+        $this->assertEquals('3@example.org', $vcard->preferred('EMAIL')->getValue());
+
+    }
+
+    function testPreferredNotFound() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+END:VCARD
+VCF;
+
+        $vcard = VObject\Reader::read($vcard);
+        $this->assertNull($vcard->preferred('EMAIL'));
+
+    }
+
+    function testNoUIDCardDAV() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+FN:John Doe
+END:VCARD
+VCF;
+        $this->assertValidate(
+            $vcard,
+            VCARD::PROFILE_CARDDAV,
+            3,
+            'vCards on CardDAV servers MUST have a UID property.'
+        );
+
+    }
+
+    function testNoUIDNoCardDAV() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+FN:John Doe
+END:VCARD
+VCF;
+        $this->assertValidate(
+            $vcard,
+            0,
+            2,
+            'Adding a UID to a vCard property is recommended.'
+        );
+
+    }
+    function testNoUIDNoCardDAVRepair() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:4.0
+FN:John Doe
+END:VCARD
+VCF;
+        $this->assertValidate(
+            $vcard,
+            VCARD::REPAIR,
+            1,
+            'Adding a UID to a vCard property is recommended.'
+        );
+
+    }
+
+    function testVCard21CardDAV() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:2.1
+FN:John Doe
+UID:foo
+END:VCARD
+VCF;
+        $this->assertValidate(
+            $vcard,
+            VCARD::PROFILE_CARDDAV,
+            3,
+            'CardDAV servers are not allowed to accept vCard 2.1.'
+        );
+
+    }
+
+    function testVCard21NoCardDAV() {
+
+        $vcard = <<<VCF
+BEGIN:VCARD
+VERSION:2.1
+FN:John Doe
+UID:foo
+END:VCARD
+VCF;
+        $this->assertValidate(
+            $vcard,
+            0,
+            0
+        );
+
+    }
+
+    function assertValidate($vcf, $options, $expectedLevel, $expectedMessage = null) {
+
+        $vcal = VObject\Reader::read($vcf);
+        $result = $vcal->validate($options);
+
+        $this->assertValidateResult($result, $expectedLevel, $expectedMessage);
+
+    }
+
+    function assertValidateResult($input, $expectedLevel, $expectedMessage = null) {
+
+        $messages = array();
+        foreach($input as $warning) {
+            $messages[] = $warning['message'];
+        }
+
+        if ($expectedLevel === 0) {
+            $this->assertEquals(0, count($input), 'No validation messages were expected. We got: ' . implode(', ', $messages));
+        } else {
+            $this->assertEquals(1, count($input), 'We expected exactly 1 validation message, We got: ' . implode(', ', $messages));
+
+            $this->assertEquals($expectedMessage, $input[0]['message']);
+            $this->assertEquals($expectedLevel, $input[0]['level']);
+        }
+
+    }
+}