Пример #1
0
        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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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();
        }