getUserToken([]); $response = $this->createClientWithCredentials($token)->request('GET', '/api/c_calendar_events'); $this->assertResponseIsSuccessful(); // Asserts that the returned content type is JSON-LD (the default) $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); // Asserts that the returned JSON is a superset of this one $this->assertJsonContains([ '@context' => '/api/contexts/CCalendarEvent', '@id' => '/api/c_calendar_events', '@type' => 'hydra:Collection', 'hydra:totalItems' => 0, ]); $this->assertCount(0, $response->toArray()['hydra:member']); $this->assertMatchesResourceCollectionJsonSchema(CCalendarEvent::class); } public function testCreatePersonalEvent(): void { $user = $this->createUser('test'); $token = $this->getUserToken( [ 'username' => 'test', 'password' => 'test', ] ); $resourceNodeId = $user->getResourceNode()->getId(); // Current server local time (check your php.ini). $start = new Datetime('2040-06-30 11:00'); $end = new Datetime('2040-06-30 15:00'); // 1. Add event. $this->createClientWithCredentials($token)->request( 'POST', '/api/c_calendar_events', [ 'json' => [ 'allDay' => true, 'collective' => false, 'title' => 'hello', 'content' => '

test event

', 'startDate' => $start->format('Y-m-d H:i:s'), 'endDate' => $end->format('Y-m-d H:i:s'), 'parentResourceNodeId' => $resourceNodeId, ], ] ); $this->assertResponseIsSuccessful(); $this->assertResponseStatusCodeSame(201); $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); $this->assertJsonContains([ '@context' => '/api/contexts/CCalendarEvent', '@type' => 'CCalendarEvent', 'title' => 'hello', 'startDate' => $this->convertToUTCAndFormat($start), 'endDate' => $this->convertToUTCAndFormat($end), 'content' => '

test event

', 'parentResourceNode' => $resourceNodeId, ]); // 2. Check that event exists. $response = $this->createClientWithCredentials($token)->request('GET', '/api/c_calendar_events'); $this->assertResponseIsSuccessful(); $this->assertJsonContains([ '@context' => '/api/contexts/CCalendarEvent', '@id' => '/api/c_calendar_events', '@type' => 'hydra:Collection', 'hydra:totalItems' => 1, ]); $this->assertCount(1, $response->toArray()['hydra:member']); // 3. Get events filter by date, search for a very old date. Result: no events. $response = $this->createClientWithCredentials($token)->request('GET', '/api/c_calendar_events', [ 'query' => [ 'startDate[after]' => '2009-02-14T18:00:00+02:00', 'endDate[before]' => '2009-02-14T19:00:00+02:00', ], ]); $this->assertCount(0, $response->toArray()['hydra:member']); // 4. Get events for valid date. $response = $this->createClientWithCredentials($token)->request('GET', '/api/c_calendar_events', [ 'query' => [ 'startDate[after]' => '2040-06-01T09:00:00+02:00', 'endDate[before]' => '2040-06-30T23:00:00+02:00', ], ]); $this->assertCount(1, $response->toArray()['hydra:member']); } public function testCreatePersonalEventAsAnotherUser(): void { // 1. Create user 'test'. $user = $this->createUser('test'); $resourceNodeId = $user->getResourceNode()->getId(); // Current server local time (check your php.ini). $start = new Datetime('2040-06-30 11:00'); $end = new Datetime('2040-06-30 15:00'); // 2. Create user "another" $this->createUser('another'); $anotherToken = $this->getUserToken( [ 'username' => 'another', 'password' => 'another', ], true ); // 3. Add event to user 'test' but logged in as another user. $this->createClientWithCredentials($anotherToken)->request( 'POST', '/api/c_calendar_events', [ 'json' => [ 'allDay' => true, 'collective' => false, 'title' => 'hello', 'content' => '

test event

', 'startDate' => $start->format('Y-m-d H:i:s'), 'endDate' => $end->format('Y-m-d H:i:s'), 'parentResourceNodeId' => $resourceNodeId, ], ] ); $this->assertResponseStatusCodeSame(500); // Another user should have 0 events. $this->createClientWithCredentials($anotherToken)->request('GET', '/api/c_calendar_events'); $this->assertResponseIsSuccessful(); $this->assertJsonContains([ '@context' => '/api/contexts/CCalendarEvent', '@id' => '/api/c_calendar_events', '@type' => 'hydra:Collection', 'hydra:totalItems' => 0, ]); } public function testAccessPersonalEvent(): void { // 1. Create user 'test'. $user = $this->createUser('test'); $token = $this->getUserToken( [ 'username' => 'test', 'password' => 'test', ] ); $resourceNodeId = $user->getResourceNode()->getId(); // Current server local time (check your php.ini). $start = new Datetime('2040-06-30 11:00'); $end = new Datetime('2040-06-30 15:00'); // 2. Add event to user test $response = $this->createClientWithCredentials($token)->request( 'POST', '/api/c_calendar_events', [ 'json' => [ 'allDay' => true, 'collective' => false, 'title' => 'hello', 'content' => '

test event

', 'startDate' => $start->format('Y-m-d H:i:s'), 'endDate' => $end->format('Y-m-d H:i:s'), 'parentResourceNodeId' => $resourceNodeId, ], ] ); $this->assertResponseStatusCodeSame(201); $eventIri = $response->toArray()['@id']; $eventId = $response->toArray()['iid']; $this->assertNotEmpty($eventIri); // 3. Create user "another" $another = $this->createUser('another'); $anotherToken = $this->getUserToken( [ 'username' => 'another', 'password' => 'another', ], true ); // 4. View as another user. $this->createClientWithCredentials($anotherToken)->request('GET', $eventIri); $this->assertResponseStatusCodeSame(403); // 5. Edit $this->createClientWithCredentials($anotherToken)->request('PUT', $eventIri, ['json' => ['title' => 'hehe']]); $this->assertResponseStatusCodeSame(403); // 6. Delete $this->createClientWithCredentials($anotherToken)->request('DELETE', $eventIri); $this->assertResponseStatusCodeSame(403); // Now change to collective. $calendarRepo = self::getContainer()->get(CCalendarEventRepository::class); /** @var CCalendarEvent $event */ $event = $calendarRepo->find($eventId); $event->setCollective(true); $calendarRepo->update($event); // view $this->createClientWithCredentials($anotherToken)->request('GET', $eventIri); $this->assertResponseStatusCodeSame(403); // edit $this->createClientWithCredentials($anotherToken)->request('PUT', $eventIri, ['json' => ['title' => 'hehe']]); $this->assertResponseStatusCodeSame(403); // Now also add "another" as shared. @todo /*$event->addUserLink($another); $calendarRepo->update($event); $this->createClientWithCredentials($anotherToken)->request('GET', $eventIri); $this->assertResponseStatusCodeSame(403);*/ } public function testCreateCourseEvent(): void { $course = $this->createCourse('Test'); $resourceLinkList = [[ 'cid' => $course->getId(), 'visibility' => ResourceLink::VISIBILITY_PUBLISHED, ]]; $user = $this->createUser('test'); $token = $this->getUserToken( [ 'username' => 'test', 'password' => 'test', ] ); $resourceNodeId = $course->getResourceNode()->getId(); // Current server local time (check your php.ini). $start = new Datetime('2040-06-30 11:00'); $end = new Datetime('2040-06-30 15:00'); $this->createClientWithCredentials($token)->request( 'POST', '/api/c_calendar_events', [ 'json' => [ 'allDay' => true, 'collective' => false, 'title' => 'hello', 'content' => '

test event

', 'startDate' => $start->format('Y-m-d H:i:s'), 'endDate' => $end->format('Y-m-d H:i:s'), 'parentResourceNodeId' => $resourceNodeId, 'resourceLinkListFromEntity' => $resourceLinkList, ], ] ); $this->assertResponseIsSuccessful(); $this->assertResponseStatusCodeSame(201); $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); $this->assertJsonContains([ '@context' => '/api/contexts/CCalendarEvent', '@type' => 'CCalendarEvent', 'title' => 'hello', 'startDate' => $this->convertToUTCAndFormat($start), 'endDate' => $this->convertToUTCAndFormat($end), 'content' => '

test event

', 'parentResourceNode' => $resourceNodeId, ]); // Get ALL events. $this->createClientWithCredentials($token)->request('GET', '/api/c_calendar_events'); $this->assertResponseIsSuccessful(); $this->assertJsonContains([ '@context' => '/api/contexts/CCalendarEvent', '@id' => '/api/c_calendar_events', '@type' => 'hydra:Collection', 'hydra:totalItems' => 1, ]); } }