private EventProcessor[] GetEventProcessorsForSlackEventType(SlackEventType slackEventType, ChannelProcessingConfiguration <EventProcessor> eventProcessors) { var result = new EventProcessor[0]; if (eventProcessors?.EventConfigurations == null) { return(result); } if (eventProcessors.EventConfigurations.TryGetValue(slackEventType.ToString(), out var ownEventProcessors)) { if (ownEventProcessors != null) { result = result.Concat(ownEventProcessors).ToArray(); } } if (eventProcessors.EventConfigurations.TryGetValue("*", out var genericEventProcessors)) { if (genericEventProcessors != null) { result = result.Concat(genericEventProcessors).ToArray(); } } return(result); }
private EventProcessor[] GetEventProcessorsForChannel(string channelId, SlackEventType slackEventType, TeamProcessingConfiguration <EventProcessor> eventProcessors) { var result = new EventProcessor[0]; if (eventProcessors?.ChannelConfigurations == null) { return(result); } if (eventProcessors.ChannelConfigurations.TryGetValue(channelId, out var ownEventProcessors)) { if (ownEventProcessors != null) { result = result.Concat(GetEventProcessorsForSlackEventType(slackEventType, ownEventProcessors)).ToArray(); } } if (eventProcessors.ChannelConfigurations.TryGetValue("*", out var genericEventProcessors)) { if (genericEventProcessors != null) { result = result.Concat(GetEventProcessorsForSlackEventType(slackEventType, genericEventProcessors)).ToArray(); } } return(result); }
public async Task MessageOnChannel_IsRoutedCorrectly(string inputEvent, SlackEventType expectedEvent) { var slackBody = GetSlackEventBody(inputEvent); var slackRouterMock = new Mock <ISlackEventHandler>(); var slackEventIdentifier = new SlackEventIdentifier(slackRouterMock.Object); await slackEventIdentifier.IdentifySlackEventAsync(slackBody.Body, CancellationToken.None); slackRouterMock.Verify(x => x.HandleSlackEventAsync(It.Is <SlackEventType>( type => type == expectedEvent), slackBody.Body, CancellationToken.None), Times.Once); }
public async Task HandleSlackEventAsync( SlackEventType slackEventType, SlackEventBody slackEventBody, CancellationToken cancellationToken) { var eventsProcessors = _eventProcessorProvider.GetEventProcessors( slackEventBody.TeamId, slackEventBody.Event.Channel, slackEventType); await Task.WhenAll( eventsProcessors.Select( e => e.MatchAndProcessAsync(slackEventBody, cancellationToken))); }
public EventProcessor[] GetEventProcessors( string teamId, string channelId, SlackEventType slackEventType) { var result = new EventProcessor[0]; if (_eventProcessors?.TeamConfigurations != null && _eventProcessors.TeamConfigurations.TryGetValue(teamId, out var teamEventProcessors)) { return(GetEventProcessorsForChannel(channelId, slackEventType, teamEventProcessors)); } return(result); }