From dbbf49b032f2f11ab2b7caaa4a2e28a58aa957c5 Mon Sep 17 00:00:00 2001 From: Qiong Wu Date: Tue, 18 Dec 2018 16:46:25 +0800 Subject: [PATCH 1/3] add gmail service test --- .../ServiceClients/GoogleAPI/GMailService.cs | 86 +++++--- .../GoogleAPI/GooglePeopleService.cs | 3 +- .../emailskill/ServiceClients/IMailService.cs | 4 +- .../API/Fakes/MockGoogleServiceClient.cs | 202 ++++++++++++++++++ .../API/Fakes/MockGoogleUserClient.cs | 81 +++++++ ...ClientGen.cs => MockGraphServiceClient.cs} | 4 +- .../API/Fakes/MockServiceManager.cs | 4 +- .../API/Fakes/MockSkillConfiguration.cs | 1 - .../API/Service/GoogleMailServiceTests.cs | 66 ++++++ .../API/Service/GoogleUserServiceTests.cs | 57 +++++ ...rviceTests.cs => GraphMailServiceTests.cs} | 14 +- ...rviceTests.cs => GraphUserServiceTests.cs} | 8 +- .../Flow/DeleteEmailFlowTests.cs | 1 - .../Flow/Fakes/MockSkillConfiguration.cs | 1 - .../Flow/Strings/ContextStrings.cs | 6 +- .../Flow/Utterances/BaseTestUtterances.cs | 3 +- .../Flow/Utterances/DeleteEmailUtterances.cs | 3 +- .../Flow/Utterances/GeneralTestUtterances.cs | 3 +- 18 files changed, 483 insertions(+), 64 deletions(-) create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs rename solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/{MockGraphServiceClientGen.cs => MockGraphServiceClient.cs} (97%) create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs rename solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/{MailServiceTests.cs => GraphMailServiceTests.cs} (98%) rename solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/{UserServiceTests.cs => GraphUserServiceTests.cs} (98%) diff --git a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs index bd653c86be..5fcc234cfe 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs @@ -13,6 +13,7 @@ using Google.Apis.Auth.OAuth2.Responses; using Google.Apis.Gmail.v1; using Google.Apis.Gmail.v1.Data; +using Google.Apis.Requests; using Google.Apis.Services; using Google.Apis.Util.Store; using Microsoft.Bot.Solutions.Data; @@ -129,19 +130,22 @@ public async Task ForwardMessageAsync(string id, string content, List } Console.WriteLine(forward.ToString() + content); - await service.Users.Messages.Send( + + var sendRequest = service.Users.Messages.Send( new GmailMessage() - { - Raw = Base64UrlEncode(forward.ToString() + content), - ThreadId = threadId, - }, "me").ExecuteAsync(); + { + Raw = Base64UrlEncode(forward.ToString() + content), + ThreadId = threadId, + }, "me"); + await ((IClientServiceRequest)sendRequest).ExecuteAsync(); } /// public async Task SendMessageAsync(string content, string subject, List recipients) { // get from address - var user = service.Users.GetProfile("me").Execute(); + var profileRequest = service.Users.GetProfile("me"); + var user = ((IClientServiceRequest)profileRequest).Execute(); var mess = new MailMessage(); mess.Subject = subject; mess.From = new MailAddress(user.EmailAddress); @@ -157,11 +161,12 @@ public async Task SendMessageAsync(string content, string subject, List)sendRequest).ExecuteAsync(); } /// @@ -227,19 +232,21 @@ public async Task> ReplyToMessageAsync(string id, string content } Console.WriteLine(reply.ToString() + content); - await service.Users.Messages.Send( + var sendRequest = service.Users.Messages.Send( new GmailMessage() - { - Raw = Base64UrlEncode(reply.ToString() + content), - ThreadId = threadId, - }, "me").ExecuteAsync(); + { + Raw = Base64UrlEncode(reply.ToString() + content), + ThreadId = threadId, + }, "me"); + await ((IClientServiceRequest)sendRequest).ExecuteAsync(); return null; } /// public async Task> GetMyMessagesAsync(DateTime fromTime, DateTime toTime, bool getUnRead = false, bool isImportant = false, bool directlyToMe = false, string fromAddress = null, int skip = 0) { - var user = service.Users.GetProfile("me").Execute(); + var profileRequest = service.Users.GetProfile("me"); + var user = ((IClientServiceRequest)profileRequest).Execute(); var userAddress = user.EmailAddress; string searchOperation = string.Empty; @@ -285,7 +292,7 @@ public async Task> GetMyMessagesAsync(DateTime fromTime, DateTim var tempReq = service.Users.Messages.List("me"); tempReq.MaxResults = skip; tempReq.Q = searchOperation; - var tempRes = tempReq.Execute(); + var tempRes = ((IClientServiceRequest)tempReq).Execute(); if (tempRes.NextPageToken != null && tempRes.NextPageToken != string.Empty) { this.pageToken = tempRes.NextPageToken; @@ -299,8 +306,8 @@ public async Task> GetMyMessagesAsync(DateTime fromTime, DateTim request.PageToken = this.pageToken; } - ListMessagesResponse response = await request.ExecuteAsync(); - List result = new List(); + var response = await ((IClientServiceRequest)request).ExecuteAsync(); + var result = new List(); // response.Messages only have id and threadID if (response.Messages != null) @@ -309,7 +316,7 @@ public async Task> GetMyMessagesAsync(DateTime fromTime, DateTim { var req = service.Users.Messages.Get("me", temp.Id); req.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw; - return req.ExecuteAsync(); + return ((IClientServiceRequest)req).ExecuteAsync(); })); if (messages != null && messages.Length > 0) { @@ -357,26 +364,41 @@ public string AppendFilterString(string old, string filterString) return result; } - private static string Base64UrlEncode(string text) + public static string Base64UrlEncode(string text) { var textBytes = Encoding.UTF8.GetBytes(text); - return System.Convert.ToBase64String(textBytes) - .Replace('+', '-') - .Replace('/', '_') - .Replace("=", string.Empty); + + var result = System.Convert.ToBase64String(textBytes); + result = result.Split('=')[0]; // Remove any trailing '='s + result = result.Replace('+', '-'); // 62nd char of encoding + result = result.Replace('/', '_'); // 63rd char of encoding + return result; } // decode from base64url to utf-8 bytes - private static byte[] Base64UrlDecode(string text) + public static byte[] Base64UrlDecode(string text) { - var temp = text.Replace('-', '+') - .Replace('_', '/'); - byte[] textBytes = Convert.FromBase64String(temp); - return textBytes; // Encoding.UTF8.GetString(textBytes); + string result = text; + result = result.Replace('-', '+'); // 62nd char of encoding + result = result.Replace('_', '/'); // 63rd char of encoding + + // Pad with trailing '='s + switch (result.Length % 4) + { + case 0: break; // No pad chars in this case + case 2: result += "=="; break; // Two pad chars + case 3: result += "="; break; // One pad char + default: + throw new System.Exception( + "Illegal base64url string!"); + } + + byte[] textBytes = Convert.FromBase64String(result); + return textBytes; } // decode to mimeMessage - private static MimeMessage DecodeToMessage(string text) + public static MimeMessage DecodeToMessage(string text) { byte[] msg = Base64UrlDecode(text); MemoryStream mm = new MemoryStream(msg); @@ -388,7 +410,7 @@ private static MimeMessage DecodeToMessage(string text) { var request = service.Users.Messages.Get("me", id); request.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw; - var response = await request.ExecuteAsync(); + var response = await ((IClientServiceRequest)request).ExecuteAsync(); var mime = DecodeToMessage(response.Raw); return (mime, response.ThreadId); } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GooglePeopleService.cs b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GooglePeopleService.cs index 68ab0dcd77..80f452dc78 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GooglePeopleService.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GooglePeopleService.cs @@ -9,6 +9,7 @@ using Google.Apis.Auth.OAuth2.Responses; using Google.Apis.People.v1; using Google.Apis.People.v1.Data; +using Google.Apis.Requests; using Google.Apis.Services; using Google.Apis.Util.Store; using Microsoft.Graph; @@ -75,7 +76,7 @@ public async Task> GetPeopleAsync(string name) PeopleResource.ConnectionsResource.ListRequest peopleRequest = service.People.Connections.List("people/me"); peopleRequest.RequestMaskIncludeField = "person.emailAddresses,person.names"; - ListConnectionsResponse connectionsResponse = await peopleRequest.ExecuteAsync(); + ListConnectionsResponse connectionsResponse = await ((IClientServiceRequest)peopleRequest).ExecuteAsync(); IList connections = connectionsResponse.Connections; var result = new List(); diff --git a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/IMailService.cs b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/IMailService.cs index c7b7273aef..ba65471c88 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/IMailService.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/IMailService.cs @@ -41,13 +41,13 @@ public interface IMailService /// /// Start date time. /// End date time. - /// If been read. + /// If been read. /// If important. /// If directly to user. /// Message coming from address. /// Skip message count. /// A representing the result of the asynchronous operation. - Task> GetMyMessagesAsync(DateTime startDateTime, DateTime endDateTime, bool isRead, bool isImportant, bool directlyToMe, string mailAddress, int skip); + Task> GetMyMessagesAsync(DateTime startDateTime, DateTime endDateTime, bool getUnRead, bool isImportant, bool directlyToMe, string mailAddress, int skip); /// /// Delete email. diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs new file mode 100644 index 0000000000..8619c71044 --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections.Generic; +using System.Net.Mail; +using System.Text; +using System.Threading.Tasks; +using EmailSkill; +using Google.Apis.Gmail.v1; +using Google.Apis.Gmail.v1.Data; +using Google.Apis.Requests; +using Google.Apis.Services; +using MimeKit; +using Moq; +using static Google.Apis.Gmail.v1.UsersResource; +using GmailMessage = Google.Apis.Gmail.v1.Data.Message; + +namespace EmailSkillTest.API.Fakes +{ + public class MockGoogleServiceClient + { + private readonly Mock mockMailService; + private readonly Mock mockMessagesResource; + private readonly Mock mockUsersResource; + + public MockGoogleServiceClient() + { + this.mockMailService = new Mock(); + this.mockMessagesResource = new Mock(mockMailService.Object); + this.mockUsersResource = new Mock(mockMailService.Object); + + this.mockUsersResource.SetupGet(users => users.Messages).Returns(mockMessagesResource.Object); + + this.mockUsersResource.Setup(users => users.GetProfile(It.IsAny())).Returns((string userId) => + { + MockUsersResource.MockGetProfileRequest mockGetProfileRequest = new MockUsersResource.MockGetProfileRequest(this.mockMailService.Object, userId); + return mockGetProfileRequest; + }); + + this.mockMailService.SetupGet(service => service.Users).Returns(mockUsersResource.Object); + + this.mockMessagesResource.Setup(messages => messages.Send(It.IsAny(), It.IsAny())).Returns((GmailMessage body, string userId) => + { + MockMessagesResource.MockSendRequest mockSendRequest = new MockMessagesResource.MockSendRequest(this.mockMailService.Object, body, userId); + return mockSendRequest; + }); + + this.mockMessagesResource.Setup(messages => messages.Get(It.IsAny(), It.IsAny())).Returns((string userId, string id) => + { + MockMessagesResource.MockGetRequest mockGetRequest = new MockMessagesResource.MockGetRequest(this.mockMailService.Object, userId, id); + + return mockGetRequest; + }); + + this.mockMessagesResource.Setup(messages => messages.List(It.IsAny())).Returns((string userId) => + { + MockMessagesResource.MockListRequest mockListRequest = new MockMessagesResource.MockListRequest(this.mockMailService.Object, userId); + + return mockListRequest; + }); + } + + public Mock GetMockGraphServiceClient() + { + return this.mockMailService; + } + } + + public class MockUsersResource + { + public class MockGetProfileRequest : GetProfileRequest, IClientServiceRequest + { + public MockGetProfileRequest(IClientService service, string userId) + : base(service, userId) + { + } + + public new Profile Execute() + { + if (UserId != "me") + { + throw new Exception("User ID not support"); + } + + var profile = new Profile(); + profile.EmailAddress = "test@test.com"; + + return profile; + } + } + } + + public class MockMessagesResource + { + public class MockSendRequest : MessagesResource.SendRequest, IClientServiceRequest + { + public MockSendRequest(IClientService service, GmailMessage body, string userId) + : base(service, body, userId) + { + this.Body = body; + } + + public GmailMessage Body { get; set; } + + public new Task ExecuteAsync() + { + if (UserId != "me") + { + throw new Exception("User ID not support"); + } + + return Task.FromResult(this.Body); + } + } + + public class MockGetRequest : MessagesResource.GetRequest, IClientServiceRequest + { + public MockGetRequest(IClientService service, string userId, string id) + : base(service, userId, id) + { + } + + public new Task ExecuteAsync() + { + if (UserId != "me") + { + throw new Exception("User ID not support"); + } + + return Task.FromResult(GmailUtil.GetFakeGmailMessage()); + } + } + + public class MockListRequest : MessagesResource.ListRequest, IClientServiceRequest + { + public MockListRequest(IClientService service, string userId) + : base(service, userId) + { + } + + public new ListMessagesResponse Execute() + { + var result = new ListMessagesResponse(); + var messageList = GmailUtil.GetFakeGmailMessageList(); + + foreach (var message in messageList) + { + result.Messages.Add(message); + } + + return result; + } + + public new Task ExecuteAsync() + { + var result = new ListMessagesResponse(); + result.Messages = GmailUtil.GetFakeGmailMessageList(); + + return Task.FromResult(result); + } + } + } + + public class GmailUtil + { + public static IList GetFakeGmailMessageList(int size = 5) + { + var messages = new List(); + + for (int i = 0; i < size; i++) + { + var message = GetFakeGmailMessage(to: "test@test.com" + i); + messages.Add(message); + } + + return messages; + } + + public static GmailMessage GetFakeGmailMessage( + string from = "test@test.com", + string to = "test@test.com", + string subject = "test subject", + string content = "test content") + { + var mess = new MailMessage(); + mess.Subject = subject; + mess.From = new MailAddress(from); + mess.To.Add(new MailAddress(to)); + + var adds = AlternateView.CreateAlternateViewFromString(content, new System.Net.Mime.ContentType("text/plain")); + adds.ContentType.CharSet = Encoding.UTF8.WebName; + mess.AlternateViews.Add(adds); + + var mime = MimeMessage.CreateFromMailMessage(mess); + var gmailMessage = new GmailMessage() + { + Raw = GMailService.Base64UrlEncode(mime.ToString()), + ThreadId = "1" + }; + + return gmailMessage; + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs new file mode 100644 index 0000000000..f3f66865cd --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Google.Apis.People.v1; +using Google.Apis.People.v1.Data; +using Google.Apis.Requests; +using Google.Apis.Services; +using Moq; +using static Google.Apis.People.v1.PeopleResource; + +namespace EmailSkillTest.API.Fakes +{ + public static class MockGoogleUserClient + { + public static Mock mockGoogleUserService; + public static Mock mockPeopleResource; + public static Mock mockConnectionsResource; + + static MockGoogleUserClient() + { + mockGoogleUserService = new Mock(); + mockPeopleResource = new Mock(mockGoogleUserService.Object); + mockConnectionsResource = new Mock(mockGoogleUserService.Object); + mockGoogleUserService.SetupGet(service => service.People).Returns(mockPeopleResource.Object); + mockPeopleResource.SetupGet(peopleResource => peopleResource.Connections).Returns(mockConnectionsResource.Object); + mockConnectionsResource.Setup(connect => connect.List(It.IsAny())).Returns((string resourceName) => + { + if (resourceName != "people/me") + { + throw new Exception("Resource Name not support"); + } + + MockListRequest mockListRequest = new MockListRequest(mockGoogleUserService.Object, resourceName); + return mockListRequest; + }); + } + } + + public class MockListRequest : ConnectionsResource.ListRequest, IClientServiceRequest + { + public MockListRequest(IClientService service, string resourceName) : base(service, resourceName) + { + + } + + public new async Task ExecuteAsync() + { + if (ResourceName != "people/me") + { + throw new Exception("Resource Name not support"); + } + + ListConnectionsResponse result = new ListConnectionsResponse(); + result.Connections = new List(); + + Person person = new Person() + { + Names = new List(), + EmailAddresses = new List() + }; + + person.Names.Add(new Name() { DisplayName = "Jane Doe", GivenName = "Jane", FamilyName = "Doe", DisplayNameLastFirst = "Jane Doe" }); + person.EmailAddresses.Add(new EmailAddress() { Value = "JaneDeo@test.com"} ); + result.Connections.Add(person); + + person = new Person() + { + Names = new List(), + EmailAddresses = new List() + }; + + person.Names.Add(new Name() { DisplayName = "John Doe", GivenName = "John", FamilyName = "Doe", DisplayNameLastFirst = "John Doe" }); + person.EmailAddresses.Add(new EmailAddress() { Value = "JohnDeo@test.com" }); + result.Connections.Add(person); + + await Task.CompletedTask; + return result; + } + + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClientGen.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClient.cs similarity index 97% rename from solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClientGen.cs rename to solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClient.cs index 111e533856..40c57cd11f 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClientGen.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClient.cs @@ -5,11 +5,11 @@ namespace EmailSkillTest.API.Fakes { - public class MockGraphServiceClientGen + public class MockGraphServiceClient { private readonly Mock mockMailService; - public MockGraphServiceClientGen() + public MockGraphServiceClient() { this.mockMailService = new Mock(); this.InitializeDefaultData(); diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockServiceManager.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockServiceManager.cs index fa9c527577..00c7ce009a 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockServiceManager.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockServiceManager.cs @@ -8,7 +8,7 @@ public class MockServiceManager : IServiceManager { public IMailService InitMailService(string token, TimeZoneInfo timeZoneInfo, MailSource source) { - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); @@ -17,7 +17,7 @@ public IMailService InitMailService(string token, TimeZoneInfo timeZoneInfo, Mai public IUserService InitUserService(string token, TimeZoneInfo timeZoneInfo, MailSource source) { - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphUserService userService = new MSGraphUserService(serviceClient, timeZoneInfo: TimeZoneInfo.Local); diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs index 050103ffc4..dd70894b8e 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Microsoft.ApplicationInsights; -using Microsoft.Bot.Builder; using Microsoft.Bot.Builder.Azure; using Microsoft.Bot.Solutions.Skills; diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs new file mode 100644 index 0000000000..c164d2ad66 --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using EmailSkill; +using EmailSkillTest.API.Fakes; +using Microsoft.Graph; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace EmailSkillTest.API +{ + [TestClass] + public class GoogleMailServiceTests + { + public static IMailService mailService; + + [ClassInitialize] + public static void ClassInit(TestContext context) + { + var mockGoogleServiceClient = new MockGoogleServiceClient(); + mailService = new GMailService(mockGoogleServiceClient.GetMockGraphServiceClient().Object); + } + + [TestMethod] + public async Task ForwardMessageTest() + { + List recipients = new List(); + recipients.Add(new Recipient() + { + EmailAddress = new EmailAddress() + { + Address = "test@test.com" + } + }); + + await mailService.ForwardMessageAsync("1", "Test", recipients); + } + + [TestMethod] + public async Task SendMessageTest() + { + List recipients = new List(); + recipients.Add(new Recipient() + { + EmailAddress = new EmailAddress() + { + Address = "test@test.com" + } + }); + + await mailService.SendMessageAsync("test content", "test subject", recipients); + } + + [TestMethod] + public async Task ReplyMessageTest() + { + await mailService.ReplyToMessageAsync("1", "test content"); + } + + [TestMethod] + public async Task GetMessagesTest() + { + var messageList = await mailService.GetMyMessagesAsync(DateTime.Now, DateTime.Now.AddDays(7), false, false, false, null, 0); + Assert.AreEqual(messageList.Count, 5); + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs new file mode 100644 index 0000000000..ba0e070244 --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using EmailSkill; +using EmailSkillTest.API.Fakes; +using Microsoft.Graph; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace EmailSkillTest.API +{ + [TestClass] + public class GoogleUserServiceTests + { + public static IUserService userService; + + [ClassInitialize] + public static void ClassInit(TestContext context) + { + userService = new GooglePeopleService(MockGoogleUserClient.mockGoogleUserService.Object); + } + + [ClassCleanup] + public static void ClassCleanup() + { + } + + [TestInitialize] + public void TestInit() + { + } + + [TestCleanup] + public void TestCleanup() + { + } + + [TestMethod] + public async Task GetPeopleAsyncTest() + { + List result = await userService.GetPeopleAsync("Doe"); + Assert.IsTrue(result.Count == 2); + } + + [TestMethod] + public async Task GetUserAsyncTest() + { + List result = await userService.GetUserAsync("Doe"); + Assert.IsTrue(result.Count == 0); + } + + [TestMethod] + public async Task GetContactsAsyncTest() + { + List result = await userService.GetContactsAsync("Doe"); + Assert.IsTrue(result.Count == 0); + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/MailServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs similarity index 98% rename from solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/MailServiceTests.cs rename to solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs index 37232cb5ed..3a5dbe2fbf 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/MailServiceTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs @@ -10,7 +10,7 @@ namespace EmailSkillTest.API { [TestClass] - public class MailServiceTests + public class GraphMailServiceTests { [ClassInitialize] public static void ClassInit(TestContext context) @@ -31,7 +31,7 @@ public async Task SendMessageTest() List recipientList = new List(); recipientList.Add(recipient); - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); @@ -77,7 +77,7 @@ public async Task GetMyMessagesTest() messages.Add(message); } - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); mockGraphServiceClient.MyMessages = messages; mockGraphServiceClient.SetMockBehavior(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; @@ -104,7 +104,7 @@ public async Task GetMyMessagesTest() [TestMethod] public async Task ReplyToMessageTest() { - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); @@ -114,7 +114,7 @@ public async Task ReplyToMessageTest() [TestMethod] public async Task UpdateMessageTest() { - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); @@ -125,7 +125,7 @@ public async Task UpdateMessageTest() [TestMethod] public async Task ForwardMessageTest() { - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); @@ -136,7 +136,7 @@ public async Task ForwardMessageTest() [TestMethod] public async Task DeleteMessageTest() { - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/UserServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs similarity index 98% rename from solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/UserServiceTests.cs rename to solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs index 7b39df7afb..906b3b0c33 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/UserServiceTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs @@ -8,7 +8,7 @@ namespace EmailSkillTest.API { [TestClass] - public class UserServiceTests + public class GraphUserServiceTests { [ClassInitialize] public static void ClassInit(TestContext context) @@ -39,7 +39,7 @@ public async Task GetUserTest() users.Add(user); } - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); mockGraphServiceClient.Users = users; mockGraphServiceClient.SetMockBehavior(); @@ -83,7 +83,7 @@ public async Task GetPeopleTest() people.Add(user); } - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); mockGraphServiceClient.People = people; mockGraphServiceClient.SetMockBehavior(); @@ -125,7 +125,7 @@ public async Task GetContactsTest() contacts.Add(contact); } - var mockGraphServiceClient = new MockGraphServiceClientGen(); + var mockGraphServiceClient = new MockGraphServiceClient(); mockGraphServiceClient.Contacts = contacts; mockGraphServiceClient.SetMockBehavior(); diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/DeleteEmailFlowTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/DeleteEmailFlowTests.cs index bbd9d2ee41..246a418c43 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/DeleteEmailFlowTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/DeleteEmailFlowTests.cs @@ -4,7 +4,6 @@ using EmailSkill.Dialogs.DeleteEmail.Resources; using EmailSkill.Dialogs.Shared.Resources; using EmailSkillTest.Flow.Fakes; -using EmailSkillTest.Flow.Strings; using EmailSkillTest.Flow.Utterances; using Microsoft.Bot.Schema; using Microsoft.VisualStudio.TestTools.UnitTesting; diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockSkillConfiguration.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockSkillConfiguration.cs index 14410ec3f3..7619a8a988 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockSkillConfiguration.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockSkillConfiguration.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Microsoft.ApplicationInsights; -using Microsoft.Bot.Builder; using Microsoft.Bot.Builder.Azure; using Microsoft.Bot.Solutions; using Microsoft.Bot.Solutions.Skills; diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Strings/ContextStrings.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Strings/ContextStrings.cs index e38b139059..2dcd9e0b11 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Strings/ContextStrings.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Strings/ContextStrings.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace EmailSkillTest.Flow.Strings +namespace EmailSkillTest.Flow.Strings { public class ContextStrings { diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs index 9424b19a55..cf85ae8537 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Luis; using Microsoft.Bot.Builder; using Microsoft.Bot.Builder.AI.Luis; diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/DeleteEmailUtterances.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/DeleteEmailUtterances.cs index 11ef76c287..9118d8ab78 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/DeleteEmailUtterances.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/DeleteEmailUtterances.cs @@ -1,5 +1,4 @@ -using EmailSkillTest.Flow.Strings; -using Luis; +using Luis; namespace EmailSkillTest.Flow.Utterances { diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs index ba5823ba08..c6a32f210a 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Luis; using Microsoft.Bot.Builder; using static Luis.General; From 6131ff3dfd56db2fac41fb9add0aca0b7e09f8ea Mon Sep 17 00:00:00 2001 From: Qiong Wu Date: Tue, 18 Dec 2018 19:15:35 +0800 Subject: [PATCH 2/3] fix style corp --- .../API/Fakes/Google/GmailUtil.cs | 52 +++++ .../Fakes/Google/MockGoogleServiceClient.cs | 56 +++++ .../API/Fakes/Google/MockGoogleUserClient.cs | 34 +++ .../MockListRequest.cs} | 41 +--- .../API/Fakes/Google/MockMessagesResource.cs | 85 ++++++++ .../API/Fakes/Google/MockUsersResource.cs | 34 +++ .../{ => MSGraph}/MockGraphServiceClient.cs | 0 .../API/Fakes/MockEmailStateAccessor.cs | 6 +- .../API/Fakes/MockGoogleServiceClient.cs | 202 ------------------ .../API/Fakes/MockSkillConfiguration.cs | 7 +- .../API/Helper/StepHelperTests.cs | 44 ++-- .../API/Service/GoogleMailServiceTests.cs | 36 ++-- .../API/Service/GoogleUserServiceTests.cs | 10 +- .../API/Service/GraphMailServiceTests.cs | 12 +- .../API/Service/GraphUserServiceTests.cs | 18 +- .../emailskilltest/Flow/EmailBotTestBase.cs | 8 +- .../Flow/Fakes/MockServiceManager.cs | 16 +- .../Flow/ForwardEmailFlowTests.cs | 2 +- .../emailskilltest/Flow/ShowEmailFlowTests.cs | 10 +- .../Flow/Utterances/BaseTestUtterances.cs | 35 +-- .../Flow/Utterances/GeneralTestUtterances.cs | 12 +- 21 files changed, 397 insertions(+), 323 deletions(-) create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/GmailUtil.cs create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleServiceClient.cs create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleUserClient.cs rename solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/{MockGoogleUserClient.cs => Google/MockListRequest.cs} (54%) create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockMessagesResource.cs create mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockUsersResource.cs rename solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/{ => MSGraph}/MockGraphServiceClient.cs (100%) delete mode 100644 solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/GmailUtil.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/GmailUtil.cs new file mode 100644 index 0000000000..4c58671fc0 --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/GmailUtil.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using System.Net.Mail; +using System.Text; +using EmailSkill; +using MimeKit; +using GmailMessage = Google.Apis.Gmail.v1.Data.Message; + +namespace EmailSkillTest.API.Fakes +{ + public class GmailUtil + { + public static IList GetFakeGmailMessageList(int size = 5) + { + var messages = new List(); + + for (int i = 0; i < size; i++) + { + var message = GetFakeGmailMessage(to: "test@test.com" + i); + messages.Add(message); + } + + return messages; + } + + public static GmailMessage GetFakeGmailMessage( + string from = "test@test.com", + string to = "test@test.com", + string subject = "test subject", + string content = "test content") + { + var mess = new MailMessage + { + Subject = subject, + From = new MailAddress(from) + }; + mess.To.Add(new MailAddress(to)); + + var adds = AlternateView.CreateAlternateViewFromString(content, new System.Net.Mime.ContentType("text/plain")); + adds.ContentType.CharSet = Encoding.UTF8.WebName; + mess.AlternateViews.Add(adds); + + var mime = MimeMessage.CreateFromMailMessage(mess); + var gmailMessage = new GmailMessage() + { + Raw = GMailService.Base64UrlEncode(mime.ToString()), + ThreadId = "1" + }; + + return gmailMessage; + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleServiceClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleServiceClient.cs new file mode 100644 index 0000000000..76a4cf4a67 --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleServiceClient.cs @@ -0,0 +1,56 @@ +using Google.Apis.Gmail.v1; +using Moq; +using static Google.Apis.Gmail.v1.UsersResource; +using GmailMessage = Google.Apis.Gmail.v1.Data.Message; + +namespace EmailSkillTest.API.Fakes +{ + public class MockGoogleServiceClient + { + private readonly Mock mockMailService; + private readonly Mock mockMessagesResource; + private readonly Mock mockUsersResource; + + public MockGoogleServiceClient() + { + this.mockMailService = new Mock(); + this.mockMessagesResource = new Mock(mockMailService.Object); + this.mockUsersResource = new Mock(mockMailService.Object); + + this.mockUsersResource.SetupGet(users => users.Messages).Returns(mockMessagesResource.Object); + + this.mockUsersResource.Setup(users => users.GetProfile(It.IsAny())).Returns((string userId) => + { + MockUsersResource.MockGetProfileRequest mockGetProfileRequest = new MockUsersResource.MockGetProfileRequest(this.mockMailService.Object, userId); + return mockGetProfileRequest; + }); + + this.mockMailService.SetupGet(service => service.Users).Returns(mockUsersResource.Object); + + this.mockMessagesResource.Setup(messages => messages.Send(It.IsAny(), It.IsAny())).Returns((GmailMessage body, string userId) => + { + MockMessagesResource.MockSendRequest mockSendRequest = new MockMessagesResource.MockSendRequest(this.mockMailService.Object, body, userId); + return mockSendRequest; + }); + + this.mockMessagesResource.Setup(messages => messages.Get(It.IsAny(), It.IsAny())).Returns((string userId, string id) => + { + MockMessagesResource.MockGetRequest mockGetRequest = new MockMessagesResource.MockGetRequest(this.mockMailService.Object, userId, id); + + return mockGetRequest; + }); + + this.mockMessagesResource.Setup(messages => messages.List(It.IsAny())).Returns((string userId) => + { + MockMessagesResource.MockListRequest mockListRequest = new MockMessagesResource.MockListRequest(this.mockMailService.Object, userId); + + return mockListRequest; + }); + } + + public Mock GetMockGraphServiceClient() + { + return this.mockMailService; + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleUserClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleUserClient.cs new file mode 100644 index 0000000000..48c19059a0 --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockGoogleUserClient.cs @@ -0,0 +1,34 @@ +using System; +using Google.Apis.People.v1; +using Moq; +using static Google.Apis.People.v1.PeopleResource; + +namespace EmailSkillTest.API.Fakes +{ + public static class MockGoogleUserClient + { + private static Mock mockPeopleResource; + private static Mock mockConnectionsResource; + + static MockGoogleUserClient() + { + MockGoogleUserService = new Mock(); + mockPeopleResource = new Mock(MockGoogleUserService.Object); + mockConnectionsResource = new Mock(MockGoogleUserService.Object); + MockGoogleUserService.SetupGet(service => service.People).Returns(mockPeopleResource.Object); + mockPeopleResource.SetupGet(peopleResource => peopleResource.Connections).Returns(mockConnectionsResource.Object); + mockConnectionsResource.Setup(connect => connect.List(It.IsAny())).Returns((string resourceName) => + { + if (resourceName != "people/me") + { + throw new Exception("Resource Name not support"); + } + + MockListRequest mockListRequest = new MockListRequest(MockGoogleUserService.Object, resourceName); + return mockListRequest; + }); + } + + public static Mock MockGoogleUserService { get; set; } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockListRequest.cs similarity index 54% rename from solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs rename to solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockListRequest.cs index f3f66865cd..7a4834b2cb 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleUserClient.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockListRequest.cs @@ -1,46 +1,18 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Google.Apis.People.v1; using Google.Apis.People.v1.Data; using Google.Apis.Requests; using Google.Apis.Services; -using Moq; using static Google.Apis.People.v1.PeopleResource; namespace EmailSkillTest.API.Fakes { - public static class MockGoogleUserClient - { - public static Mock mockGoogleUserService; - public static Mock mockPeopleResource; - public static Mock mockConnectionsResource; - - static MockGoogleUserClient() - { - mockGoogleUserService = new Mock(); - mockPeopleResource = new Mock(mockGoogleUserService.Object); - mockConnectionsResource = new Mock(mockGoogleUserService.Object); - mockGoogleUserService.SetupGet(service => service.People).Returns(mockPeopleResource.Object); - mockPeopleResource.SetupGet(peopleResource => peopleResource.Connections).Returns(mockConnectionsResource.Object); - mockConnectionsResource.Setup(connect => connect.List(It.IsAny())).Returns((string resourceName) => - { - if (resourceName != "people/me") - { - throw new Exception("Resource Name not support"); - } - - MockListRequest mockListRequest = new MockListRequest(mockGoogleUserService.Object, resourceName); - return mockListRequest; - }); - } - } - public class MockListRequest : ConnectionsResource.ListRequest, IClientServiceRequest { - public MockListRequest(IClientService service, string resourceName) : base(service, resourceName) + public MockListRequest(IClientService service, string resourceName) + : base(service, resourceName) { - } public new async Task ExecuteAsync() @@ -50,8 +22,10 @@ public MockListRequest(IClientService service, string resourceName) : base(servi throw new Exception("Resource Name not support"); } - ListConnectionsResponse result = new ListConnectionsResponse(); - result.Connections = new List(); + ListConnectionsResponse result = new ListConnectionsResponse + { + Connections = new List() + }; Person person = new Person() { @@ -60,7 +34,7 @@ public MockListRequest(IClientService service, string resourceName) : base(servi }; person.Names.Add(new Name() { DisplayName = "Jane Doe", GivenName = "Jane", FamilyName = "Doe", DisplayNameLastFirst = "Jane Doe" }); - person.EmailAddresses.Add(new EmailAddress() { Value = "JaneDeo@test.com"} ); + person.EmailAddresses.Add(new EmailAddress() { Value = "JaneDeo@test.com" }); result.Connections.Add(person); person = new Person() @@ -76,6 +50,5 @@ public MockListRequest(IClientService service, string resourceName) : base(servi await Task.CompletedTask; return result; } - } } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockMessagesResource.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockMessagesResource.cs new file mode 100644 index 0000000000..4a0e93dc7d --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockMessagesResource.cs @@ -0,0 +1,85 @@ +using System; +using System.Threading.Tasks; +using EmailSkill; +using Google.Apis.Gmail.v1.Data; +using Google.Apis.Requests; +using Google.Apis.Services; +using static Google.Apis.Gmail.v1.UsersResource; +using GmailMessage = Google.Apis.Gmail.v1.Data.Message; + +namespace EmailSkillTest.API.Fakes +{ + public class MockMessagesResource + { + public class MockSendRequest : MessagesResource.SendRequest, IClientServiceRequest + { + public MockSendRequest(IClientService service, GmailMessage body, string userId) + : base(service, body, userId) + { + this.Body = body; + } + + public GmailMessage Body { get; set; } + + public new Task ExecuteAsync() + { + if (UserId != "me") + { + throw new Exception("User ID not support"); + } + + var mime = GMailService.DecodeToMessage(Body.Raw); + return Task.FromResult(this.Body); + } + } + + public class MockGetRequest : MessagesResource.GetRequest, IClientServiceRequest + { + public MockGetRequest(IClientService service, string userId, string id) + : base(service, userId, id) + { + } + + public new Task ExecuteAsync() + { + if (UserId != "me") + { + throw new Exception("User ID not support"); + } + + return Task.FromResult(GmailUtil.GetFakeGmailMessage()); + } + } + + public class MockListRequest : MessagesResource.ListRequest, IClientServiceRequest + { + public MockListRequest(IClientService service, string userId) + : base(service, userId) + { + } + + public new ListMessagesResponse Execute() + { + var result = new ListMessagesResponse(); + var messageList = GmailUtil.GetFakeGmailMessageList(); + + foreach (var message in messageList) + { + result.Messages.Add(message); + } + + return result; + } + + public new Task ExecuteAsync() + { + var result = new ListMessagesResponse + { + Messages = GmailUtil.GetFakeGmailMessageList() + }; + + return Task.FromResult(result); + } + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockUsersResource.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockUsersResource.cs new file mode 100644 index 0000000000..24d2fb132f --- /dev/null +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/Google/MockUsersResource.cs @@ -0,0 +1,34 @@ +using System; +using Google.Apis.Gmail.v1.Data; +using Google.Apis.Requests; +using Google.Apis.Services; +using static Google.Apis.Gmail.v1.UsersResource; + +namespace EmailSkillTest.API.Fakes +{ + public class MockUsersResource + { + public class MockGetProfileRequest : GetProfileRequest, IClientServiceRequest + { + public MockGetProfileRequest(IClientService service, string userId) + : base(service, userId) + { + } + + public new Profile Execute() + { + if (UserId != "me") + { + throw new Exception("User ID not support"); + } + + var profile = new Profile + { + EmailAddress = "test@test.com" + }; + + return profile; + } + } + } +} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MSGraph/MockGraphServiceClient.cs similarity index 100% rename from solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGraphServiceClient.cs rename to solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MSGraph/MockGraphServiceClient.cs diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockEmailStateAccessor.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockEmailStateAccessor.cs index 2b2b4f177e..26908128df 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockEmailStateAccessor.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockEmailStateAccessor.cs @@ -22,8 +22,10 @@ public MockEmailStateAccessor() public void InitializeDefaultData() { - this.MockEmailSkillState = new EmailSkillState(); - this.MockEmailSkillState.Recipients = new List(); + this.MockEmailSkillState = new EmailSkillState + { + Recipients = new List() + }; } public void SetMockBehavior() diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs deleted file mode 100644 index 8619c71044..0000000000 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockGoogleServiceClient.cs +++ /dev/null @@ -1,202 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net.Mail; -using System.Text; -using System.Threading.Tasks; -using EmailSkill; -using Google.Apis.Gmail.v1; -using Google.Apis.Gmail.v1.Data; -using Google.Apis.Requests; -using Google.Apis.Services; -using MimeKit; -using Moq; -using static Google.Apis.Gmail.v1.UsersResource; -using GmailMessage = Google.Apis.Gmail.v1.Data.Message; - -namespace EmailSkillTest.API.Fakes -{ - public class MockGoogleServiceClient - { - private readonly Mock mockMailService; - private readonly Mock mockMessagesResource; - private readonly Mock mockUsersResource; - - public MockGoogleServiceClient() - { - this.mockMailService = new Mock(); - this.mockMessagesResource = new Mock(mockMailService.Object); - this.mockUsersResource = new Mock(mockMailService.Object); - - this.mockUsersResource.SetupGet(users => users.Messages).Returns(mockMessagesResource.Object); - - this.mockUsersResource.Setup(users => users.GetProfile(It.IsAny())).Returns((string userId) => - { - MockUsersResource.MockGetProfileRequest mockGetProfileRequest = new MockUsersResource.MockGetProfileRequest(this.mockMailService.Object, userId); - return mockGetProfileRequest; - }); - - this.mockMailService.SetupGet(service => service.Users).Returns(mockUsersResource.Object); - - this.mockMessagesResource.Setup(messages => messages.Send(It.IsAny(), It.IsAny())).Returns((GmailMessage body, string userId) => - { - MockMessagesResource.MockSendRequest mockSendRequest = new MockMessagesResource.MockSendRequest(this.mockMailService.Object, body, userId); - return mockSendRequest; - }); - - this.mockMessagesResource.Setup(messages => messages.Get(It.IsAny(), It.IsAny())).Returns((string userId, string id) => - { - MockMessagesResource.MockGetRequest mockGetRequest = new MockMessagesResource.MockGetRequest(this.mockMailService.Object, userId, id); - - return mockGetRequest; - }); - - this.mockMessagesResource.Setup(messages => messages.List(It.IsAny())).Returns((string userId) => - { - MockMessagesResource.MockListRequest mockListRequest = new MockMessagesResource.MockListRequest(this.mockMailService.Object, userId); - - return mockListRequest; - }); - } - - public Mock GetMockGraphServiceClient() - { - return this.mockMailService; - } - } - - public class MockUsersResource - { - public class MockGetProfileRequest : GetProfileRequest, IClientServiceRequest - { - public MockGetProfileRequest(IClientService service, string userId) - : base(service, userId) - { - } - - public new Profile Execute() - { - if (UserId != "me") - { - throw new Exception("User ID not support"); - } - - var profile = new Profile(); - profile.EmailAddress = "test@test.com"; - - return profile; - } - } - } - - public class MockMessagesResource - { - public class MockSendRequest : MessagesResource.SendRequest, IClientServiceRequest - { - public MockSendRequest(IClientService service, GmailMessage body, string userId) - : base(service, body, userId) - { - this.Body = body; - } - - public GmailMessage Body { get; set; } - - public new Task ExecuteAsync() - { - if (UserId != "me") - { - throw new Exception("User ID not support"); - } - - return Task.FromResult(this.Body); - } - } - - public class MockGetRequest : MessagesResource.GetRequest, IClientServiceRequest - { - public MockGetRequest(IClientService service, string userId, string id) - : base(service, userId, id) - { - } - - public new Task ExecuteAsync() - { - if (UserId != "me") - { - throw new Exception("User ID not support"); - } - - return Task.FromResult(GmailUtil.GetFakeGmailMessage()); - } - } - - public class MockListRequest : MessagesResource.ListRequest, IClientServiceRequest - { - public MockListRequest(IClientService service, string userId) - : base(service, userId) - { - } - - public new ListMessagesResponse Execute() - { - var result = new ListMessagesResponse(); - var messageList = GmailUtil.GetFakeGmailMessageList(); - - foreach (var message in messageList) - { - result.Messages.Add(message); - } - - return result; - } - - public new Task ExecuteAsync() - { - var result = new ListMessagesResponse(); - result.Messages = GmailUtil.GetFakeGmailMessageList(); - - return Task.FromResult(result); - } - } - } - - public class GmailUtil - { - public static IList GetFakeGmailMessageList(int size = 5) - { - var messages = new List(); - - for (int i = 0; i < size; i++) - { - var message = GetFakeGmailMessage(to: "test@test.com" + i); - messages.Add(message); - } - - return messages; - } - - public static GmailMessage GetFakeGmailMessage( - string from = "test@test.com", - string to = "test@test.com", - string subject = "test subject", - string content = "test content") - { - var mess = new MailMessage(); - mess.Subject = subject; - mess.From = new MailAddress(from); - mess.To.Add(new MailAddress(to)); - - var adds = AlternateView.CreateAlternateViewFromString(content, new System.Net.Mime.ContentType("text/plain")); - adds.ContentType.CharSet = Encoding.UTF8.WebName; - mess.AlternateViews.Add(adds); - - var mime = MimeMessage.CreateFromMailMessage(mess); - var gmailMessage = new GmailMessage() - { - Raw = GMailService.Base64UrlEncode(mime.ToString()), - ThreadId = "1" - }; - - return gmailMessage; - } - } -} diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs index dd70894b8e..ea4400a6f9 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Fakes/MockSkillConfiguration.cs @@ -11,9 +11,10 @@ public MockSkillConfiguration() { this.TelemetryClient = null; this.CosmosDbOptions = null; - this.AuthenticationConnections = new Dictionary(); - - this.AuthenticationConnections.Add("Google", "Google"); + this.AuthenticationConnections = new Dictionary + { + { "Google", "Google" } + }; } public override Dictionary AuthenticationConnections { get; set; } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Helper/StepHelperTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Helper/StepHelperTests.cs index 0ca36726b1..f41eb4986a 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Helper/StepHelperTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Helper/StepHelperTests.cs @@ -38,8 +38,10 @@ public static void ClassInit(TestContext context) public async Task GetNameListStringTest_OneOption() { // Mock data - mockEmailStateAccessor.MockEmailSkillState = new EmailSkillState(); - mockEmailStateAccessor.MockEmailSkillState.Recipients = GetRecipients(1); + mockEmailStateAccessor.MockEmailSkillState = new EmailSkillState + { + Recipients = GetRecipients(1) + }; mockEmailStateAccessor.SetMockBehavior(); EmailStateAccessor = mockEmailStateAccessor.GetMock().Object; @@ -52,8 +54,10 @@ public async Task GetNameListStringTest_OneOption() public async Task GetNameListStringTest_TwoOptions() { // Mock data - mockEmailStateAccessor.MockEmailSkillState = new EmailSkillState(); - mockEmailStateAccessor.MockEmailSkillState.Recipients = GetRecipients(2); + mockEmailStateAccessor.MockEmailSkillState = new EmailSkillState + { + Recipients = GetRecipients(2) + }; mockEmailStateAccessor.SetMockBehavior(); EmailStateAccessor = mockEmailStateAccessor.GetMock().Object; @@ -66,8 +70,10 @@ public async Task GetNameListStringTest_TwoOptions() public async Task GetNameListStringTest_ThreeOptions() { // Mock data - mockEmailStateAccessor.MockEmailSkillState = new EmailSkillState(); - mockEmailStateAccessor.MockEmailSkillState.Recipients = GetRecipients(3); + mockEmailStateAccessor.MockEmailSkillState = new EmailSkillState + { + Recipients = GetRecipients(3) + }; mockEmailStateAccessor.SetMockBehavior(); EmailStateAccessor = mockEmailStateAccessor.GetMock().Object; @@ -98,10 +104,14 @@ private List GetRecipients(int count) for (int i = 0; i < count; i++) { - var recipient = new Recipient(); - recipient.EmailAddress = new EmailAddress(); - recipient.EmailAddress.Name = "test" + i.ToString(); - recipient.EmailAddress.Address = "test" + i.ToString() + "@test.com"; + var recipient = new Recipient + { + EmailAddress = new EmailAddress + { + Name = "test" + i.ToString(), + Address = "test" + i.ToString() + "@test.com" + } + }; result.Add(recipient); } @@ -116,13 +126,17 @@ private List GetPersonLists(int start, int end) for (int i = start; i < end; i++) { var emailList = new List(); - var scoredEmailAddress = new ScoredEmailAddress(); - scoredEmailAddress.Address = "test" + i.ToString() + "@test.com"; + var scoredEmailAddress = new ScoredEmailAddress + { + Address = "test" + i.ToString() + "@test.com" + }; emailList.Add(scoredEmailAddress); - var person = new Person(); - person.DisplayName = "test" + i.ToString(); - person.ScoredEmailAddresses = emailList; + var person = new Person + { + DisplayName = "test" + i.ToString(), + ScoredEmailAddresses = emailList + }; result.Add(person); } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs index c164d2ad66..e343872e0a 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleMailServiceTests.cs @@ -11,55 +11,59 @@ namespace EmailSkillTest.API [TestClass] public class GoogleMailServiceTests { - public static IMailService mailService; + public static IMailService MailService { get; set; } [ClassInitialize] public static void ClassInit(TestContext context) { var mockGoogleServiceClient = new MockGoogleServiceClient(); - mailService = new GMailService(mockGoogleServiceClient.GetMockGraphServiceClient().Object); + MailService = new GMailService(mockGoogleServiceClient.GetMockGraphServiceClient().Object); } [TestMethod] public async Task ForwardMessageTest() { - List recipients = new List(); - recipients.Add(new Recipient() + List recipients = new List { - EmailAddress = new EmailAddress() + new Recipient() { - Address = "test@test.com" + EmailAddress = new EmailAddress() + { + Address = "test@test.com" + } } - }); + }; - await mailService.ForwardMessageAsync("1", "Test", recipients); + await MailService.ForwardMessageAsync("1", "Test", recipients); } [TestMethod] public async Task SendMessageTest() { - List recipients = new List(); - recipients.Add(new Recipient() + List recipients = new List { - EmailAddress = new EmailAddress() + new Recipient() { - Address = "test@test.com" + EmailAddress = new EmailAddress() + { + Address = "test@test.com" + } } - }); + }; - await mailService.SendMessageAsync("test content", "test subject", recipients); + await MailService.SendMessageAsync("test content", "test subject", recipients); } [TestMethod] public async Task ReplyMessageTest() { - await mailService.ReplyToMessageAsync("1", "test content"); + await MailService.ReplyToMessageAsync("1", "test content"); } [TestMethod] public async Task GetMessagesTest() { - var messageList = await mailService.GetMyMessagesAsync(DateTime.Now, DateTime.Now.AddDays(7), false, false, false, null, 0); + var messageList = await MailService.GetMyMessagesAsync(DateTime.Now, DateTime.Now.AddDays(7), false, false, false, null, 0); Assert.AreEqual(messageList.Count, 5); } } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs index ba0e070244..bf8f904c08 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GoogleUserServiceTests.cs @@ -10,12 +10,12 @@ namespace EmailSkillTest.API [TestClass] public class GoogleUserServiceTests { - public static IUserService userService; + public static IUserService UserService { get; set; } [ClassInitialize] public static void ClassInit(TestContext context) { - userService = new GooglePeopleService(MockGoogleUserClient.mockGoogleUserService.Object); + UserService = new GooglePeopleService(MockGoogleUserClient.MockGoogleUserService.Object); } [ClassCleanup] @@ -36,21 +36,21 @@ public void TestCleanup() [TestMethod] public async Task GetPeopleAsyncTest() { - List result = await userService.GetPeopleAsync("Doe"); + List result = await UserService.GetPeopleAsync("Doe"); Assert.IsTrue(result.Count == 2); } [TestMethod] public async Task GetUserAsyncTest() { - List result = await userService.GetUserAsync("Doe"); + List result = await UserService.GetUserAsync("Doe"); Assert.IsTrue(result.Count == 0); } [TestMethod] public async Task GetContactsAsyncTest() { - List result = await userService.GetContactsAsync("Doe"); + List result = await UserService.GetContactsAsync("Doe"); Assert.IsTrue(result.Count == 0); } } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs index 3a5dbe2fbf..fbfa649bfb 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphMailServiceTests.cs @@ -28,8 +28,10 @@ public async Task SendMessageTest() recipient.EmailAddress.Address = "test@test.com"; recipient.EmailAddress.Name = "Test Test"; - List recipientList = new List(); - recipientList.Add(recipient); + List recipientList = new List + { + recipient + }; var mockGraphServiceClient = new MockGraphServiceClient(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; @@ -77,8 +79,10 @@ public async Task GetMyMessagesTest() messages.Add(message); } - var mockGraphServiceClient = new MockGraphServiceClient(); - mockGraphServiceClient.MyMessages = messages; + var mockGraphServiceClient = new MockGraphServiceClient + { + MyMessages = messages + }; mockGraphServiceClient.SetMockBehavior(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; MSGraphMailAPI mailService = new MSGraphMailAPI(serviceClient, timeZoneInfo: TimeZoneInfo.Local); diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs index 906b3b0c33..cb75265eea 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/API/Service/GraphUserServiceTests.cs @@ -39,8 +39,10 @@ public async Task GetUserTest() users.Add(user); } - var mockGraphServiceClient = new MockGraphServiceClient(); - mockGraphServiceClient.Users = users; + var mockGraphServiceClient = new MockGraphServiceClient + { + Users = users + }; mockGraphServiceClient.SetMockBehavior(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; @@ -83,8 +85,10 @@ public async Task GetPeopleTest() people.Add(user); } - var mockGraphServiceClient = new MockGraphServiceClient(); - mockGraphServiceClient.People = people; + var mockGraphServiceClient = new MockGraphServiceClient + { + People = people + }; mockGraphServiceClient.SetMockBehavior(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; @@ -125,8 +129,10 @@ public async Task GetContactsTest() contacts.Add(contact); } - var mockGraphServiceClient = new MockGraphServiceClient(); - mockGraphServiceClient.Contacts = contacts; + var mockGraphServiceClient = new MockGraphServiceClient + { + Contacts = contacts + }; mockGraphServiceClient.SetMockBehavior(); IGraphServiceClient serviceClient = mockGraphServiceClient.GetMockGraphServiceClient().Object; diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/EmailBotTestBase.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/EmailBotTestBase.cs index 9d576d395d..8285d38b00 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/EmailBotTestBase.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/EmailBotTestBase.cs @@ -56,9 +56,11 @@ public override void Initialize() public Activity GetAuthResponse() { - ProviderTokenResponse providerTokenResponse = new ProviderTokenResponse(); - providerTokenResponse.TokenResponse = new TokenResponse(token: "test"); - providerTokenResponse.AuthenticationProvider = OAuthProvider.AzureAD; + ProviderTokenResponse providerTokenResponse = new ProviderTokenResponse + { + TokenResponse = new TokenResponse(token: "test"), + AuthenticationProvider = OAuthProvider.AzureAD + }; return new Activity(ActivityTypes.Event, name: "tokens/response", value: providerTokenResponse); } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockServiceManager.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockServiceManager.cs index 796158218f..2f69a4797d 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockServiceManager.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Fakes/MockServiceManager.cs @@ -5,24 +5,24 @@ namespace EmailSkillTest.Flow.Fakes { public class MockServiceManager : IServiceManager { - public MockMailService MockMailService; - - public MockUserService MockUserService; - public MockServiceManager() { - MockMailService = new MockMailService(); - MockUserService = new MockUserService(); + MailService = new MockMailService(); + UserService = new MockUserService(); } + public MockMailService MailService { get; set; } + + public MockUserService UserService { get; set; } + public IMailService InitMailService(string token, TimeZoneInfo timeZoneInfo, MailSource mailSource) { - return MockMailService; + return MailService; } public IUserService InitUserService(string token, TimeZoneInfo timeZoneInfo, MailSource mailSource) { - return MockUserService; + return UserService; } } } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ForwardEmailFlowTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ForwardEmailFlowTests.cs index 9d53251d36..6cacfb0336 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ForwardEmailFlowTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ForwardEmailFlowTests.cs @@ -105,7 +105,7 @@ public async Task Test_ForwardEmailWhenNoEmailIsShown() { // Setup email data var serviceManager = this.ServiceManager as MockServiceManager; - serviceManager.MockMailService.MyMessages = serviceManager.MockMailService.FakeMyMessages(0); + serviceManager.MailService.MyMessages = serviceManager.MailService.FakeMyMessages(0); await this.GetTestFlow() .Send(ForwardEmailUtterances.ForwardEmails) diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ShowEmailFlowTests.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ShowEmailFlowTests.cs index eac6057cc9..93ba0f03e4 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ShowEmailFlowTests.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/ShowEmailFlowTests.cs @@ -51,10 +51,10 @@ public async Task Test_ShowEmailFromSomeone() { // Setup email data var serviceManager = this.ServiceManager as MockServiceManager; - serviceManager.MockMailService.MyMessages = serviceManager.MockMailService.FakeMyMessages(); + serviceManager.MailService.MyMessages = serviceManager.MailService.FakeMyMessages(); - var message = serviceManager.MockMailService.FakeMessage(senderName: ContextStrings.TestRecipient, senderAddress: ContextStrings.TestEmailAdress); - serviceManager.MockMailService.MyMessages.Add(message); + var message = serviceManager.MailService.FakeMessage(senderName: ContextStrings.TestRecipient, senderAddress: ContextStrings.TestEmailAdress); + serviceManager.MailService.MyMessages.Add(message); await this.GetTestFlow() .Send(ShowEmailUtterances.ShowEmailsFromTestRecipient) @@ -339,7 +339,7 @@ public async Task Test_ShowEmailWithZeroItem() { // Setup email data var serviceManager = this.ServiceManager as MockServiceManager; - serviceManager.MockMailService.MyMessages = serviceManager.MockMailService.FakeMyMessages(0); + serviceManager.MailService.MyMessages = serviceManager.MailService.FakeMyMessages(0); await this.GetTestFlow() .Send(ShowEmailUtterances.ShowEmails) @@ -355,7 +355,7 @@ public async Task Test_ShowEmailWithOneItem() { // Setup email data var serviceManager = this.ServiceManager as MockServiceManager; - serviceManager.MockMailService.MyMessages = serviceManager.MockMailService.FakeMyMessages(1); + serviceManager.MailService.MyMessages = serviceManager.MailService.FakeMyMessages(1); await this.GetTestFlow() .Send(ShowEmailUtterances.ShowEmails) diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs index cf85ae8537..642cf9b170 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/BaseTestUtterances.cs @@ -43,8 +43,10 @@ public void AddManager(BaseTestUtterances utterances) public Email GetBaseNoneIntent() { - var emailIntent = new Email(); - emailIntent.Intents = new Dictionary(); + var emailIntent = new Email + { + Intents = new Dictionary() + }; emailIntent.Intents.Add(Intent.None, new IntentScore() { Score = TopIntentScore }); return emailIntent; @@ -61,22 +63,25 @@ protected Email CreateIntent( string[] subject = null, string[] message = null) { - var emailIntent = new Email(); - - emailIntent.Text = userInput; + var emailIntent = new Email + { + Text = userInput, - emailIntent.Intents = new Dictionary(); + Intents = new Dictionary() + }; emailIntent.Intents.Add(intent, new IntentScore() { Score = TopIntentScore }); - emailIntent.Entities = new _Entities(); - emailIntent.Entities._instance = new _Entities._Instance(); - - emailIntent.Entities.ordinal = ordinal; - emailIntent.Entities.number = number; - emailIntent.Entities.ContactName = contactName; - emailIntent.Entities.SenderName = senderName; - emailIntent.Entities.EmailSubject = subject; - emailIntent.Entities.Message = message; + emailIntent.Entities = new _Entities + { + _instance = new _Entities._Instance(), + + ordinal = ordinal, + number = number, + ContactName = contactName, + SenderName = senderName, + EmailSubject = subject, + Message = message + }; if (!string.IsNullOrEmpty(userInput)) { diff --git a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs index c6a32f210a..20f5aac06b 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/tests/emailskilltest/Flow/Utterances/GeneralTestUtterances.cs @@ -33,8 +33,10 @@ public GeneralTestUtterances() public General GetBaseNoneIntent() { - var generalIntent = new General(); - generalIntent.Intents = new Dictionary(); + var generalIntent = new General + { + Intents = new Dictionary() + }; generalIntent.Intents.Add(Intent.None, new IntentScore() { Score = TopIntentScore }); return generalIntent; @@ -42,8 +44,10 @@ public General GetBaseNoneIntent() protected General CreateIntent(Intent intent) { - var generalIntent = new General(); - generalIntent.Intents = new Dictionary(); + var generalIntent = new General + { + Intents = new Dictionary() + }; generalIntent.Intents.Add(intent, new IntentScore() { Score = TopIntentScore }); generalIntent.Entities = new _Entities(); From da9d629b5e5c8f9d09195ec082ee2c1c18da8f6f Mon Sep 17 00:00:00 2001 From: Qiong Wu Date: Tue, 18 Dec 2018 19:30:37 +0800 Subject: [PATCH 3/3] fix style corp --- .../Dialogs/Shared/EmailSkillDialog.cs | 10 +- .../ServiceClients/GoogleAPI/GMailService.cs | 101 +++++++++--------- 2 files changed, 59 insertions(+), 52 deletions(-) diff --git a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/Dialogs/Shared/EmailSkillDialog.cs b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/Dialogs/Shared/EmailSkillDialog.cs index 871b0ee2a1..e7137881db 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/Dialogs/Shared/EmailSkillDialog.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/Dialogs/Shared/EmailSkillDialog.cs @@ -1311,10 +1311,12 @@ protected async Task HandleDialogExceptions(WaterfallStepContext sc, SkillExcept private IDictionary AssembleTelemetryData(WaterfallStepContext sc) { - var telemetryData = new Dictionary(); - telemetryData.Add("activityId", sc.Context.Activity.Id); - telemetryData.Add("userId", sc.Context.Activity.From.Id); - telemetryData.Add("activeDialog", sc.ActiveDialog.ToString()); + var telemetryData = new Dictionary + { + { "activityId", sc.Context.Activity.Id }, + { "userId", sc.Context.Activity.From.Id }, + { "activeDialog", sc.ActiveDialog.ToString() } + }; return telemetryData; } diff --git a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs index 5fcc234cfe..953050fb95 100644 --- a/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs +++ b/solutions/Virtual-Assistant/src/csharp/skills/emailskill/ServiceClients/GoogleAPI/GMailService.cs @@ -30,7 +30,7 @@ namespace EmailSkill public class GMailService : IMailService { private static GmailService service; - private int pageSize; + private readonly int pageSize; private string pageToken = string.Empty; /// @@ -74,6 +74,48 @@ public static GmailService GetServiceClient(GoogleClient config, string token) return service; } + public static string Base64UrlEncode(string text) + { + var textBytes = Encoding.UTF8.GetBytes(text); + + var result = System.Convert.ToBase64String(textBytes); + result = result.Split('=')[0]; // Remove any trailing '='s + result = result.Replace('+', '-'); // 62nd char of encoding + result = result.Replace('/', '_'); // 63rd char of encoding + return result; + } + + // decode from base64url to utf-8 bytes + public static byte[] Base64UrlDecode(string text) + { + string result = text; + result = result.Replace('-', '+'); // 62nd char of encoding + result = result.Replace('_', '/'); // 63rd char of encoding + + // Pad with trailing '='s + switch (result.Length % 4) + { + case 0: break; // No pad chars in this case + case 2: result += "=="; break; // Two pad chars + case 3: result += "="; break; // One pad char + default: + throw new System.Exception( + "Illegal base64url string!"); + } + + byte[] textBytes = Convert.FromBase64String(result); + return textBytes; + } + + // decode to mimeMessage + public static MimeMessage DecodeToMessage(string text) + { + byte[] msg = Base64UrlDecode(text); + MemoryStream mm = new MemoryStream(msg); + MimeKit.MimeMessage mime = MimeKit.MimeMessage.Load(mm); + return mime; + } + /// public async Task ForwardMessageAsync(string id, string content, List recipients) { @@ -146,9 +188,12 @@ public async Task SendMessageAsync(string content, string subject, List)profileRequest).Execute(); - var mess = new MailMessage(); - mess.Subject = subject; - mess.From = new MailAddress(user.EmailAddress); + var mess = new MailMessage + { + Subject = subject, + From = new MailAddress(user.EmailAddress) + }; + foreach (var re in recipients) { mess.To.Add(new MailAddress(re.EmailAddress.Address)); @@ -364,48 +409,6 @@ public string AppendFilterString(string old, string filterString) return result; } - public static string Base64UrlEncode(string text) - { - var textBytes = Encoding.UTF8.GetBytes(text); - - var result = System.Convert.ToBase64String(textBytes); - result = result.Split('=')[0]; // Remove any trailing '='s - result = result.Replace('+', '-'); // 62nd char of encoding - result = result.Replace('/', '_'); // 63rd char of encoding - return result; - } - - // decode from base64url to utf-8 bytes - public static byte[] Base64UrlDecode(string text) - { - string result = text; - result = result.Replace('-', '+'); // 62nd char of encoding - result = result.Replace('_', '/'); // 63rd char of encoding - - // Pad with trailing '='s - switch (result.Length % 4) - { - case 0: break; // No pad chars in this case - case 2: result += "=="; break; // Two pad chars - case 3: result += "="; break; // One pad char - default: - throw new System.Exception( - "Illegal base64url string!"); - } - - byte[] textBytes = Convert.FromBase64String(result); - return textBytes; - } - - // decode to mimeMessage - public static MimeMessage DecodeToMessage(string text) - { - byte[] msg = Base64UrlDecode(text); - MemoryStream mm = new MemoryStream(msg); - MimeKit.MimeMessage mime = MimeKit.MimeMessage.Load(mm); - return mime; - } - private async Task<(MimeMessage, string)> GetMessageById(string id) { var request = service.Users.Messages.Get("me", id); @@ -417,8 +420,10 @@ public static MimeMessage DecodeToMessage(string text) private MSMessage MapMimeMessageToMSMessage(MimeMessage mime) { - MSMessage message = new MSMessage(); - message.ReceivedDateTime = mime.Date; + MSMessage message = new MSMessage + { + ReceivedDateTime = mime.Date + }; if (mime.To != null) { var to = new List();