Example #1
0
        private static void ShouldBeSingleInstance <TService>(ISlackServiceProvider sut, Func <ISlackServiceProvider, TService> getService, TService service) where TService : class
        {
            getService(sut).ShouldBe(service);
            getService(sut).ShouldBe(service, "Should be same instance");

            DuringRequest(sut, _ => getService(sut).ShouldBe(service, "Should be same instance during request"));
        }
Example #2
0
 public SlackRequestContextPopulator(
     ISlackServiceProvider serviceProvider,
     IReadOnlyCollection <Func <SlackRequestContext, IEventHandler> > eventHandlers,
     IReadOnlyCollection <Func <SlackRequestContext, IAsyncBlockActionHandler> > blockActionHandlers,
     IReadOnlyDictionary <string, Func <SlackRequestContext, IBlockOptionProvider> > blockOptionProviders,
     IReadOnlyCollection <Func <SlackRequestContext, IAsyncMessageShortcutHandler> > messageShortcutHandlers,
     IReadOnlyCollection <Func <SlackRequestContext, IAsyncGlobalShortcutHandler> > globalShortcutHandlers,
     IReadOnlyDictionary <string, Func <SlackRequestContext, IAsyncViewSubmissionHandler> > viewSubmissionHandlers,
     IReadOnlyDictionary <string, Func <SlackRequestContext, IAsyncSlashCommandHandler> > slashCommandHandlers,
     IReadOnlyCollection <Func <SlackRequestContext, IAsyncWorkflowStepEditHandler> > workflowStepEditHandlers,
     IReadOnlyDictionary <string, Func <SlackRequestContext, IInteractiveMessageHandler> > legacyInteractiveMessageHandlers,
     IReadOnlyDictionary <string, Func <SlackRequestContext, IOptionProvider> > legacyOptionProviders,
     IReadOnlyDictionary <string, Func <SlackRequestContext, IDialogSubmissionHandler> > legacyDialogSubmissionHandlers)
 {
     _serviceProvider                  = serviceProvider;
     _eventHandlers                    = eventHandlers;
     _blockActionHandlers              = blockActionHandlers;
     _blockOptionProviders             = blockOptionProviders;
     _messageShortcutHandlers          = messageShortcutHandlers;
     _globalShortcutHandlers           = globalShortcutHandlers;
     _viewSubmissionHandlers           = viewSubmissionHandlers;
     _slashCommandHandlers             = slashCommandHandlers;
     _workflowStepEditHandlers         = workflowStepEditHandlers;
     _legacyInteractiveMessageHandlers = legacyInteractiveMessageHandlers;
     _legacyOptionProviders            = legacyOptionProviders;
     _legacyDialogSubmissionHandlers   = legacyDialogSubmissionHandlers;
 }
Example #3
0
 public SlackServiceProvider(
     Func <ISlackServiceProvider, IHttp> httpProvider,
     Func <ISlackServiceProvider, SlackJsonSettings> jsonSettingsProvider,
     Func <ISlackServiceProvider, ISlackTypeResolver> slackTypeResolverProvider,
     Func <ISlackServiceProvider, ISlackUrlBuilder> urlBuilderProvider,
     Func <ISlackServiceProvider, ILogger> loggerProvider,
     Func <ISlackServiceProvider, IWebSocketFactory> webSocketFactoryProvider,
     IReadOnlyCollection <Func <ISlackServiceProvider, ISlackRequestListener> > requestListenerProviders,
     Func <ISlackServiceProvider, ISlackHandlerFactory> handlerFactoryProvider,
     Func <ISlackServiceProvider, ISlackApiClient> apiClientProvider,
     Func <ISlackServiceProvider, ISlackSocketModeClient> socketModeClientProvider,
     ISlackServiceProvider dependencyProvider = null)
 {
     dependencyProvider ??= this;
     _http              = new Lazy <IHttp>(() => httpProvider(dependencyProvider));
     _jsonSettings      = new Lazy <SlackJsonSettings>(() => jsonSettingsProvider(dependencyProvider));
     _slackTypeResolver = new Lazy <ISlackTypeResolver>(() => slackTypeResolverProvider(dependencyProvider));
     _urlBuilder        = new Lazy <ISlackUrlBuilder>(() => urlBuilderProvider(dependencyProvider));
     _logger            = new Lazy <ILogger>(() => loggerProvider(dependencyProvider));
     _webSocketFactory  = new Lazy <IWebSocketFactory>(() => webSocketFactoryProvider(dependencyProvider));
     _requestListeners  = requestListenerProviders.Select(p => p(dependencyProvider));
     _handlerFactory    = new Lazy <ISlackHandlerFactory>(() => handlerFactoryProvider(dependencyProvider));
     _apiClient         = new Lazy <ISlackApiClient>(() => apiClientProvider(dependencyProvider));
     _socketModeClient  = new Lazy <ISlackSocketModeClient>(() => socketModeClientProvider(dependencyProvider));
 }
Example #4
0
 private void HandleInRequest <THandler, TInput>(ISlackServiceProvider services, Func <ISlackHandlerFactory, SlackRequestContext, THandler> createHandler, Action <THandler, TInput> handle, TInput[] inputs)
 {
     DuringRequest(services, ctx =>
     {
         var handler = createHandler(services.GetHandlerFactory(), ctx);
         foreach (var input in inputs)
         {
             handle(handler, input);
         }
     });
 }
Example #5
0
        private static void RequestListenersShouldBeCreatedOnEnumeration(ISlackServiceProvider sut, InstanceTracker instanceTracker)
        {
            var listeners = sut.GetRequestListeners();

            instanceTracker.GetInstances <TestRequestListener>().ShouldBeEmpty("Listeners should not be created until enumerated");

            var expectedListeners = new[] { listeners.Last(), listeners.Last() };
            var createdInstances  = instanceTracker.GetInstances <TestRequestListener>().Cast <ISlackRequestListener>();

            createdInstances.ShouldMatchReferences(expectedListeners, "Listeners should be created once per enumeration");
        }
Example #6
0
        protected static void DuringRequest(ISlackServiceProvider services, Action <SlackRequestContext> duringRequest)
        {
            var requestContext = new SlackRequestContext();
            var requestScope   = requestContext.BeginRequest(services.GetRequestListeners());

            try
            {
                duringRequest(requestContext);
            }
            finally
            {
                requestScope.DisposeAsync().AsTask().ShouldComplete();
            }
        }
Example #7
0
 protected void HandleViewCloses(ISlackServiceProvider services, Responder responder, ViewClosed[] closes) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateViewSubmissionHandler(ctx), (h, c) => h.HandleClose(c, responder), closes);
Example #8
0
 protected void HandleLegacyDialogCancellations(ISlackServiceProvider services, DialogCancellation[] cancellations) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateLegacyDialogSubmissionHandler(ctx), (h, c) => h.HandleCancel(c), cancellations);
Example #9
0
 public ServiceProviderSlackServiceProvider(Func <ISlackServiceProvider, ISlackServiceProvider> createBaseProvider, IServiceProvider serviceProvider)
 {
     _baseProvider    = createBaseProvider(this);
     _serviceProvider = serviceProvider;
 }
Example #10
0
 protected void HandleLegacyOptionsRequest(ISlackServiceProvider services, OptionsRequest[] requests) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateLegacyOptionProvider(ctx), (h, r) => h.GetOptions(r), requests);
Example #11
0
 protected void HandleLegacyDialogSubmissions(ISlackServiceProvider services, DialogSubmission[] submissions) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateLegacyDialogSubmissionHandler(ctx), (h, s) => h.Handle(s), submissions);
Example #12
0
 protected void HandleWorkflowStepEdits(ISlackServiceProvider services, Responder responder, WorkflowStepEdit[] edits) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateWorkflowStepEditHandler(ctx), (h, e) => h.Handle(e, responder), edits);
Example #13
0
 protected void HandleLegacyInteractiveMessages(ISlackServiceProvider services, InteractiveMessage[] messages) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateLegacyInteractiveMessageHandler(ctx), (h, m) => h.Handle(m), messages);
Example #14
0
 public AutofacSlackServiceProvider(Func <ISlackServiceProvider, ISlackServiceProvider> createBaseProvider, ILifetimeScope scope)
 {
     _baseProvider = createBaseProvider(this);
     _scope        = scope;
 }
Example #15
0
 protected void HandleEvents(ISlackServiceProvider services, EventCallback[] eventCallbacks) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateEventHandler(ctx), (h, e) => h.Handle(e), eventCallbacks);
Example #16
0
 protected void HandleViewSubmissions(ISlackServiceProvider services, Responder <ViewSubmissionResponse> responder, ViewSubmission[] submissions) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateViewSubmissionHandler(ctx), (h, s) => h.Handle(s, responder), submissions);
Example #17
0
 protected void HandleGlobalShortcuts(ISlackServiceProvider services, Responder responder, GlobalShortcut[] shortcuts) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateGlobalShortcutHandler(ctx), (h, s) => h.Handle(s, responder), shortcuts);
Example #18
0
 protected void HandleBlockActions(ISlackServiceProvider services, Responder responder, BlockActionRequest[] requests) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateBlockActionHandler(ctx), (h, r) => h.Handle(r, responder), requests);
Example #19
0
 protected void HandleSlashCommands(ISlackServiceProvider services, Responder <SlashCommandResponse> responder, SlashCommand[] commands) =>
 HandleInRequest(services, (hf, ctx) => hf.CreateSlashCommandHandler(ctx), (h, c) => h.Handle(c, responder), commands);
 public SimpleInjectorSlackServiceProvider(Func <ISlackServiceProvider, ISlackServiceProvider> createBaseProvider, Container container)
 {
     _baseProvider = createBaseProvider(this);
     _container    = container;
 }