public override string TryToExecute(CommandReceivedEventArgs eventArgs)
        {
            var word         = eventArgs?.Arguments?.ElementAtOrDefault(1)?.ToLowerInvariant();
            var newAlias     = eventArgs?.Arguments?.ElementAtOrDefault(2)?.ToLowerInvariant();
            var typeName     = _repository.Single(CommandWordPolicy.ByWord(word))?.FullTypeName;
            var existingWord = _repository.Single(CommandWordPolicy.ByWord(newAlias));

            if (string.IsNullOrEmpty(newAlias))
            {
                return("You seem to be missing the new alias you want to set.");
            }

            if (existingWord != null)
            {
                return($"The command word '!{existingWord.CommandWord}' already exists.");
            }

            var newCommand = new CommandWordEntity
            {
                CommandWord  = newAlias,
                FullTypeName = typeName,
                IsPrimary    = false
            };

            _repository.Create(newCommand);

            return($"Created new command alias '!{newAlias}' for '!{word}'.");
        }
        public override string TryToExecute(CommandReceivedEventArgs eventArgs)
        {
            if (eventArgs?.Arguments == null ||
                eventArgs.Arguments.Count < 3)
            {
                return(HelpText);
            }

            var word      = eventArgs.Arguments[1].ToLowerInvariant();
            var newAlias  = eventArgs.Arguments[2].ToLowerInvariant();
            var arguments = eventArgs.Arguments.Skip(3).ToList();

            var typeName     = _repository.Single(CommandWordPolicy.ByWord(word))?.FullTypeName;
            var existingWord = _repository.Single(CommandWordPolicy.ByWord(newAlias));

            if (string.IsNullOrEmpty(newAlias))
            {
                return("You seem to be missing the new alias you want to set.");
            }

            if (existingWord != null)
            {
                return($"The command word '!{existingWord.CommandWord}' already exists.");
            }

            var newCommand = new CommandWordEntity
            {
                CommandWord  = newAlias,
                FullTypeName = typeName,
                IsPrimary    = false
            };

            for (int i = 0; i < arguments.Count; i++)
            {
                newCommand.Arguments.Add(new AliasArgumentEntity
                {
                    Argument          = arguments[i],
                    CommandWordEntity = newCommand,
                    Index             = i
                });
            }

            _repository.Create(newCommand);

            return($"Created new command alias '!{newAlias}' for '!{word}'.");
        }
示例#3
0
        public void NotSave_GivenAliasAlreadyUsed()
        {
            var commandReceivedEventArgs = new CommandReceivedEventArgs {
                Arguments = new[] { "add", "foo", "bar" }
            };
            var mockRepo          = new Mock <IRepository>();
            var addAliasOperation = new AddAliasOperation(mockRepo.Object);
            var existingWord      = new CommandWordEntity {
                CommandWord = Guid.NewGuid().ToString()
            };

            mockRepo.Setup(x => x.Single(It.IsAny <CommandWordPolicy>())).Returns(existingWord);

            string message = addAliasOperation.TryToExecute(commandReceivedEventArgs);

            mockRepo.Verify(x => x.Create(It.IsAny <CommandWordEntity>()), Times.Never);
            message.Should().Contain(existingWord.CommandWord);
        }
示例#4
0
        public void SaveAlias_GivenValidArguments()
        {
            var newAlias = Guid.NewGuid().ToString();
            var commandReceivedEventArgs = new CommandReceivedEventArgs {
                Arguments = new[] { "add", "foo", newAlias }
            };
            var mockRepo          = new Mock <IRepository>();
            var addAliasOperation = new AddAliasOperation(mockRepo.Object);
            var existingWord      = new CommandWordEntity {
                CommandWord = Guid.NewGuid().ToString()
            };

            mockRepo.Setup(x => x.Single(It.IsAny <CommandWordPolicy>()))
            .Returns(existingWord);              // call for type to alias
            mockRepo.Setup(x => x.Single(It.IsAny <CommandWordPolicy>()))
            .Returns(null as CommandWordEntity); // check for existing

            string message = addAliasOperation.TryToExecute(commandReceivedEventArgs);

            mockRepo.Verify(x => x.Create(It.IsAny <CommandWordEntity>()), Times.Once);
            message.Should().Contain(newAlias);
        }