Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

PublicCalendarTest.php 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017, Georg Ehrke
  4. *
  5. * @author Georg Ehrke <oc.list@georgehrke.com>
  6. * @author Joas Schilling <coding@schilljs.com>
  7. * @author Morris Jobke <hey@morrisjobke.de>
  8. * @author Roeland Jago Douma <roeland@famdouma.nl>
  9. *
  10. * @license GNU AGPL version 3 or any later version
  11. *
  12. * This program is free software: you can redistribute it and/or modify
  13. * it under the terms of the GNU Affero General Public License as
  14. * published by the Free Software Foundation, either version 3 of the
  15. * License, or (at your option) any later version.
  16. *
  17. * This program is distributed in the hope that it will be useful,
  18. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20. * GNU Affero General Public License for more details.
  21. *
  22. * You should have received a copy of the GNU Affero General Public License
  23. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  24. *
  25. */
  26. namespace OCA\DAV\Tests\unit\CalDAV;
  27. use OCA\DAV\CalDAV\CalDavBackend;
  28. use OCA\DAV\CalDAV\PublicCalendar;
  29. use OCP\IConfig;
  30. use Sabre\VObject\Reader;
  31. class PublicCalendarTest extends CalendarTest {
  32. /**
  33. * @dataProvider providesConfidentialClassificationData
  34. * @param int $expectedChildren
  35. * @param bool $isShared
  36. */
  37. public function testPrivateClassification($expectedChildren, $isShared) {
  38. $calObject0 = ['uri' => 'event-0', 'classification' => CalDavBackend::CLASSIFICATION_PUBLIC];
  39. $calObject1 = ['uri' => 'event-1', 'classification' => CalDavBackend::CLASSIFICATION_CONFIDENTIAL];
  40. $calObject2 = ['uri' => 'event-2', 'classification' => CalDavBackend::CLASSIFICATION_PRIVATE];
  41. /** @var \PHPUnit\Framework\MockObject\MockObject | CalDavBackend $backend */
  42. $backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock();
  43. $backend->expects($this->any())->method('getCalendarObjects')->willReturn([
  44. $calObject0, $calObject1, $calObject2
  45. ]);
  46. $backend->expects($this->any())->method('getMultipleCalendarObjects')
  47. ->with(666, ['event-0', 'event-1', 'event-2'])
  48. ->willReturn([
  49. $calObject0, $calObject1, $calObject2
  50. ]);
  51. $backend->expects($this->any())->method('getCalendarObject')
  52. ->willReturn($calObject2)->with(666, 'event-2');
  53. $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
  54. $calendarInfo = [
  55. '{http://owncloud.org/ns}owner-principal' => 'user2',
  56. 'principaluri' => 'user2',
  57. 'id' => 666,
  58. 'uri' => 'cal',
  59. ];
  60. /** @var \PHPUnit\Framework\MockObject\MockObject | IConfig $config */
  61. $config = $this->createMock(IConfig::class);
  62. $c = new PublicCalendar($backend, $calendarInfo, $this->l10n, $config);
  63. $children = $c->getChildren();
  64. $this->assertEquals(2, count($children));
  65. $children = $c->getMultipleChildren(['event-0', 'event-1', 'event-2']);
  66. $this->assertEquals(2, count($children));
  67. $this->assertFalse($c->childExists('event-2'));
  68. }
  69. /**
  70. * @dataProvider providesConfidentialClassificationData
  71. * @param int $expectedChildren
  72. * @param bool $isShared
  73. */
  74. public function testConfidentialClassification($expectedChildren, $isShared) {
  75. $start = '20160609';
  76. $end = '20160610';
  77. $calData = <<<EOD
  78. BEGIN:VCALENDAR
  79. PRODID:-//ownCloud calendar v1.2.2
  80. BEGIN:VEVENT
  81. CREATED:20160602T133732
  82. DTSTAMP:20160602T133732
  83. LAST-MODIFIED:20160602T133732
  84. UID:wej2z68l9h
  85. SUMMARY:Test Event
  86. LOCATION:Somewhere ...
  87. ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CUTYPE=INDIVIDUAL;CN=de
  88. epdiver:MAILTO:thomas.mueller@tmit.eu
  89. ORGANIZER;CN=deepdiver:MAILTO:thomas.mueller@tmit.eu
  90. DESCRIPTION:maybe ....
  91. DTSTART;TZID=Europe/Berlin;VALUE=DATE:$start
  92. DTEND;TZID=Europe/Berlin;VALUE=DATE:$end
  93. RRULE:FREQ=DAILY
  94. BEGIN:VALARM
  95. ACTION:AUDIO
  96. TRIGGER:-PT15M
  97. END:VALARM
  98. END:VEVENT
  99. BEGIN:VTIMEZONE
  100. TZID:Europe/Berlin
  101. BEGIN:DAYLIGHT
  102. DTSTART:19810329T020000
  103. RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
  104. TZNAME:MESZ
  105. TZOFFSETFROM:+0100
  106. TZOFFSETTO:+0200
  107. END:DAYLIGHT
  108. BEGIN:STANDARD
  109. DTSTART:19961027T030000
  110. RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
  111. TZNAME:MEZ
  112. TZOFFSETFROM:+0200
  113. TZOFFSETTO:+0100
  114. END:STANDARD
  115. END:VTIMEZONE
  116. END:VCALENDAR
  117. EOD;
  118. $calObject0 = ['uri' => 'event-0', 'classification' => CalDavBackend::CLASSIFICATION_PUBLIC];
  119. $calObject1 = ['uri' => 'event-1', 'classification' => CalDavBackend::CLASSIFICATION_CONFIDENTIAL, 'calendardata' => $calData];
  120. $calObject2 = ['uri' => 'event-2', 'classification' => CalDavBackend::CLASSIFICATION_PRIVATE];
  121. /** @var \PHPUnit\Framework\MockObject\MockObject | CalDavBackend $backend */
  122. $backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock();
  123. $backend->expects($this->any())->method('getCalendarObjects')->willReturn([
  124. $calObject0, $calObject1, $calObject2
  125. ]);
  126. $backend->expects($this->any())->method('getMultipleCalendarObjects')
  127. ->with(666, ['event-0', 'event-1', 'event-2'])
  128. ->willReturn([
  129. $calObject0, $calObject1, $calObject2
  130. ]);
  131. $backend->expects($this->any())->method('getCalendarObject')
  132. ->willReturn($calObject1)->with(666, 'event-1');
  133. $backend->expects($this->any())->method('applyShareAcl')->willReturnArgument(1);
  134. $calendarInfo = [
  135. '{http://owncloud.org/ns}owner-principal' => 'user1',
  136. 'principaluri' => 'user2',
  137. 'id' => 666,
  138. 'uri' => 'cal',
  139. ];
  140. /** @var \PHPUnit\Framework\MockObject\MockObject | IConfig $config */
  141. $config = $this->createMock(IConfig::class);
  142. $c = new PublicCalendar($backend, $calendarInfo, $this->l10n, $config);
  143. $this->assertEquals(count($c->getChildren()), 2);
  144. // test private event
  145. $privateEvent = $c->getChild('event-1');
  146. $calData = $privateEvent->get();
  147. $event = Reader::read($calData);
  148. $this->assertEquals($start, $event->VEVENT->DTSTART->getValue());
  149. $this->assertEquals($end, $event->VEVENT->DTEND->getValue());
  150. $this->assertEquals('Busy', $event->VEVENT->SUMMARY->getValue());
  151. $this->assertArrayNotHasKey('ATTENDEE', $event->VEVENT);
  152. $this->assertArrayNotHasKey('LOCATION', $event->VEVENT);
  153. $this->assertArrayNotHasKey('DESCRIPTION', $event->VEVENT);
  154. $this->assertArrayNotHasKey('ORGANIZER', $event->VEVENT);
  155. }
  156. }