예제 #1
0
        // 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));
        }
예제 #2
0
        // 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));
        }