From d2aadac4a5a3397969c3af921a868f60798db618 Mon Sep 17 00:00:00 2001 From: frets1700 Date: Thu, 14 Mar 2024 14:06:24 -0400 Subject: [PATCH] add ability to patch extensions to an event --- src/Calendar.php | 32 +++++++++++++++++++++++++++++++ src/RequestConfigurationTrait.php | 3 ++- tests/CalendarTest.php | 24 +++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/Calendar.php b/src/Calendar.php index 84fe0a7..c08cfa3 100644 --- a/src/Calendar.php +++ b/src/Calendar.php @@ -18,11 +18,13 @@ use Microsoft\Graph\Generated\Models\EventType; use Microsoft\Graph\Generated\Models\ODataErrors\MainError; use Microsoft\Graph\Generated\Models\ODataErrors\ODataError; +use Microsoft\Graph\Generated\Models\OpenTypeExtension; use Microsoft\Graph\Generated\Users\Item\CalendarView\Delta\DeltaGetResponse; use Microsoft\Graph\Generated\Users\Item\Events\EventsRequestBuilderPostRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderDeleteRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderPatchRequestConfiguration; +use Microsoft\Graph\Generated\Users\Item\Events\Item\Extensions\ExtensionsRequestBuilderPostRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\Events\Item\Instances\InstancesRequestBuilderGetQueryParameters; use Microsoft\Kiota\Abstractions\RequestAdapter; use Microsoft\Kiota\Serialization\Json\JsonParseNode; @@ -336,6 +338,36 @@ public function delete(string $id, array $args = []): void ->wait(); } + /** + * @param OpenTypeExtension $extension + * @param string $id + * @param array $args + * @return bool + * @throws \Exception + */ + public function patchExtensionForEvent(string $id, OpenTypeExtension $extension, array $args = []): bool + { + $headers = $args['headers'] ?? []; + $options = $args['options'] ?? []; + $requestConfiguration = new ExtensionsRequestBuilderPostRequestConfiguration($headers, $options); + $requestConfiguration = $this->generateRequestConfiguration( + $requestConfiguration, + $headers, + $options + ); + + $extension = $this->graphService + ->client($args) + ->me() + ->events() + ->byEventId($id) + ->extensions() + ->post($extension, $requestConfiguration) + ->wait(); + + return $extension instanceof OpenTypeExtension; + } + /** * @param array $correlationIds */ diff --git a/src/RequestConfigurationTrait.php b/src/RequestConfigurationTrait.php index a73057e..9b92360 100644 --- a/src/RequestConfigurationTrait.php +++ b/src/RequestConfigurationTrait.php @@ -12,6 +12,7 @@ use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderGetRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderPatchRequestConfiguration; +use Microsoft\Graph\Generated\Users\Item\Events\Item\Extensions\ExtensionsRequestBuilderPostRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\Events\Item\Instances\InstancesRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\Events\Item\Instances\InstancesRequestBuilderGetRequestConfiguration; use Symplicity\Outlook\Interfaces\Utilities\CalendarView\CalendarViewParamsInterface; @@ -130,7 +131,7 @@ protected function getCalendarViewRequestConfiguration(CalendarViewParamsInterfa * @param array $headers * @param RequestOptions[] | null $options */ - private function generateRequestConfiguration(InstancesRequestBuilderGetRequestConfiguration | EventsRequestBuilderPostRequestConfiguration | EventItemRequestBuilderPatchRequestConfiguration | BatchRequestBuilderPostRequestConfiguration | EventItemRequestBuilderDeleteRequestConfiguration $configuration, array $headers = [], array $options = []): InstancesRequestBuilderGetRequestConfiguration | EventsRequestBuilderPostRequestConfiguration | EventItemRequestBuilderPatchRequestConfiguration | BatchRequestBuilderPostRequestConfiguration | EventItemRequestBuilderDeleteRequestConfiguration + private function generateRequestConfiguration(InstancesRequestBuilderGetRequestConfiguration | EventsRequestBuilderPostRequestConfiguration | EventItemRequestBuilderPatchRequestConfiguration | BatchRequestBuilderPostRequestConfiguration | EventItemRequestBuilderDeleteRequestConfiguration | ExtensionsRequestBuilderPostRequestConfiguration $configuration, array $headers = [], array $options = []): InstancesRequestBuilderGetRequestConfiguration | EventsRequestBuilderPostRequestConfiguration | EventItemRequestBuilderPatchRequestConfiguration | BatchRequestBuilderPostRequestConfiguration | EventItemRequestBuilderDeleteRequestConfiguration | ExtensionsRequestBuilderPostRequestConfiguration { $configuration->headers = array_merge( $headers, diff --git a/tests/CalendarTest.php b/tests/CalendarTest.php index 8472916..6f35fd0 100644 --- a/tests/CalendarTest.php +++ b/tests/CalendarTest.php @@ -14,6 +14,7 @@ use GuzzleHttp\Psr7\Utils; use Microsoft\Graph\Generated\Models\DateTimeTimeZone; use Microsoft\Graph\Generated\Models\Event as MsEvent; +use Microsoft\Graph\Generated\Models\OpenTypeExtension; use Microsoft\Graph\Generated\Users\Item\Events\Item\EventItemRequestBuilderGetQueryParameters; use Monolog\Handler\NullHandler; use Monolog\Logger; @@ -243,6 +244,29 @@ public function testPushEvents() $this->stub->push(args: ['client' => $client]); } + public function testPatchExtension() + { + $jsonBody = '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users(\'foo\')/events(\'abc==\')/extensions/$entity","@odata.type":"#microsoft.graph.openTypeExtension","id":"Microsoft.OutlookServices.OpenTypeExtension.foo.bar","extensionName":"foo.bar","internalId":"123"}'; + + $stream = Utils::streamFor($jsonBody); + + $mock = new MockHandler([ + new Response(201, ['Content-Type' => 'application/json'], $stream), + ]); + + $container = []; + $client = self::getClientWithTransactionHandler($container, $mock); + + $extension = new OpenTypeExtension(); + $extension->setExtensionName('foo.bar'); + $extension->setAdditionalData([ + 'id' => 'foo' + ]); + + $actual = $this->stub->patchExtensionForEvent('abc==', $extension, ['client' => $client]); + $this->assertTrue($actual); + } + protected function getEvents(): array { return [