public async Task TestVisitMessages() { using var kernel = new FakeItEasyMockingKernel(); kernel.Rebind <ILogger>().ToConstant(Log.Logger); kernel.Rebind <Configuration>().ToConstant(config); kernel.Rebind <ImapConnectionFactory>().ToSelf().InSingletonScope(); kernel.Rebind <ITeamsChatStore>().To <ImapStore>().InSingletonScope(); var conFac = kernel.Get <ImapConnectionFactory>(); var logger = kernel.Get <ILogger>(); var imapStore = kernel.Get <ITeamsChatStore>(); var imapClient = await conFac.GetImapConnectionAsync(); var rootFolder = await imapClient.GetFolderAsync(imapClient.PersonalNamespaces[0].Path); var mainUserFolder = await rootFolder.CreateAsync(fakeContext.MainUserId.Id.MakeSafeFolderName(rootFolder.DirectorySeparator), false); var tenantFolder = await mainUserFolder.CreateAsync("Fake Tenant", false); var chatsFolder = await tenantFolder.CreateAsync(Constants.TenantChatsFolderName, false); var chatFolder = await chatsFolder.CreateAsync("chat title or someting", false); await chatFolder.OpenAsync(MailKit.FolderAccess.ReadWrite); var message = new MimeMessage(); message.From.Add(new MailboxAddress(Constants.AppName, Constants.AppFakeEmail)); message.To.Add(new MailboxAddress(Constants.AppName, Constants.AppFakeEmail)); message.Subject = "Delete me User {{00000000-0000-beef-0000-000000000000}}"; var kvStore = new EmailBackedKeyValueStore(logger, message); kvStore.Set("originalMessage", new Message() { version = "123", content = "message content" }); var id = await chatFolder.AppendAsync(message); await imapStore.VisitMissingUserDisplayNames(fakeContext, async message => { message.MessageSubject = "Delete me - Changed subject"; message.TextContent = "new text content"; message.HtmlContent = "new html content"; return(await Task.FromResult((true, new List <string>()))); }); var newId = (await chatFolder.SearchAsync(SearchQuery.All)).First(); var changedMessage = await chatFolder.GetMessageAsync(newId); Assert.AreEqual("Delete me - Changed subject", changedMessage.Subject); await chatFolder.SetFlagsAsync(newId, MailKit.MessageFlags.Deleted, true); await chatFolder.ExpungeAsync(); }
public void TestWriteAndReadValue() { var store = new EmailBackedKeyValueStore(null, "store key", "message subject"); var testObject = new TestData() { Data = "the data" }; store.Set("my key", testObject); var readValue = store.GetOrCreateEmpty <TestData>("my key"); Assert.AreEqual("the data", readValue.AsObject?.Data); }
public void TestForceNullDefaultValue() { var store = new EmailBackedKeyValueStore(null, "store key", "message subject"); var testObject = new TestData() { Data = "the data" }; store.Set("my key", testObject); var readValue = store.GetOrCreateEmpty <TestData?>("unknown key", () => default); Assert.IsNull(readValue.AsObject); Assert.AreEqual("null", readValue.AsString); }
public void TestComplexValue() { var store = new EmailBackedKeyValueStore(null, "store key", "message subject"); var testObject = new ProcessedTeamsUser(new TeamsDataContext((TeamsParticipant)"8:orgid:00000000-0000-beef-0000-000000000000", new ProcessedTenant(new TeamsInternal.TeamsInternalApi.api.mt.emea.beta.users.Tenant() { tenantName = "Test Tenant" }, DateTime.Now)), (TeamsParticipant)"8:orgid:00000000-0000-beef-0000-000000000000") { State = ProcessedTeamsUser.TeamsUserState.MissingFromTenant }; store.Set("my key", testObject); var readValue = store.GetOrCreateEmpty <ProcessedTeamsUser>("my key"); Assert.AreEqual(ProcessedTeamsUser.TeamsUserState.MissingFromTenant, readValue.AsObject?.State); Assert.AreEqual("8:orgid:00000000-0000-beef-0000-000000000000", readValue.AsObject?.DataContext.MainUserId.Mri); Assert.AreEqual("00000000-0000-beef-0000-000000000000", readValue.AsObject?.DataContext.MainUserId.Id); Assert.AreEqual(ParticipantKind.User, readValue.AsObject?.DataContext.MainUserId.Kind); Assert.AreEqual("Test Tenant", readValue.AsObject?.DataContext.Tenant.TenantName); }
public void TestDefaultValues() { var store = new EmailBackedKeyValueStore(null, "store key", "message subject"); var objectValue = store.GetOrCreateEmpty <TestData>("unknown key"); Assert.IsNotNull(objectValue.AsObject); Assert.AreEqual(@"{""Data"":""""}", objectValue.AsString); var intValue = store.GetOrCreateEmpty <int>("unknown key"); Assert.AreEqual(@"0", intValue.AsString); var stringValue = store.GetOrCreateEmpty <string>("unknown key"); Assert.AreEqual(@"""""", stringValue.AsString); var listValue = store.GetOrCreateEmpty <List <int> >("unknown key"); Assert.IsNotNull(listValue.AsObject); Assert.AreEqual(@"[]", listValue.AsString); }
public void TestTextAndHtmlContent() { var store = new EmailBackedKeyValueStore(null, "store key", "message subject"); var testObject = new ProcessedTeamsUser(new TeamsDataContext((TeamsParticipant)"8:orgid:00000000-0000-beef-0000-000000000000", new ProcessedTenant(new TeamsInternal.TeamsInternalApi.api.mt.emea.beta.users.Tenant() { tenantName = "Test Tenant" }, DateTime.Now)), (TeamsParticipant)"8:orgid:00000000-0000-beef-0000-000000000000") { State = ProcessedTeamsUser.TeamsUserState.MissingFromTenant }; store.Set("my key", testObject); store.SetTextContent("i am a text"); store.SetHtmlContent("i am HTML"); Assert.AreEqual("i am a text", store.GetTextContent()); Assert.AreEqual("i am HTML", store.GetHtmlContent()); var attachments = new MimeKit.AttachmentCollection(); using (var stream = new MemoryStream()) { stream.Write(Encoding.UTF8.GetBytes("i am an attachment")); stream.Position = 0; attachments.Add("test.txt", stream); } store.AddAttachments(attachments); Assert.AreEqual(1, store.MessageAndId.Message?.Attachments.Count()); using (var debugStream = new MemoryStream()) { store.MessageAndId.Message?.WriteTo(debugStream); var s = Encoding.ASCII.GetString(debugStream.ToArray()); } var readValue = store.GetOrCreateEmpty <ProcessedTeamsUser>("my key"); Assert.AreEqual("8:orgid:00000000-0000-beef-0000-000000000000", readValue.AsObject?.DataContext.MainUserId.Mri); }
public async Task TestModifyingExistingMessage() { using var kernel = new FakeItEasyMockingKernel(); kernel.Rebind <ILogger>().ToConstant(Log.Logger); kernel.Rebind <Configuration>().ToConstant(config); kernel.Rebind <ImapConnectionFactory>().ToSelf().InSingletonScope(); var conFac = kernel.Get <ImapConnectionFactory>(); var logger = kernel.Get <ILogger>(); var imapClient = await conFac.GetImapConnectionAsync(); var folder = imapClient.Inbox; await folder.OpenAsync(MailKit.FolderAccess.ReadWrite); var message = new MimeMessage(); message.From.Add(new MailboxAddress(Constants.AppName, Constants.AppFakeEmail)); message.To.Add(new MailboxAddress(Constants.AppName, Constants.AppFakeEmail)); message.Subject = "Delete me"; var id = await folder.AppendAsync(message); var readMessage = await folder.GetMessageAsync(id.Value); var kvStore = new EmailBackedKeyValueStore(logger, readMessage); kvStore.SetTextContent("test text"); kvStore.SetHtmlContent("<div>test html</div>"); kvStore.SetJson("jsonValue", "{}"); kvStore.Set("object", new { Data = "test data" }); var newId = await folder.ReplaceAsync(id.Value, readMessage); Assert.IsTrue(newId.HasValue); await folder.SetFlagsAsync(newId.Value, MailKit.MessageFlags.Deleted, true); await folder.ExpungeAsync(); }