예제 #1
0
    /**
     * @dataProvider providesSharingData
     */
    public function testCalendarSharing($userCanRead, $userCanWrite, $groupCanRead, $groupCanWrite, $add)
    {
        /** @var IL10N | \PHPUnit_Framework_MockObject_MockObject $l10n */
        $l10n = $this->getMockBuilder('\\OCP\\IL10N')->disableOriginalConstructor()->getMock();
        $l10n->expects($this->any())->method('t')->will($this->returnCallback(function ($text, $parameters = array()) {
            return vsprintf($text, $parameters);
        }));
        $calendarId = $this->createTestCalendar();
        $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
        $this->assertEquals(1, count($books));
        $calendar = new Calendar($this->backend, $books[0], $l10n);
        $this->backend->updateShares($calendar, $add, []);
        $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER1);
        $this->assertEquals(1, count($books));
        $calendar = new Calendar($this->backend, $books[0], $l10n);
        $acl = $calendar->getACL();
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}read', $acl);
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}write', $acl);
        $this->assertAccess($userCanRead, self::UNIT_TEST_USER1, '{DAV:}read', $acl);
        $this->assertAccess($userCanWrite, self::UNIT_TEST_USER1, '{DAV:}write', $acl);
        $this->assertAccess($groupCanRead, self::UNIT_TEST_GROUP, '{DAV:}read', $acl);
        $this->assertAccess($groupCanWrite, self::UNIT_TEST_GROUP, '{DAV:}write', $acl);
        $this->assertEquals(self::UNIT_TEST_USER, $calendar->getOwner());
        // test acls on the child
        $uri = $this->getUniqueID('calobj');
        $calData = <<<'EOD'
BEGIN:VCALENDAR
VERSION:2.0
PRODID:ownCloud Calendar
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20130910T125139Z
UID:47d15e3ec8
LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
SUMMARY:Test Event
DTSTART;VALUE=DATE-TIME:20130912T130000Z
DTEND;VALUE=DATE-TIME:20130912T140000Z
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
EOD;
        $this->backend->createCalendarObject($calendarId, $uri, $calData);
        /** @var IACL $child */
        $child = $calendar->getChild($uri);
        $acl = $child->getACL();
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}read', $acl);
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}write', $acl);
        $this->assertAccess($userCanRead, self::UNIT_TEST_USER1, '{DAV:}read', $acl);
        $this->assertAccess($userCanWrite, self::UNIT_TEST_USER1, '{DAV:}write', $acl);
        $this->assertAccess($groupCanRead, self::UNIT_TEST_GROUP, '{DAV:}read', $acl);
        $this->assertAccess($groupCanWrite, self::UNIT_TEST_GROUP, '{DAV:}write', $acl);
        // delete the address book
        $this->backend->deleteCalendar($books[0]['id']);
        $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
        $this->assertEquals(0, count($books));
    }
예제 #2
0
    /**
     * @dataProvider providesSharingData
     */
    public function testCalendarSharing($userCanRead, $userCanWrite, $groupCanRead, $groupCanWrite, $add)
    {
        $calendarId = $this->createTestCalendar();
        $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
        $this->assertEquals(1, count($books));
        $calendar = new Calendar($this->backend, $books[0]);
        $this->backend->updateShares($calendar, $add, []);
        $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER1);
        $this->assertEquals(1, count($books));
        $calendar = new Calendar($this->backend, $books[0]);
        $acl = $calendar->getACL();
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}read', $acl);
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}write', $acl);
        $this->assertAccess($userCanRead, self::UNIT_TEST_USER1, '{DAV:}read', $acl);
        $this->assertAccess($userCanWrite, self::UNIT_TEST_USER1, '{DAV:}write', $acl);
        $this->assertAccess($groupCanRead, self::UNIT_TEST_GROUP, '{DAV:}read', $acl);
        $this->assertAccess($groupCanWrite, self::UNIT_TEST_GROUP, '{DAV:}write', $acl);
        $this->assertEquals(self::UNIT_TEST_USER, $calendar->getOwner());
        // test acls on the child
        $uri = $this->getUniqueID('calobj');
        $calData = <<<'EOD'
BEGIN:VCALENDAR
VERSION:2.0
PRODID:ownCloud Calendar
BEGIN:VEVENT
CREATED;VALUE=DATE-TIME:20130910T125139Z
UID:47d15e3ec8
LAST-MODIFIED;VALUE=DATE-TIME:20130910T125139Z
DTSTAMP;VALUE=DATE-TIME:20130910T125139Z
SUMMARY:Test Event
DTSTART;VALUE=DATE-TIME:20130912T130000Z
DTEND;VALUE=DATE-TIME:20130912T140000Z
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
EOD;
        $this->backend->createCalendarObject($calendarId, $uri, $calData);
        /** @var IACL $child */
        $child = $calendar->getChild($uri);
        $acl = $child->getACL();
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}read', $acl);
        $this->assertAcl(self::UNIT_TEST_USER, '{DAV:}write', $acl);
        $this->assertAccess($userCanRead, self::UNIT_TEST_USER1, '{DAV:}read', $acl);
        $this->assertAccess($userCanWrite, self::UNIT_TEST_USER1, '{DAV:}write', $acl);
        $this->assertAccess($groupCanRead, self::UNIT_TEST_GROUP, '{DAV:}read', $acl);
        $this->assertAccess($groupCanWrite, self::UNIT_TEST_GROUP, '{DAV:}write', $acl);
        // delete the address book
        $this->backend->deleteCalendar($books[0]['id']);
        $books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
        $this->assertEquals(0, count($books));
    }
예제 #3
0
 /**
  * @dataProvider providesReadOnlyInfo
  */
 public function testAcl($expectsWrite, $readOnlyValue, $hasOwnerSet, $uri = 'default')
 {
     /** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */
     $backend = $this->getMockBuilder('OCA\\DAV\\CalDAV\\CalDavBackend')->disableOriginalConstructor()->getMock();
     $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
     $calendarInfo = ['principaluri' => 'user2', 'id' => 666, 'uri' => $uri];
     if (!is_null($readOnlyValue)) {
         $calendarInfo['{http://owncloud.org/ns}read-only'] = $readOnlyValue;
     }
     if ($hasOwnerSet) {
         $calendarInfo['{http://owncloud.org/ns}owner-principal'] = 'user1';
     }
     $c = new Calendar($backend, $calendarInfo, $this->l10n);
     $acl = $c->getACL();
     $childAcl = $c->getChildACL();
     $expectedAcl = [['privilege' => '{DAV:}read', 'principal' => $hasOwnerSet ? 'user1' : 'user2', 'protected' => true], ['privilege' => '{DAV:}write', 'principal' => $hasOwnerSet ? 'user1' : 'user2', 'protected' => true]];
     if ($uri === BirthdayService::BIRTHDAY_CALENDAR_URI) {
         $expectedAcl = [['privilege' => '{DAV:}read', 'principal' => $hasOwnerSet ? 'user1' : 'user2', 'protected' => true]];
     }
     if ($hasOwnerSet) {
         $expectedAcl[] = ['privilege' => '{DAV:}read', 'principal' => 'user2', 'protected' => true];
         if ($expectsWrite) {
             $expectedAcl[] = ['privilege' => '{DAV:}write', 'principal' => 'user2', 'protected' => true];
         }
     }
     $this->assertEquals($expectedAcl, $acl);
     $this->assertEquals($expectedAcl, $childAcl);
 }