示例#1
0
        public string Put([FromBody] DroneDelivery droneDelivery, string id)
        {
            logger.LogInformation("In Put action with DeliveryId: {DeliveryId}", id);

            var guid = Guid.NewGuid();

            return($"AssignedDroneId{guid}");
        }
示例#2
0
        private DroneDelivery CreateDroneDelivery(Delivery deliveryRequest)
        {
            DroneDelivery delivery = new DroneDelivery();

            delivery.DeliveryId = deliveryRequest.DeliveryId;

            delivery.Dropoff = LocationRandomizer.GetRandomLocation();
            delivery.Pickup  = LocationRandomizer.GetRandomLocation();

            delivery.Expedited     = delivery.Expedited;
            delivery.PackageDetail = ModelsConverter.GetPackageDetail(deliveryRequest.PackageInfo);

            return(delivery);
        }
        public async Task WhenGettingDroneId_ThenInvokesDroneSchedulerAPI()
        {
            string        actualDeliveryId = null;
            DroneDelivery actualDelivery   = null;

            _handleHttpRequest = ctx =>
            {
                if (ctx.Request.Host.Host == DroneSchedulerHost)
                {
                    actualDeliveryId = ctx.Request.Path;
                    actualDelivery   =
                        new JsonSerializer().Deserialize <DroneDelivery>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));
                }
                else
                {
                    ctx.Response.StatusCode = StatusCodes.Status500InternalServerError;
                }

                return(Task.CompletedTask);
            };

            var delivery =
                new Delivery
            {
                DeliveryId  = "someDeliveryId",
                PackageInfo = new PackageInfo {
                    PackageId = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                }
            };
            await _caller.GetDroneIdAsync(delivery);

            Assert.NotNull(actualDeliveryId);
            Assert.Equal($"/api/DroneDeliveries/{delivery.DeliveryId}", actualDeliveryId);

            Assert.NotNull(actualDelivery);
            Assert.Equal(delivery.DeliveryId, actualDelivery.DeliveryId);
            Assert.Equal(delivery.PackageInfo.PackageId, actualDelivery.PackageDetail.Id);
            Assert.Equal((int)delivery.PackageInfo.Size, (int)actualDelivery.PackageDetail.Size);
        }
        public async Task WhenGettingDroneId_ThenInvokesDroneSchedulerAPI()
        {
            string        actualDeliveryId = null;
            DroneDelivery actualDelivery   = null;

            _handleHttpRequest = async ctx =>
            {
                if (ctx.Request.Path.Value.StartsWith(DroneSchedulerPath))
                {
                    await ctx.WriteResultAsync(new ContentResult { Content = "someDroneId", StatusCode = StatusCodes.Status201Created });

                    actualDeliveryId = ctx.Request.Path;
                    actualDelivery   =
                        new JsonSerializer().Deserialize <DroneDelivery>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));
                }
                else
                {
                    ctx.Response.StatusCode = StatusCodes.Status500InternalServerError;
                }
            };

            var delivery =
                new Delivery
            {
                DeliveryId  = "someDeliveryId",
                PackageInfo = new PackageInfo {
                    PackageId = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                }
            };
            await _caller.GetDroneIdAsync(delivery);

            Assert.NotNull(actualDeliveryId);
            Assert.Equal($"{DroneSchedulerPath}/{delivery.DeliveryId}", actualDeliveryId);

            Assert.NotNull(actualDelivery);
            Assert.Equal(delivery.DeliveryId, actualDelivery.DeliveryId);
            Assert.Equal(delivery.PackageInfo.PackageId, actualDelivery.PackageDetail.Id);
            Assert.Equal((int)delivery.PackageInfo.Size, (int)actualDelivery.PackageDetail.Size);
        }
        public async Task ProcessingDelivery_InvokesPackageServiceAndDroneSchedulerService()
        {
            PackageGen       actualPackage          = null;
            DroneDelivery    actualDelivery         = null;
            DeliverySchedule actualDeliverySchedule = null;

            _handleHttpRequest = async ctx =>
            {
                var serializer = new JsonSerializer();

                if (ctx.Request.Path.Value.StartsWith(PackagePath))
                {
                    actualPackage = serializer.Deserialize <PackageGen>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));

                    await ctx.WriteResultAsync(
                        new ObjectResult(
                            new PackageGen {
                        Id = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                    })
                    {
                        StatusCode = StatusCodes.Status201Created
                    });
                }
                else if (ctx.Request.Path.Value.StartsWith(DroneSchedulerPath))
                {
                    actualDelivery = serializer.Deserialize <DroneDelivery>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));

                    await ctx.WriteResultAsync(new ContentResult { Content = "someDroneId", StatusCode = StatusCodes.Status201Created });
                }
                else if (ctx.Request.Path.Value.StartsWith(DeliveryPath))
                {
                    actualDeliverySchedule = serializer.Deserialize <DeliverySchedule>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8)));

                    await ctx.WriteResultAsync(
                        new ObjectResult(new DeliverySchedule {
                        Id = "someDeliveryId"
                    })
                    {
                        StatusCode = StatusCodes.Status201Created
                    });
                }
                else
                {
                    ctx.Response.StatusCode = StatusCodes.Status500InternalServerError;
                }
            };

            var delivery =
                new Delivery
            {
                DeliveryId  = "someDeliveryId",
                PackageInfo = new PackageInfo {
                    PackageId = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d
                }
            };
            await _requestProcessor.ProcessDeliveryRequestAsync(delivery, new Dictionary <string, object>());

            Assert.NotNull(actualPackage);
            Assert.Equal((int)delivery.PackageInfo.Size, (int)actualPackage.Size);
            Assert.Equal(delivery.PackageInfo.Tag, actualPackage.Tag);
            Assert.Equal(delivery.PackageInfo.Weight, actualPackage.Weight);

            Assert.NotNull(actualDelivery);
            Assert.Equal(delivery.DeliveryId, actualDelivery.DeliveryId);
            Assert.Equal(delivery.PackageInfo.PackageId, actualDelivery.PackageDetail.Id);
            Assert.Equal((int)delivery.PackageInfo.Size, (int)actualDelivery.PackageDetail.Size);

            Assert.NotNull(actualDeliverySchedule);
            Assert.Equal(delivery.DeliveryId, actualDeliverySchedule.Id);
            Assert.Equal("someDroneId", actualDeliverySchedule.DroneId);
        }