Ejemplo n.º 1
0
        public Function()
        {
            var bucketName = "notttechmeet";

            Pipeline = new AlexaRequestPipeline(new IAlexaRequestHandler[]
            {
                new Launch(),
                new Events_Next(bucketName),
                new Events_Calendar(bucketName),
                new EventDetail(),
                new EventsAllWithDates(),
                new EventsAll(),
                new WhatEvent(),
                new InvalidReminder(),
                new ReminderConfirmation(),
                new ReminderDenied(),
                new ReminderConfirmed(),
                new Help(),
                new SessionEnded(),
                new FinishedIntents(),
                new Fallback()
            }, null, new [] { new StateInterceptor() }, null)
            {
                StatePersistance = Store
            };
        }
        public async Task TwoInterceptorCallsInOrder()
        {
            var expected = new SkillResponse();
            var before   = string.Empty;

            Handler.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >()).Returns(c =>
            {
                before = before + "3";
                return(expected);
            });

            var interceptor = Substitute.For <IAlexaRequestInterceptor <SkillRequest> >();

            interceptor.Intercept(Arg.Any <AlexaRequestInformation <SkillRequest> >(), Arg.Any <RequestInterceptorCall <SkillRequest> >()).Returns(c => {
                before     = before + "1";
                var actual = c.Arg <RequestInterceptorCall <SkillRequest> >()(c.Arg <AlexaRequestInformation <SkillRequest> >());
                before     = before + "5";
                return(actual);
            });

            var secondInterceptor = Substitute.For <IAlexaRequestInterceptor <SkillRequest> >();

            secondInterceptor.Intercept(Arg.Any <AlexaRequestInformation <SkillRequest> >(), Arg.Any <RequestInterceptorCall <SkillRequest> >()).Returns(c => {
                before     = before + "2";
                var actual = c.Arg <RequestInterceptorCall <SkillRequest> >()(c.Arg <AlexaRequestInformation <SkillRequest> >());
                before     = before + "4";
                return(actual);
            });

            var request = new AlexaRequestPipeline(new[] { Handler }, null, new[] { secondInterceptor, interceptor }, null);
            await request.Process(new SkillRequest());

            Assert.Equal("21354", before);
        }
        public async Task NoValidRequestHandlerThrowsException()
        {
            var requestHandler = Substitute.For <IAlexaRequestHandler>();

            requestHandler.CanHandle(Arg.Any <AlexaRequestInformation>()).Returns(false);
            var request = new AlexaRequestPipeline(new[] { requestHandler });
            await Assert.ThrowsAsync <AlexaRequestHandlerNotFoundException>(() => request.Process(new SkillRequest()));
        }
        public async Task EmptyErrorHandlerThrowsOnException()
        {
            var requestHandler = Substitute.For <AlwaysTrueRequestHandler>();

            requestHandler.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >()).Throws <InvalidOperationException>();
            var request = new AlexaRequestPipeline(new[] { requestHandler });
            await Assert.ThrowsAsync <InvalidOperationException>(() => request.Process(new SkillRequest()));
        }
        public async Task EmptyInterceptorReturnsHandler()
        {
            var expected = new SkillResponse();

            Handler.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >()).Returns(expected);
            var request = new AlexaRequestPipeline(new[] { Handler }, null);
            var actual  = await request.Process(new SkillRequest());

            Assert.Equal(expected, actual);
        }
        public async Task ValidErrorHandlerReturnsResponse()
        {
            var errorHandler = Substitute.For <AlwaysTrueErrorHandler <SkillRequest> >();

            errorHandler.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >(), Arg.Any <Exception>()).Returns(new Response.SkillResponse());
            var request  = new AlexaRequestPipeline(null, new[] { errorHandler });
            var response = await request.Process(new SkillRequest());

            Assert.NotNull(response);
        }
Ejemplo n.º 7
0
        public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
        {
            var json = await req.ReadAsStringAsync();

            var skillRequest = JsonConvert.DeserializeObject <SkillRequest>(json);

            // Verifies that the request is indeed coming from Alexa.
            var isValid = await skillRequest.ValidateRequestAsync(req, log);

            if (!isValid)
            {
                return(new BadRequestResult());
            }


            bool isFirstRequest = skillRequest.Session.Attributes == null ? true : false;
            Game game           = new Game();
            await game.InitializeGame(skillRequest.Session);

            var pipeline = new AlexaRequestPipeline();

            pipeline.RequestHandlers.Add(new LaunchIntentHandler(isFirstRequest));
            pipeline.RequestHandlers.Add(new SessionEndedRequestHandler());
            pipeline.RequestHandlers.Add(new CancelIntentHandler());
            pipeline.RequestHandlers.Add(new HelpIntentHandler());
            pipeline.RequestHandlers.Add(new CreditsIntentHandler());
            pipeline.RequestHandlers.Add(new ContinuePromptIntentHandler());
            pipeline.RequestHandlers.Add(new RepeatIntentHandler());
            pipeline.RequestHandlers.Add(new FallbackIntentHandler());
            pipeline.RequestHandlers.Add(new RulesIntentHandler());
            pipeline.RequestHandlers.Add(new NextRuleIntentHandler());
            pipeline.RequestHandlers.Add(new PreviousRuleIntentHandler());

            pipeline.RequestHandlers.Add(new NewGameIntentHandler());
            pipeline.RequestHandlers.Add(new MoreTimeIntentHandler());
            pipeline.RequestHandlers.Add(new ShipStatusIntentHandler());
            pipeline.RequestHandlers.Add(new ThreatStatusIntentHandler());
            pipeline.RequestHandlers.Add(new ThreatInfoIntentHandler());
            pipeline.RequestHandlers.Add(new AssignTacticalToWeaponsIntentHandler());
            pipeline.RequestHandlers.Add(new FireWeaponsIntentHandler());
            pipeline.RequestHandlers.Add(new FireStasisBeamIntentHandler());
            pipeline.RequestHandlers.Add(new RechargeShieldsIntentHandler());
            pipeline.RequestHandlers.Add(new RepairHullIntentHandler());
            pipeline.RequestHandlers.Add(new HealCrewIntentHandler());
            pipeline.RequestHandlers.Add(new RemoveThreatFromScannerIntentHandler());
            pipeline.RequestHandlers.Add(new TransformCrewIntentHandler());
            pipeline.RequestHandlers.Add(new SendCrewOnAMissionIntentHandler());
            pipeline.RequestHandlers.Add(new ReturnCrewFromMissionIntentHandler());
            pipeline.RequestHandlers.Add(new EndTurnIntentHandler());
            pipeline.RequestHandlers.Add(new AlwaysTrueIntentHandler());

            var response = await pipeline.Process(skillRequest, game);

            return(new OkObjectResult(response));
        }
        public async Task EmptyRequestHandlerThrowsWhenSet()
        {
            var errorHandler = Substitute.For <AlwaysTrueErrorHandler>();

            errorHandler.Handle(Arg.Any <AlexaRequestInformation>(), Arg.Any <Exception>()).Returns(new Response.SkillResponse());
            var request = new AlexaRequestPipeline(null, new[] { errorHandler })
            {
                RequestHandlerTriggersErrorHandlers = false
            };
            await Assert.ThrowsAsync <AlexaRequestHandlerNotFoundException>(() => request.Process(new SkillRequest()));
        }
        public async Task <SkillResponse> ProcessAsync(SkillRequest input)
        {
            String currentLocale = input.Request.Locale.Split('-')[0];

            LocalizationManager.Init(currentLocale);
            var request = new AlexaRequestPipeline();

            request.RequestHandlers.Add(new LaunchRequestIntentHandler());
            request.RequestHandlers.Add(new SessionEndedRequestIntentHandler());
            request.RequestHandlers.Add(new CancelIntentHandler());
            request.RequestHandlers.Add(new HelpIntentHandler());
            request.RequestHandlers.Add(new HelloWorldIntentHandler());
            request.ErrorHandlers.Add(new ErrorHandler());
            return(await request.Process(input));
        }
        public async Task ValidFirstRequestReturnsResponse()
        {
            var expected = ResponseBuilder.Empty();

            var requestHandler = Substitute.For <IAlexaRequestHandler <SkillRequest> >();

            requestHandler.CanHandle(Arg.Any <AlexaRequestInformation <SkillRequest> >()).Returns(true);
            requestHandler.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >()).Returns(expected);

            var errorHandler = Substitute.For <IAlexaErrorHandler <SkillRequest> >();

            errorHandler.CanHandle(Arg.Any <AlexaRequestInformation <SkillRequest> >(), Arg.Any <Exception>()).Returns(false);

            var request = new AlexaRequestPipeline(new[] { requestHandler }, new[] { errorHandler });
            var actual  = await request.Process(new SkillRequest());

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 11
0
        public async Task <SkillResponse> FunctionHandler(SkillRequest input, ILambdaContext context)
        {
            SkillResponse response = new SkillResponse
            {
                Response = new ResponseBody()
            };


            var pipeline = new AlexaRequestPipeline();

            pipeline.RequestHandlers.Add(new LaunchRequestHandler());
            pipeline.RequestHandlers.Add(new GetClientsIntentRequestHandler());
            pipeline.RequestHandlers.Add(new ServerInfoIntentRequestHandler());
            pipeline.RequestHandlers.Add(new HelpIntentRequestHandler());
            pipeline.RequestHandlers.Add(new StopIntentRequestHandler());
            pipeline.RequestHandlers.Add(new AlwaysTrueRequestHandler());

            return(await pipeline.Process(input, context));
        }
        public async Task SpecificExceptionHandlerPicks()
        {
            var requestHandler = Substitute.For <AlwaysTrueRequestHandler <SkillRequest> >();

            requestHandler.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >()).Throws <InvalidOperationException>();


            var specificError = Substitute.For <IAlexaErrorHandler>();

            specificError.CanHandle(Arg.Any <AlexaRequestInformation <SkillRequest> >(), Arg.Any <InvalidOperationException>()).Returns(true);
            specificError.Handle(Arg.Any <AlexaRequestInformation <SkillRequest> >(), Arg.Any <Exception>()).Returns(new Response.SkillResponse());
            var errorHandler = Substitute.For <AlwaysTrueErrorHandler>();


            var request  = new AlexaRequestPipeline(new[] { requestHandler }, new IAlexaErrorHandler <SkillRequest>[] { specificError, errorHandler });
            var response = await request.Process(new SkillRequest());

            Assert.NotNull(response);
        }
 public async Task EmptyRequestHandlersHandledByErrors()
 {
     var request = new AlexaRequestPipeline();
     await Assert.ThrowsAsync <AlexaRequestHandlerNotFoundException>(() => request.Process(new SkillRequest()));
 }
 public async Task ArgumentNullExceptionIfNoRequest()
 {
     var request = new AlexaRequestPipeline();
     await Assert.ThrowsAsync <ArgumentNullException>(() => request.Process(null));
 }