// NOTE: To run this test you must be running the Azure Storage Emulator locally // You can download it here: https://go.microsoft.com/fwlink/?linkid=717179&clcid=0x409 public async Task TableLoggerTest() { var tableName = "TableLoggerTestActivities"; var account = CloudStorageAccount.DevelopmentStorageAccount; account.CreateCloudTableClient().GetTableReference(tableName).DeleteIfExists(); var builder = new ContainerBuilder(); builder.RegisterModule(new TableLoggerModule(account, tableName)); var container = builder.Build(); var logger = container.Resolve <IActivityLogger>(); var source = container.Resolve <IActivitySource>(); var manager = container.Resolve <IActivityManager>(); // Message bigger than one block var chars = new char[100000]; var rand = new Random(); for (var i = 0; i < chars.Length; ++i) { chars[i] = (char)('0' + rand.Next(74)); } var activities = new List <IActivity> { ToBot("Hi"), ToUser("Welcome to the bot"), ToBot("Weather"), ToUser("or not"), // Make sure auto-increment works ToUser("right away", increment: 0), // Bigger than one property ToUser(new string(chars)), ToUser("another conversation", conversation: "conversation2"), ToUser("somewhere else", channel: "channel2"), MakeActivity("to someone else", to: "user2"), MakeActivity("from someone else", from: "user2"), MakeActivity("to someone else in another conversation", to: "user2", conversation: "conversation3"), MakeActivity("from someone else on another channel", from: "user2", channel: "channel3"), ToBot("sometime later", increment: 180) }; var comparator = new CompareActivity(); for (var i = 0; i < activities.Count; ++i) { await logger.LogAsync(activities[i]); var oldest = _lastActivity.AddSeconds(-30); AssertEqual(Filter(activities, oldest: oldest, take: i + 1), source.Activities(_defaultChannel, _defaultConversation, oldest)); } var conversation = Filter(activities); AssertEqual(conversation, source.Activities(_defaultChannel, _defaultConversation)); AssertEqual(Filter(activities, channel: "channel2"), source.Activities("channel2", "conversation1")); AssertEqual(Filter(activities, conversation: "conversation2"), source.Activities(_defaultChannel, "conversation2")); var transcript = new List <string>(); foreach (var activity in conversation) { var msg = activity as IMessageActivity; if (msg != null) { transcript.Add($"({msg.From.Name} {msg.Timestamp:g})"); transcript.Add($"{msg.Text}"); } } int j = 0; var botToUser = new Mock <IBotToUser>(); botToUser .Setup(p => p.PostAsync(It.IsAny <IMessageActivity>(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask) .Callback((IMessageActivity activity, CancellationToken cancel) => Assert.AreEqual(transcript[j++], activity.Text)); botToUser .Setup(p => p.MakeMessage()) .Returns(new Activity()); var replay = new ReplayTranscript(botToUser.Object); await source.WalkActivitiesAsync(replay.Replay, _defaultChannel, _defaultConversation); await manager.DeleteConversationAsync(_defaultChannel, "conversation2"); Assert.AreEqual(0, source.Activities(_defaultChannel, "conversation2").Count()); await manager.DeleteConversationAsync("channel2", _defaultConversation); Assert.AreEqual(0, source.Activities("channel2", _defaultConversation).Count()); await manager.DeleteUserActivitiesAsync("user2"); await source.WalkActivitiesAsync(activity => { Assert.IsTrue(activity.From.Id != "user2" && activity.Recipient.Id != "user2"); return(Task.CompletedTask); }); var purge = _lastActivity.AddSeconds(-30.0); await manager.DeleteBeforeAsync(purge); AssertEqual(Filter(activities, oldest: purge), source.Activities(_defaultChannel, _defaultConversation)); }
// NOTE: To run this test you must have installed the Azure Storage Emulator. // You can download it here: https://go.microsoft.com/fwlink/?linkid=717179&clcid=0x409 // The test will automatically start the emulator. public async Task TableLoggerTest() { var tableName = "TableLoggerTestActivities"; var account = CloudStorageAccount.DevelopmentStorageAccount; account.CreateCloudTableClient().GetTableReference(tableName).DeleteIfExists(); var builder = new ContainerBuilder(); builder.RegisterModule(new TableLoggerModule(account, tableName)); var container = builder.Build(); var logger = container.Resolve <IActivityLogger>(); var source = container.Resolve <IActivitySource>(); var manager = container.Resolve <IActivityManager>(); var activities = GetTestActivityList(); var comparator = new CompareActivity(); for (var i = 0; i < activities.Count; ++i) { await logger.LogAsync(activities[i]); var oldest = LastActivity.AddSeconds(-30); AssertEqual(Filter(activities, oldest: oldest, take: i + 1), source.Activities(DefaultChannel, DefaultConversation, oldest)); } var conversation = Filter(activities); AssertEqual(conversation, source.Activities(DefaultChannel, DefaultConversation)); AssertEqual(Filter(activities, channel: "channel2"), source.Activities("channel2", "conversation1")); AssertEqual(Filter(activities, conversation: "conversation2"), source.Activities(DefaultChannel, "conversation2")); var transcript = new List <string>(); foreach (var activity in conversation) { var msg = activity as IMessageActivity; if (msg != null) { transcript.Add($"({msg.From.Name} {msg.Timestamp:g})"); transcript.Add($"{msg.Text}"); } } int j = 0; var botToUser = new Mock <IBotToUser>(); botToUser .Setup(p => p.PostAsync(It.IsAny <IMessageActivity>(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask) .Callback((IMessageActivity activity, CancellationToken cancel) => Assert.AreEqual(transcript[j++], activity.Text)); botToUser .Setup(p => p.MakeMessage()) .Returns(new Activity()); var replay = new ReplayTranscript(botToUser.Object); await source.WalkActivitiesAsync(replay.Replay, DefaultChannel, DefaultConversation); await manager.DeleteConversationAsync(DefaultChannel, "conversation2"); Assert.AreEqual(0, source.Activities(DefaultChannel, "conversation2").Count()); await manager.DeleteConversationAsync("channel2", DefaultConversation); Assert.AreEqual(0, source.Activities("channel2", DefaultConversation).Count()); await manager.DeleteUserActivitiesAsync("user2"); await source.WalkActivitiesAsync(activity => { Assert.IsTrue(activity.From.Id != "user2" && activity.Recipient.Id != "user2"); return(Task.CompletedTask); }); var purge = LastActivity.AddSeconds(-30.0); await manager.DeleteBeforeAsync(purge); AssertEqual(Filter(activities, oldest: purge), source.Activities(DefaultChannel, DefaultConversation)); }