public Task ProcessRequest(InteractiveMessage request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var invokedAction = request.Actions.FirstOrDefault();

            if (invokedAction == null)
            {
                throw new ArgumentNullException(nameof(invokedAction));
            }

            var paramsType   = _slackParamsSelectService.Choose(invokedAction.Name);
            var actionParams = _mapper.Map(request, request.GetType(), paramsType);

            return(_slackExecutorService.ExecuteAction(paramsType, actionParams));
        }
Example #2
0
        public async Task ProccesRequest_HelpedAction_ShouldCallExecutorServiceWithAppropriateArgs()
        {
            // Arrange
            var action  = new AttachmentActionDto("actionName", "some text");
            var request = new InteractiveMessage
            {
                Actions = new List <AttachmentActionDto> {
                    action
                }
            };
            var paramsType   = typeof(HelpedSlackActionParams);
            var actionParams = new HelpedSlackActionParams();

            _slackParamsSelectServiceMock.Setup(m => m.Choose(It.IsAny <string>()))
            .Returns(paramsType);
            _mapperMock.Setup(m => m.Map(It.IsAny <object>(), It.IsAny <Type>(), It.IsAny <Type>()))
            .Returns(actionParams);
            _slackExecutorServiceMock.Setup(m => m.ExecuteAction(It.IsAny <Type>(), It.IsAny <object[]>()))
            .Returns(Task.CompletedTask);

            // Act
            await _service.ProcessRequest(request);

            // Assert
            _slackParamsSelectServiceMock.Verify(m => m.Choose(It.Is <string>(n => n == action.Name)), Times.Once);
            _slackParamsSelectServiceMock.VerifyNoOtherCalls();
            _mapperMock.Verify(m => m.Map(It.Is <object>(r => r == request), It.Is <Type>(t => t == request.GetType()),
                                          It.Is <Type>(t => t == actionParams.GetType())));
            _mapperMock.VerifyNoOtherCalls();
            _slackExecutorServiceMock.Verify(m => m.ExecuteAction(It.Is <Type>(t => t == paramsType), It.IsAny <object[]>()), Times.Once);
            _slackExecutorServiceMock.VerifyNoOtherCalls();
        }