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)); }
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(); }