// This test asserts that we can generate snippets with @odata properties public void GenerateSnippetsWithOdataProperties() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); const string directoryObj = "{\r\n \"@odata.id\": \"https://graph.microsoft.com/v1.0/users/{id}\"\r\n}"; var requestPayload = new HttpRequestMessage(HttpMethod.Put, "https://graph.microsoft.com/v1.0/users/{id}/manager/$ref") { Content = new StringContent(directoryObj) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const directoryObject = {\r\n" + " '@odata.id': 'https://graph.microsoft.com/v1.0/users/{id}'\r\n" + "};\r\n" + "\r\n" + "await client.api('/users/{id}/manager/$ref')\r\n" + "\t.put(directoryObject);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
//This tests asserts that we can generate snippets from json objects with nested arrays inside them. public void GeneratesPatchRequestSnippetFromJsonObject() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //json string with nested objects string array const string userJsonObject = "{\r\n \"accountEnabled\": true,\r\n " + "\"businessPhones\": [\r\n \"businessPhones-value\",\"businessPhones-value2\",\"businessPhones-value3\"\r\n ],\r\n " +//nested ArrayObject with 3 items "\"city\": \"city-value\"\r\n}"; var requestPayload = new HttpRequestMessage(HttpMethod.Patch, "https://graph.microsoft.com/v1.0/me") { Content = new StringContent(userJsonObject) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const user = {\r\n " + "accountEnabled: true,\r\n " + "businessPhones: [\r\n" + " 'businessPhones-value','businessPhones-value2','businessPhones-value3'\r\n" + " ],\r\n " + "city: 'city-value'\r\n" + "};\r\n" + "\r\n" + "await client.api('/me')\r\n\t.update(user);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
// This test asserts that single quotes inside strings are escaped public void GenerateSnippetsWithSingleQuotesInsideString() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); const string actionResultParts = "{\r\n" + " \"values\": [\r\n" + " {\r\n" + " \"@odata.type\": \"microsoft.graph.aadUserConversationMember\",\r\n" + " \"roles\":[],\r\n" + " \"[email protected]\": \"https://graph.microsoft.com/beta/users('18a80140-b0fb-4489-b360-2f6efaf225a0')\"\r\n" + " },\r\n" + " {\r\n" + " \"@odata.type\": \"microsoft.graph.aadUserConversationMember\",\r\n" + " \"roles\":[\"owner\"],\r\n" + " \"[email protected]\": \"https://graph.microsoft.com/beta/users('86503198-b81b-43fe-81ee-ad45b8848ac9')\"\r\n" + " }\r\n" + " ]\r\n" + "}"; var requestPayload = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/beta/teams/e4183b04-c9a2-417c-bde4-70e3ee46a6dc/members/add") { Content = new StringContent(actionResultParts) }; var betaServiceRootUrl = "https://graph.microsoft.com/beta"; var betaEdmModel = CsdlReader.Parse(XmlReader.Create(CommonGeneratorShould.CleanBetaMetadata)); var snippetModel = new SnippetModel(requestPayload, betaServiceRootUrl, betaEdmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const actionResultPart = {\r\n" + " values: [\r\n" + " {\r\n" + " '@odata.type': 'microsoft.graph.aadUserConversationMember',\r\n" + " roles: [],\r\n" + " '*****@*****.**': 'https://graph.microsoft.com/beta/users(\\'18a80140-b0fb-4489-b360-2f6efaf225a0\\')'\r\n" + " },\r\n" + " {\r\n" + " '@odata.type': 'microsoft.graph.aadUserConversationMember',\r\n" + " roles: ['owner'],\r\n" + " '*****@*****.**': 'https://graph.microsoft.com/beta/users(\\'86503198-b81b-43fe-81ee-ad45b8848ac9\\')'\r\n" + " }\r\n" + " ]\r\n" + "};\r\n" + "\r\n" + "await client.api('/teams/e4183b04-c9a2-417c-bde4-70e3ee46a6dc/members/add')\r\n" + "\t.version('beta')\r\n" + "\t.post(actionResultPart);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
/// <summary> /// Class holding the Edm model and request processing for snippet generations /// </summary> public SnippetsGenerator() { LoadGraphMetadata(); JavascriptExpressions = new JavascriptExpressions(); CSharpExpressions = new CSharpExpressions(); ObjectiveCExpressions = new ObjectiveCExpressions(); JavaExpressions = new JavaExpressions(); }
/// <summary> /// Class holding the Edm model and request processing for snippet generations /// </summary> /// <param name="customMetadataPath">Full file path to the metadata</param> public SnippetsGenerator(string customMetadataPath = null) { LoadGraphMetadata(customMetadataPath); JavascriptExpressions = new JavascriptExpressions(); CSharpExpressions = new CSharpExpressions(); ObjectiveCExpressions = new ObjectiveCExpressions(); JavaExpressions = new JavaExpressions(); }
/// <summary> /// Class holding the Edm model and request processing for snippet generations /// </summary> /// <param name="isCommandLine">Determines whether we are running the snippet generation in command line</param> /// <param name="customMetadataPath">Full file path to the metadata</param> public SnippetsGenerator(bool isCommandLine = false, string customMetadataPath = null) { IsCommandLine = isCommandLine; LoadGraphMetadata(customMetadataPath); JavascriptExpressions = new JavascriptExpressions(); CSharpExpressions = new CSharpExpressions(); ObjectiveCExpressions = new ObjectiveCExpressions(); JavaExpressions = new JavaExpressions(); }
public void EnsureVariableNameIsNotReserved_AppendsUnderscoreOnJavascriptKeywords() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); var keyword = "transient"; //Act var result = CommonGenerator.EnsureVariableNameIsNotReserved(keyword, expressions); //Assert Assert.Equal("_transient", result); }
public void GenerateQuerySection_ShouldReturnAppropriateJavascriptSkipExpression() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //no query present var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/events?$skip=20"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act var result = CommonGenerator.GenerateQuerySection(snippetModel, expressions); //Assert string is empty Assert.Equal("\n\t.skip(20)", result); }
public void GenerateQuerySection_ShouldReturnAppropriateJavascriptFilterExpression() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //no query present var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/users?$filter=startswith(givenName, 'J')"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act var result = CommonGenerator.GenerateQuerySection(snippetModel, expressions); //Assert string is empty Assert.Equal("\n\t.filter('startswith(givenName, 'J')')", result); }
public void GenerateQuerySection_ShouldReturnAppropriateJavascriptSelectExpression() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //no query present var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/users/{id}?$select=displayName,givenName,postalCode"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act var result = CommonGenerator.GenerateQuerySection(snippetModel, expressions); //Assert string is empty Assert.Equal("\n\t.select('displayName,givenName,postalCode')", result); }
public void GenerateQuerySection_ShouldReturnEmptyStringIfQueryListIsEmpty() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //no query present var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/drive/root"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act var result = CommonGenerator.GenerateQuerySection(snippetModel, expressions); //Assert string is empty Assert.Equal("", result); }
public void GenerateQuerySection_ShouldReturnAppropriateJavascriptRequestHeaderExpressionWithEscapedDoubleQuotes() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //no query present var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/events"); requestPayload.Headers.Add("Prefer", "outlook.timezone=\"Pacific Standard Time\""); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act var result = CommonGenerator.GenerateQuerySection(snippetModel, expressions); //Assert string is empty Assert.Equal("\n\t.header('Prefer','outlook.timezone=\"Pacific Standard Time\"')", result); }
public void GenerateQuerySection_ShouldReturnAppropriateJavascriptRequestHeaderExpression() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //no query present var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/users/{id}"); requestPayload.Headers.Add("Prefer", "kenya-timezone"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act var result = CommonGenerator.GenerateQuerySection(snippetModel, expressions); //Assert string is empty Assert.Equal("\n\t.header('Prefer','kenya-timezone')", result); }
//This tests asserts that we can generate snippets with query options present public void GeneratesSnippetsWithQueryOptions() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); var requestPayload = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime=2017-01-01T19:00:00.0000000&endDateTime=2017-01-07T19:00:00.0000000"); var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "let calendarView = await client.api('/me/calendar/calendarView?startDateTime=2017-01-01T19:00:00.0000000&endDateTime=2017-01-07T19:00:00.0000000')\r\n\t.get();"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
//This tests asserts that we can generate snippets from json objects with nested objects inside them. public void GeneratesPostRequestSnippetFromJsonObject() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //json string with nested object properties const string userJsonObject = "{\r\n \"accountEnabled\": true,\r\n " + "\"displayName\": \"displayName-value\",\r\n " + "\"mailNickname\": \"mailNickname-value\",\r\n " + "\"userPrincipalName\": \"[email protected]\",\r\n " + " \"passwordProfile\" : {\r\n \"forceChangePasswordNextSignIn\": true,\r\n \"password\": \"password-value\"\r\n }\r\n}";//nested passwordProfile Object var requestPayload = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/users") { Content = new StringContent(userJsonObject) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const user = {\r\n" + " accountEnabled: true,\r\n" + " displayName: 'displayName-value',\r\n" + " mailNickname: 'mailNickname-value',\r\n" + " userPrincipalName: '*****@*****.**',\r\n" + " passwordProfile: {\r\n" + " forceChangePasswordNextSignIn: true,\r\n" + " password: '******'\r\n" + " }\r\n" + "};\r\n" + "\r\n" + "await client.api('/users')\r\n" + "\t.post(user);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }
//This tests asserts that we can generate snippets from json objects with nested objects inside them. public void GeneratesCorrectCreateCalendarEventJavascriptSnippet() { //Arrange LanguageExpressions expressions = new JavascriptExpressions(); //json string with nested object properties const string userJsonObject = "{\r\n \"subject\": \"Let's go for lunch\",\r\n" + " \"body\": {\r\n" + " \"contentType\": \"HTML\",\r\n" + " \"content\": \"Does mid month work for you?\"\r\n" + " },\r\n" + " \"start\": {\r\n" + " \"dateTime\": \"2019-03-15T12:00:00\",\r\n" + " \"timeZone\": \"Pacific Standard Time\"\r\n" + " },\r\n " + "\"end\": {\r\n" + " \"dateTime\": \"2019-03-15T14:00:00\",\r\n" + " \"timeZone\": \"Pacific Standard Time\"\r\n" + " },\r\n" + " \"location\":{\r\n" + " \"displayName\":\"Harry's Bar\"\r\n" + " },\r\n" + " \"attendees\": [\r\n" + " {\r\n" + " \"emailAddress\": {\r\n" + " \"address\":\"[email protected]\",\r\n" + " \"name\": \"Adele Vance\"\r\n" + " },\r\n" + " \"type\": \"required\"\r\n" + " }\r\n" + " ]" + "\r\n}"; var requestPayload = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/users") { Content = new StringContent(userJsonObject) }; var snippetModel = new SnippetModel(requestPayload, ServiceRootUrl, _edmModel); //Act by generating the code snippet var result = JavaScriptGenerator.GenerateCodeSnippet(snippetModel, expressions); //Assert code snippet string matches expectation const string expectedSnippet = "const user = {\r\n" + " subject: 'Let\\'s go for lunch',\r\n" + " body: {\r\n" + " contentType: 'HTML',\r\n" + " content: 'Does mid month work for you?'\r\n" + " },\r\n" + " start: {\r\n" + " dateTime: '2019-03-15T12:00:00',\r\n" + " timeZone: 'Pacific Standard Time'\r\n" + " },\r\n" + " end: {\r\n" + " dateTime: '2019-03-15T14:00:00',\r\n" + " timeZone: 'Pacific Standard Time'\r\n" + " },\r\n" + " location: {\r\n" + " displayName: 'Harry\\'s Bar'\r\n" + " },\r\n" + " attendees: [\r\n" + " {\r\n" + " emailAddress: {\r\n" + " address: '*****@*****.**',\r\n" + " name: 'Adele Vance'\r\n" + " },\r\n" + " type: 'required'\r\n" + " }\r\n" + " ]\r\n" + "};\r\n" + "\r\n" + "await client.api('/users')\r\n" + "\t.post(user);"; //Assert the snippet generated is as expected Assert.Equal(AuthProviderPrefix + expectedSnippet, result); }