예제 #1
0
        public void BatchActionFactoryTest_getProvider(BatchUrlManagerCommand command)
        {
            //Arrange
            var sharpBatchTrakingFactory = new Mock <ISharpBatchTrackingFactory>(MockBehavior.Strict);

            sharpBatchTrakingFactory.Setup((s) => s.getTrakingProvider())
            .Returns(new TrackingMemory())
            .Verifiable();

            var modelSerializer = new Mock <IModelSerializer>(MockBehavior.Strict);

            IPropertyInvoker        propertyInvoker         = new DefaultPropertyInvoker();
            MethodActivator         methodActivator         = new MethodActivator();
            IBatchInvoker           batchInvoker            = new DefaultBatchInvoker(propertyInvoker, methodActivator, sharpBatchTrakingFactory.Object, modelSerializer.Object);
            IBatchInvokerProvider   batchInvokerProvider    = new DefaultBatchInvokerProvider(batchInvoker, sharpBatchTrakingFactory.Object);
            ApplicationBatchManager applicationBatchManager = new ApplicationBatchManager();
            BatchActionProvider     batchActionProvider     = new BatchActionProvider(applicationBatchManager, batchInvokerProvider);

            SystemActionProvider systemActionProvider = new SystemActionProvider(sharpBatchTrakingFactory.Object, modelSerializer.Object);
            IBatchActionFactory  batchActionFactory   = new BatchActionFactory(batchActionProvider, systemActionProvider);

            var batchUrlManager = new Mock <IBatchUrlManager>(MockBehavior.Strict);

            batchUrlManager.Setup((s) => s.RequestCommand)
            .Returns(command)
            .Verifiable();


            //Act
            var actionProvider = batchActionFactory.getProvider(batchUrlManager.Object);


            //Assert
            if (command == BatchUrlManagerCommand.Exec)
            {
                Assert.Same(batchActionProvider, actionProvider);
            }
            else
            {
                Assert.Same(systemActionProvider, actionProvider);
            }
            batchUrlManager.Verify();
            sharpBatchTrakingFactory.Verify();
        }
        public async void DefaultBatchInvokerProviderTest_InvokeAsync()
        {
            //Arrange
            var batchInvoker = new Mock <IBatchInvoker>(MockBehavior.Strict);
            var tracking     = new Mock <ISharpBatchTracking>(MockBehavior.Strict);

            tracking.Setup(s => s.StartAsync(It.IsAny <string>(), It.IsAny <Guid>())).Returns(Task.CompletedTask);
            tracking.Setup(s => s.PingAsync(It.IsAny <Guid>())).Returns(Task.CompletedTask);
            tracking.Setup(s => s.StopAsync(It.IsAny <Guid>())).Returns(Task.CompletedTask);

            var sharpBatchTrakingFactory = new Mock <ISharpBatchTrackingFactory>(MockBehavior.Strict);

            sharpBatchTrakingFactory.Setup((s) => s.getTrakingProvider())
            .Returns(tracking.Object)
            .Verifiable();

            var defaultBatchInvokerProvider = new DefaultBatchInvokerProvider(batchInvoker.Object, sharpBatchTrakingFactory.Object);

            batchInvoker.Setup((s) => s.InvokeAsync(It.IsAny <ContextInvoker>()))
            .Returns(Task.FromResult <object>("executed"))
            .Verifiable();

            var requestService = new Mock <IServiceProvider>(MockBehavior.Strict);

            requestService.Setup((s) => s.GetService(It.IsAny <Type>()))
            .Returns((object)"Any")
            .Verifiable();

            var httpRequest = new Mock <HttpRequest>(MockBehavior.Strict);

            httpRequest.Setup((s) => s.Path)
            .Returns(new PathString("/batch/exec/batch/action"));
            httpRequest.Setup((s) => s.QueryString)
            .Returns(new QueryString())
            .Verifiable();

            Stream bodyStream   = new MemoryStream();
            var    httpResponse = new Mock <HttpResponse>(MockBehavior.Strict);

            httpResponse.Setup((s) => s.Body).Returns(bodyStream).Verifiable();

            var context = new Mock <HttpContext>(MockBehavior.Strict);

            context.Setup((s) => s.Request).Returns(httpRequest.Object).Verifiable();
            context.Setup((s) => s.Response).Returns(httpResponse.Object).Verifiable();
            context.Setup((s) => s.RequestServices).Returns(requestService.Object).Verifiable();


            //var contextInvoker = ContextInvoker.Create(context.Object);
            var contextInvoker = ContextInvoker.Create(context.Object);

            contextInvoker.SessionId        = Guid.NewGuid();
            contextInvoker.ActionDescriptor = new BatchActionDescriptor()
            {
                BatchName = "Name"
            };

            //Act
            var response = await defaultBatchInvokerProvider.InvokeAsync(contextInvoker);

            //Assert
            Assert.NotNull(response);
            Assert.Equal("executed", response);
        }