Skip to content

Commit

Permalink
Merge pull request #1649 from microsoftgraph/dev
Browse files Browse the repository at this point in the history
Merges dev to master
  • Loading branch information
andrueastman committed Jun 29, 2023
2 parents c19ac50 + bcc813f commit b3b40dd
Show file tree
Hide file tree
Showing 33 changed files with 374 additions and 62 deletions.
2 changes: 1 addition & 1 deletion ChangesService.Test/ChangesService.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5" />
<PackageReference Include="coverlet.collector" Version="6.0.0" />
Expand Down
2 changes: 1 addition & 1 deletion CodeSnippetsPipeline.Test/CodeSnippetsPipeline.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
<PackageReference Include="NUnit.Analyzers" Version="3.6.1">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.21.0" />
<PackageReference Include="Microsoft.OData.Core" Version="7.16.0" />
<PackageReference Include="Microsoft.OData.Core" Version="7.17.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>

Expand Down
63 changes: 63 additions & 0 deletions CodeSnippetsReflection.OpenAPI.Test/CSharpGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,69 @@ public async Task CorrectlyHandlesEnumInUrl()
Assert.Contains("new FileAttachment", result);// Individual items are derived types
Assert.Contains("ContentBytes = Convert.FromBase64String(\"SGVsbG8gV29ybGQh\"),", result);
}
[Fact]
public async Task GeneratesPropertiesWithSpecialCharacters() {
var sampleJson = @"{
""@odata.type"": ""#microsoft.graph.managedIOSLobApp"",
""displayName"": ""Display Name value"",
""description"": ""Description value"",
""publisher"": ""Publisher value"",
""largeIcon"": {
""@odata.type"": ""microsoft.graph.mimeContent"",
""type"": ""Type value"",
""value"": ""dmFsdWU=""
},
""isFeatured"": true,
""privacyInformationUrl"": ""https://example.com/privacyInformationUrl/"",
""informationUrl"": ""https://example.com/informationUrl/"",
""owner"": ""Owner value"",
""developer"": ""Developer value"",
""notes"": ""Notes value"",
""uploadState"": 11,
""publishingState"": ""processing"",
""isAssigned"": true,
""roleScopeTagIds"": [
""Role Scope Tag Ids value""
],
""dependentAppCount"": 1,
""supersedingAppCount"": 3,
""supersededAppCount"": 2,
""appAvailability"": ""lineOfBusiness"",
""version"": ""Version value"",
""committedContentVersion"": ""Committed Content Version value"",
""fileName"": ""File Name value"",
""size"": 4,
""bundleId"": ""Bundle Id value"",
""applicableDeviceType"": {
""@odata.type"": ""microsoft.graph.iosDeviceType"",
""iPad"": true,
""iPhoneAndIPod"": true
},
""minimumSupportedOperatingSystem"": {
""@odata.type"": ""microsoft.graph.iosMinimumOperatingSystem"",
""v8_0"": true,
""v9_0"": true,
""v10_0"": true,
""v11_0"": true,
""v12_0"": true,
""v13_0"": true,
""v14_0"": true,
""v15_0"": true,
""v16_0"": true
},
""expirationDateTime"": ""2016-12-31T23:57:57.2481234-08:00"",
""versionNumber"": ""Version Number value"",
""buildNumber"": ""Build Number value"",
""identityVersion"": ""Identity Version value""
}";
using var requestPayload = new HttpRequestMessage(HttpMethod.Patch, $"{ServiceRootBetaUrl}/deviceAppManagement/mobileApps/{{mobileAppId}}"){
Content = new StringContent(sampleJson, Encoding.UTF8, "application/json")
};
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());
var result = _generator.GenerateCodeSnippet(snippetModel);
Assert.Contains("MinimumSupportedOperatingSystem = new IosMinimumOperatingSystem", result);
Assert.Contains("V80 = true,", result);//Assert that the property was pascal cased
}

[Fact]
public async Task CorrectlyHandlesTypeFromInUrl()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
<PackageReference Include="moq" Version="4.18.4" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
Expand Down
2 changes: 1 addition & 1 deletion CodeSnippetsReflection.OpenAPI.Test/GoGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public async Task GeneratesMeImportFromUserPackage()
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, $"{ServiceRootUrl}/me/messages");
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());
var result = _generator.GenerateCodeSnippet(snippetModel);
Assert.Contains("graphClient, err := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)", result);
Assert.Contains("graphClient := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)", result);
}
[Fact]
public async Task GeneratesMultipleImportStatements()
Expand Down
120 changes: 119 additions & 1 deletion CodeSnippetsReflection.OpenAPI.Test/GraphCliGeneratorTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using CodeSnippetsReflection.OpenAPI.Test;
Expand Down Expand Up @@ -408,4 +408,122 @@ public async Task GeneratesEscapedSnippetsForMultilineCommand()
// Then
Assert.Equal("mgc users create --body '{\\\n \"name\": \"test\"\\\n}'", result);
}

[Fact]
public async Task GeneratesSnippetsContainingOverLoadedBoundFunctionsWithDateParameter()
{
// Given
string url = $"{ServiceRootUrl}/reports/getYammerDeviceUsageUserDetail(date=2018-03-05)";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc reports get-yammer-device-usage-user-detail-with-date get --date {date-id}", result);
}

[Fact]
public async Task GeneratesSnippetsContainingOverLoadedBoundFunctionsWithDateParameterWithSingleOrDoubleQuotes()
{
// Given
string url = $"{ServiceRootUrl}/reports/getYammerDeviceUsageUserDetail(date='2018-03-05')";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc reports get-yammer-device-usage-user-detail-with-date get --date '{date-id}'", result);
}

[Fact]
public async Task GeneratesSnippetsContainingOverLoadedBoundFunctionsWithNonDateParameter()
{
// Given
string url = $"{ServiceRootUrl}/drives/driveid/items/driveitemid/delta(token='token')";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc drives items delta-with-token get --token '{token-id}' --drive-id {drive-id} --drive-item-id {driveItem-id}", result);
}

[Fact]
public async Task GeneratesSnippetsContainingUnBoundedFunctions()
{
// Given
string url = $"{ServiceRootUrl}/identity/identityProviders/availableProviderTypes()";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc identity identity-providers available-provider-types get", result);
}

[Fact]
public async Task GeneratesSnippetsWithSlashMeEndpoints()
{
// Given
string url = $"{ServiceRootUrl}/me/calendar/events?$filter=startsWith%28subject%2C%27All%27%29";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc users calendar events list --user-id {user-id} --filter \"startsWith(subject,'All')\"", result);
}
[Fact]
public async Task GeneratesSnippetsWithExpandQueryOptions()
{
// Given
string url = $"{ServiceRootUrl}/me/messages/XXXX?$expand=singleValueExtendedProperties%28$filter%3Did%20eq%20%27XXXX%27%29";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc users messages get --user-id {user-id} --message-id {message-id} --expand \"singleValueExtendedProperties(`$filter=id eq 'XXXX')\"", result);
}
[Fact]
public async Task GeneratesSnippetsWithFilterQueryOptions()
{
// Given
string url = $"{ServiceRootUrl}/identityGovernance/accessReviews/definitions?$filter=contains%28scope%2Fmicrosoft.graph.accessReviewQueryScope%2Fquery%2C%20%27.%2Fmembers%27%29";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc identity-governance access-reviews definitions list --filter \"contains(scope/microsoft.graph.accessReviewQueryScope/query, './members')\"", result);
}

[Fact]
public async Task GeneratesSnippetsForHttpSnippetsWithUrlEncodedValuesForSystemQueryOptionParameters()
{
// Given
string url = $"{ServiceRootUrl}/teams/XXXXXXX/members?$filter=%28microsoft.graph.aadUserConversationMember%2FdisplayName%2520eq%2520%27Harry%2520Johnson%27%2520or%2520microsoft.graph.aadUserConversationMember%2Femail%2520eq%2520%27admin%40M365x987948.OnMicrosoft.com%27%29";
using var requestPayload = new HttpRequestMessage(HttpMethod.Get, url);
var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, await GetV1SnippetMetadata());

// When
var result = _generator.GenerateCodeSnippet(snippetModel);

// Then
Assert.Equal("mgc teams members list --team-id {team-id} --filter \"(microsoft.graph.aadUserConversationMember/displayName eq 'Harry Johnson' or microsoft.graph.aadUserConversationMember/email eq 'admin@M365x987948.OnMicrosoft.com')\"", result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ private static void WriteObjectFromCodeProperty(CodeProperty parentProperty, Cod
var isParentArray = parentProperty.PropertyType == PropertyType.Array;
var isParentMap = parentProperty.PropertyType == PropertyType.Map;
var assignmentSuffix = isParentMap ? string.Empty : ","; // no comma separator values for additionalData/maps
var propertyAssignment = $"{indentManager.GetIndent()}{codeProperty.Name.CleanupSymbolName().ToFirstCharacterUpperCase()} = "; // default assignments to the usual "var x = xyz"
var propertyAssignment = $"{indentManager.GetIndent()}{codeProperty.Name.CleanupSymbolName().ToPascalCase()} = "; // default assignments to the usual "var x = xyz"
if (isParentMap)
{
propertyAssignment = $"{indentManager.GetIndent()}\"{codeProperty.Name}\" , "; // if its in the additionalData assignments happen using string value keys
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ private static Boolean searchProperty(CodeProperty property, PropertyType proper

private static void writeSnippet(SnippetCodeGraph codeGraph, StringBuilder builder)
{
builder.AppendLine($"{clientVarName}, err := msgraphsdk.New{clientVarType}({clientFactoryVariables}){Environment.NewLine}{Environment.NewLine}");
builder.AppendLine($"{clientVarName} := msgraphsdk.New{clientVarType}({clientFactoryVariables}){Environment.NewLine}{Environment.NewLine}");
writeHeadersAndOptions(codeGraph, builder);
WriteBody(codeGraph, builder);
builder.AppendLine("");
Expand Down

0 comments on commit b3b40dd

Please sign in to comment.