public void CallServiceFaultyServiceTest()
        {
            var serviceId          = Guid.NewGuid();
            var serviceAndTokenIds = new List <Guid> {
                serviceId
            };
            var cacheRegion = "region";

            var serviceRepository = Substitute.For <IServiceRepository>();
            var dynamicService    = Substitute.For <IDynamicService>();
            var cachedService     = Substitute.For <ICachedService>();
            var staticService     = Substitute.For <IStaticService>();
            var taskScheduler     = Substitute.For <ITaskScheduler>();
            var cache             = Substitute.For <ICache>();

            serviceRepository.GetServicesAndTokens(serviceAndTokenIds).ReturnsForAnyArgs(new ServiceInfo[0]);

            var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache);

            ServiceResponse actual = sut.CallService(serviceId, cacheRegion, TimeSpan.FromMilliseconds(10), new List <KeyValuePair <string, string> >());

            serviceRepository.ReceivedWithAnyArgs(1).GetServicesAndTokens(serviceAndTokenIds);

            Assert.AreEqual(ServiceResponseStatus.Error, actual.Status);
            Assert.IsNull(actual.Value);
        }
        public void CallServiceDynamicServiceTest()
        {
            Guid serviceId   = Guid.NewGuid();
            var  serviceInfo = new DynamicServiceInfo
            {
                Id = serviceId,
            };
            var serviceAndTokenIds = new List <Guid> {
                serviceId
            };
            var cacheRegion     = "region";
            var serviceResponse = "Service response";
            // ReSharper disable once CollectionNeverUpdated.Local
            var additionalParameters = new List <KeyValuePair <string, string> >();

            var serviceRepository = Substitute.For <IServiceRepository>();
            var dynamicService    = Substitute.For <IDynamicService>();
            var cachedService     = Substitute.For <ICachedService>();
            var staticService     = Substitute.For <IStaticService>();
            var taskScheduler     = Substitute.For <ITaskScheduler>();
            var cache             = Substitute.For <ICache>();

            serviceRepository.GetServicesAndTokens(serviceAndTokenIds).ReturnsForAnyArgs(new[] { serviceInfo });
            dynamicService.CallService(serviceInfo, cacheRegion, CancellationToken.None, additionalParameters)
            .ReturnsForAnyArgs(Task.FromResult(new ServiceResponse
            {
                Value = serviceResponse
            }));

            var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache);

            ServiceResponse actual = sut.CallService(serviceId, cacheRegion, TimeSpan.FromMilliseconds(10), additionalParameters);

            serviceRepository.ReceivedWithAnyArgs(1).GetServicesAndTokens(serviceAndTokenIds);
            dynamicService.ReceivedWithAnyArgs(1).CallService(serviceInfo, cacheRegion, CancellationToken.None, additionalParameters);

            Assert.AreEqual(ServiceResponseStatus.Success, actual.Status);
            Assert.AreEqual(serviceResponse, actual.Value);
        }