Skip to content

Commit

Permalink
Bumps version and release notes.
Browse files Browse the repository at this point in the history
  • Loading branch information
andrueastman committed Sep 6, 2023
1 parent bf3333a commit 9ff3386
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 42 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project does adheres to [Semantic Versioning](https://semver.org/spec/v

## [Unreleased]


## [5.26.0] - 2023-09-06

- Fixes serialization and deserialization of bitwise enums.
- Latest metadata updates from 6th September 2023.

## [5.25.0] - 2023-08-30

- Add `WithUrl` request builders to allow for easier making of requests with arbitrary Urls(https://github.com/microsoft/kiota/pull/3212)
Expand Down
2 changes: 1 addition & 1 deletion src/Microsoft.Graph/Microsoft.Graph.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<DelaySign>false</DelaySign>
<AssemblyOriginatorKeyFile>35MSSharedLib1024.snk</AssemblyOriginatorKeyFile>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<VersionPrefix>5.25.0</VersionPrefix>
<VersionPrefix>5.26.0</VersionPrefix>
<!-- VersionPrefix minor version should not be set when the change comes from the generator. It will be updated automatically. -->
<!-- VersionPrefix minor version must be manually set when making manual changes to code. -->
<!-- VersionPrefix major and patch versions must be manually set. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
using Microsoft.Graph.Models;
using Microsoft.Kiota.Abstractions;

public class PlannerTests : GraphTestBase
{
private readonly Group testGroup = new ();
private Group testGroup = new ();

private async void TestCleanUp()
{
Expand Down Expand Up @@ -115,7 +116,7 @@ public async Task PlannerGetPlannerTasks()
Assert.Fail($"Something happened, check out a trace. Error: {e.Message}");
}
}
/*

// Successful 4/27/2017 - Creates a task without a bucket.
[Fact(Skip = "No CI set up for functional tests")]
//https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/planner_post_tasks
Expand All @@ -131,18 +132,21 @@ public async Task PlannerTaskCreate()
taskToCreate.PlanId = plannerPlan.Id;
taskToCreate.Title = "New task title";
taskToCreate.Assignments = new PlannerAssignments();
taskToCreate.Assignments.AddAssignee("me");
taskToCreate.Assignments.AdditionalData["me"] = new PlannerAssignment
{
OrderHint = " !"
};
taskToCreate.AppliedCategories = new PlannerAppliedCategories();
taskToCreate.AppliedCategories.Category3 = true;
taskToCreate.AppliedCategories.AdditionalData["category3"] = true;
taskToCreate.DueDateTime = DateTimeOffset.UtcNow.AddDays(3);

PlannerTask createdTask = await graphClient.Planner.Tasks.PostAsync(taskToCreate);

Assert.NotNull(createdTask);
Assert.NotNull(createdTask.Assignments);
Assert.Equal(taskToCreate.Title, createdTask.Title);
Assert.Equal(1, createdTask.Assignments.Count);
Assert.Equal(createdTask.Assignments.Assignees.First(), createdTask.Assignments.First().Value.AssignedBy.User.Id);
Assert.Equal(true, createdTask.AppliedCategories.Category3);
Assert.Single(createdTask.Assignments.AdditionalData);
Assert.Equal(true, createdTask.AppliedCategories.AdditionalData["category3"]);
Assert.Equal(taskToCreate.DueDateTime, createdTask.DueDateTime);
}

Expand All @@ -162,25 +166,40 @@ public async Task PlannerTaskDetailsUpdate()

PlannerTaskDetails taskDetailsToUpdate = new PlannerTaskDetails();
taskDetailsToUpdate.Checklist = new PlannerChecklistItems();
string checklistItemId1 = taskDetailsToUpdate.Checklist.AddChecklistItem("Do something");
string checklistItemId2 = taskDetailsToUpdate.Checklist.AddChecklistItem("Do something else");
string checklistItemId1 = Guid.NewGuid().ToString();
taskDetailsToUpdate.Checklist.AdditionalData[checklistItemId1] = new PlannerCheckListItem()
{
Title = "Do Something"
};
string checklistItemId2 = Guid.NewGuid().ToString();
taskDetailsToUpdate.Checklist.AdditionalData[checklistItemId1] = new PlannerCheckListItem()
{
Title = "Do Something else"
};
taskDetailsToUpdate.References = new PlannerExternalReferences();
taskDetailsToUpdate.References.AddReference("http://developer.microsoft.com", "Developer resources");
taskDetailsToUpdate.References.AdditionalData["http://developer.microsoft.com"]= new PlannerExternalReference()
{
Alias = "Developer resources"
};

taskDetailsToUpdate.PreviewType = PlannerPreviewType.Checklist;
taskDetailsToUpdate.Description = "Description of the task";

string etag = taskDetails.GetEtag();
PlannerTaskDetails updatedTaskDetails = await graphClient.Planner.Tasks[createdTask.Id].Details.Header("If-Match", etag).Header("Prefer", "return=representation").UpdateAsync(taskDetailsToUpdate);
string etag = taskDetails.AdditionalData["@odata.etag"].ToString();
PlannerTaskDetails updatedTaskDetails = await graphClient.Planner.Tasks[createdTask.Id].Details
.PatchAsync(taskDetailsToUpdate, requestConfiguration =>
{
requestConfiguration.Headers.Add("If-Match", etag);
requestConfiguration.Headers.Add("Prefer", "return=representation");
});

Assert.Equal("Description of the task", updatedTaskDetails.Description);
Assert.Equal(PlannerPreviewType.Checklist, updatedTaskDetails.PreviewType);
Assert.Equal(2, updatedTaskDetails.Checklist.Count());
Assert.Equal("Do something", updatedTaskDetails.Checklist[checklistItemId1]?.Title);
Assert.Equal("Do something else", updatedTaskDetails.Checklist[checklistItemId2]?.Title);
Assert.Equal(1, updatedTaskDetails.References.Count());
Assert.Equal("Developer resources", updatedTaskDetails.References["http://developer.microsoft.com"]?.Alias);
Assert.Equal(2, updatedTaskDetails.Checklist.AdditionalData.Count());
Assert.Equal("Do something", ((PlannerCheckListItem)updatedTaskDetails.Checklist.AdditionalData[checklistItemId1])?.Title);
Assert.Equal("Do something else", ((PlannerCheckListItem)updatedTaskDetails.Checklist.AdditionalData[checklistItemId2])?.Title);
Assert.Equal(1, updatedTaskDetails.References.AdditionalData.Count());
Assert.Equal("Developer resources", ((PlannerExternalReference)updatedTaskDetails.References.AdditionalData["http://developer.microsoft.com"])?.Alias);
}

[Fact(Skip = "No CI set up for functional tests")]
Expand All @@ -193,21 +212,25 @@ public async Task PlannerPlanDetailsUpdate()

PlannerPlanDetails planDetails = await graphClient.Planner.Plans[plannerPlan.Id].Details.GetAsync();

string etag = planDetails.GetEtag();
string etag = planDetails.AdditionalData["@odata.etag"].ToString();
PlannerPlanDetails planDetailsToUpdate = new PlannerPlanDetails();
planDetailsToUpdate.CategoryDescriptions = new PlannerCategoryDescriptions();
planDetailsToUpdate.CategoryDescriptions.Category1 = "First category";
planDetailsToUpdate.CategoryDescriptions.Category4 = "Category 4";
planDetailsToUpdate.SharedWith = new PlannerUserIds();
planDetailsToUpdate.SharedWith.Add("me");
planDetailsToUpdate.SharedWith.AdditionalData["me"]=true;

PlannerPlanDetails updatedPlanDetails = await graphClient.Planner.Plans[plannerPlan.Id].Details.Header("If-Match", etag).Header("Prefer", "return=representation").UpdateAsync(planDetailsToUpdate);
PlannerPlanDetails updatedPlanDetails = await graphClient.Planner.Plans[plannerPlan.Id].Details.PatchAsync(planDetailsToUpdate, requestConfiguration =>
{
requestConfiguration.Headers.Add("If-Match", etag);
requestConfiguration.Headers.Add("Prefer", "return=representation");
});

Assert.Equal("First category", updatedPlanDetails.CategoryDescriptions.Category1);
Assert.Equal("Category 4", updatedPlanDetails.CategoryDescriptions.Category4);

// plan creator is the current user as well, we can get the id from there.
Assert.True(updatedPlanDetails.SharedWith.Contains(plannerPlan.CreatedBy.User.Id));
Assert.True(updatedPlanDetails.SharedWith.AdditionalData.ContainsKey(plannerPlan.CreatedBy.User.Id));
}

[Fact(Skip = "No CI set up for functional tests")]
Expand All @@ -221,23 +244,32 @@ public async Task PlannerTaskAssignedToTaskBoardFormatUpdate()
taskToCreate.PlanId = plannerPlan.Id;
taskToCreate.Title = "Top";
taskToCreate.Assignments = new PlannerAssignments();
taskToCreate.Assignments.AddAssignee("me");
taskToCreate.Assignments.AdditionalData["me"] = new PlannerAssignment()
{
OrderHint = " !"
};

PlannerTask topTask = await graphClient.Planner.Tasks.PostAsync(taskToCreate);

taskToCreate = new PlannerTask();
taskToCreate.PlanId = plannerPlan.Id;
taskToCreate.Title = "Bottom";
taskToCreate.Assignments = new PlannerAssignments();
taskToCreate.Assignments.AddAssignee("me");
taskToCreate.Assignments.AdditionalData["me"] = new PlannerAssignment()
{
OrderHint = " !"
};

PlannerTask bottomTask = await graphClient.Planner.Tasks.PostAsync(taskToCreate);

taskToCreate = new PlannerTask();
taskToCreate.PlanId = plannerPlan.Id;
taskToCreate.Title = "Middle";
taskToCreate.Assignments = new PlannerAssignments();
taskToCreate.Assignments.AddAssignee("me");
taskToCreate.Assignments.AdditionalData["me"] = new PlannerAssignment()
{
OrderHint = " !"
};

PlannerTask middleTask = await graphClient.Planner.Tasks.PostAsync(taskToCreate);

Expand All @@ -247,43 +279,49 @@ public async Task PlannerTaskAssignedToTaskBoardFormatUpdate()
var myUserId = plannerPlan.CreatedBy.User.Id;

// get assigned to task board formats of the tasks in plan.
var taskIdsWithTaskBoardFormats = await graphClient.Planner.Plans[plannerPlan.Id].Tasks.Request().Select("id").Expand("assignedToTaskBoardFormat").GetAsync();
IDictionary<string, PlannerAssignedToTaskBoardTaskFormat> formatsByTasks = taskIdsWithTaskBoardFormats.ToDictionary(item => item.Id, item => item.AssignedToTaskBoardFormat);
var taskIdsWithTaskBoardFormats = await graphClient.Planner.Plans[plannerPlan.Id].Tasks.GetAsync( requestConfiguration =>
{
requestConfiguration.QueryParameters.Select = new[] { "id" };
requestConfiguration.QueryParameters.Expand = new[] { "assignedToTaskBoardFormat" };
});
IDictionary<string, PlannerAssignedToTaskBoardTaskFormat> formatsByTasks = taskIdsWithTaskBoardFormats.Value.ToDictionary(item => item.Id, item => item.AssignedToTaskBoardFormat);

var bottomTaskFormatUpdate = new PlannerAssignedToTaskBoardTaskFormat();
bottomTaskFormatUpdate.OrderHintsByAssignee = new PlannerOrderHintsByAssignee();
bottomTaskFormatUpdate.OrderHintsByAssignee[myUserId] = $"{formatsByTasks[topTask.Id].GetOrderHintForAssignee(myUserId)} !"; // after top task.
bottomTaskFormatUpdate.OrderHintsByAssignee.AdditionalData[myUserId] = $"{formatsByTasks[topTask.Id].OrderHintsByAssignee.AdditionalData[myUserId]} !"; // after top task.

var middleTaskFormatUpdate = new PlannerAssignedToTaskBoardTaskFormat();
middleTaskFormatUpdate.OrderHintsByAssignee = new PlannerOrderHintsByAssignee();
middleTaskFormatUpdate.OrderHintsByAssignee[myUserId] = $"{formatsByTasks[topTask.Id].GetOrderHintForAssignee(myUserId)} {bottomTaskFormatUpdate.GetOrderHintForAssignee(myUserId)}!"; // after top task, before bottom task's client side new value.
middleTaskFormatUpdate.OrderHintsByAssignee.AdditionalData[myUserId] = $"{formatsByTasks[topTask.Id].OrderHintsByAssignee.AdditionalData[myUserId]} {bottomTaskFormatUpdate.OrderHintsByAssignee.AdditionalData[myUserId]}!"; // after top task, before bottom task's client side new value.

string etag = formatsByTasks[bottomTask.Id].GetEtag();
string etag = formatsByTasks[bottomTask.Id].AdditionalData["@odata.etag"].ToString();
formatsByTasks[bottomTask.Id] = await graphClient
.Planner
.Tasks[bottomTask.Id]
.AssignedToTaskBoardFormat
.Request()
.Header("If-Match", etag)
.Header("Prefer", "return=representation")
.UpdateAsync(bottomTaskFormatUpdate);
.PatchAsync(bottomTaskFormatUpdate, requestConfiguration =>
{
requestConfiguration.Headers.Add("If-Match", etag);
requestConfiguration.Headers.Add("Prefer", "return=representation");
});

etag = formatsByTasks[middleTask.Id].GetEtag();
etag = formatsByTasks[middleTask.Id].AdditionalData["@odata.etag"].ToString();
formatsByTasks[middleTask.Id] = await graphClient
.Planner
.Tasks[middleTask.Id]
.AssignedToTaskBoardFormat
.Request()
.Header("If-Match", etag)
.Header("Prefer", "return=representation")
.UpdateAsync(middleTaskFormatUpdate);
.PatchAsync(middleTaskFormatUpdate, requestConfiguration =>
{
requestConfiguration.Headers.Add("If-Match", etag);
requestConfiguration.Headers.Add("Prefer", "return=representation");
});

// verify final order
var orderedTaskFormats = formatsByTasks.OrderBy(kvp => kvp.Value.GetOrderHintForAssignee(myUserId), StringComparer.Ordinal).ToList();
var orderedTaskFormats = formatsByTasks.OrderBy(kvp => kvp.Value.OrderHintsByAssignee.AdditionalData[myUserId].ToString(), StringComparer.Ordinal).ToList();
Assert.Equal(topTask.Id, orderedTaskFormats[0].Key);
Assert.Equal(middleTask.Id, orderedTaskFormats[1].Key);
Assert.Equal(bottomTask.Id, orderedTaskFormats[2].Key);
}
*/

}
}

0 comments on commit 9ff3386

Please sign in to comment.