public async Task CognitiveService_ProcessShouldReturnActiveProcessor()
        {
            var processor1 = Substitute.For <ICommandProcessor>();
            var processor2 = Substitute.For <ICommandProcessor>();
            var chatEvent  = GetChatEvent("@mentorbot Get My Processor. ");
            var info       = new TextDeconstructionInformation(null, "My");
            var settings   = new MentorBotSettings
            {
                Processors = new[]
                {
                    new ProcessorSettings
                    {
                        Name    = "Processor 1",
                        Enabled = false
                    },
                    new ProcessorSettings
                    {
                        Name    = "Processor 2",
                        Enabled = true,
                        Data    = new[] { new KeyValuePair <string, string>("K", "") }
                    }
                }
            };

            _commandProcessors.Add(processor1);
            _commandProcessors.Add(processor2);

            processor1.Subject.Returns("My");
            processor2.Subject.Returns("My");
            processor1.Name.Returns("Processor 1");
            processor2.Name.Returns("Processor 2");

            _connector.DeconstructAsync("Get My Processor").Returns(info);

            _cache.TryGetValue(Constants.SettingsCacheKey, out Arg.Any <object>())
            .Returns(x =>
            {
                x[1] = settings;
                return(true);
            });

            var result = await _service.ProcessAsync(chatEvent);

            Assert.AreEqual(result.TextDeconstructionInformation, info);
            Assert.AreEqual(result.CommandProcessor.Name, "Processor 2");
            Assert.AreEqual(result.Settings.Count, 1);
        }
        public async Task CognitiveService_ProcessShouldReturnActiveProcessor()
        {
            var processor1 = Substitute.For <ICommandProcessor>();
            var processor2 = Substitute.For <ICommandProcessor>();
            var chatEvent  = GetChatEvent("@mentorbot Get My Processor. ");
            var info       = new TextDeconstructionInformation(null, "My");
            var settings   = new Plugin[]
            {
                new Plugin
                {
                    ProcessorTypeName = "Processor 1",
                    Enabled           = false,
                },
                new Plugin
                {
                    ProcessorTypeName = "Processor 2",
                    Enabled           = true,
                }
            };

            _commandProcessors.Add(processor1);
            _commandProcessors.Add(processor2);

            processor1.Subject.Returns("My");
            processor2.Subject.Returns("My");
            processor1.Name.Returns("Processor 1");
            processor2.Name.Returns("Processor 2");

            _connector.DeconstructAsync("Get My Processor").Returns(info);

            _cache.TryGetValue(Constants.PluginsCacheKey, out Arg.Any <object>())
            .Returns(x =>
            {
                x[1] = settings;
                return(true);
            });

            var result = await _service.ProcessAsync(chatEvent);

            Assert.AreEqual(result.TextDeconstructionInformation, info);
            Assert.AreEqual(result.CommandProcessor.Name, "Processor 2");
            Assert.IsNotNull(result.PropertiesAccessor);
        }