public async Task WhenCreatingPackage_ThenInvokesDroneSchedulerAPI() { string actualPackageId = null; PackageGen actualPackage = null; _handleHttpRequest = ctx => { if (ctx.Request.Host.Host == PackageHost) { actualPackageId = ctx.Request.Path; actualPackage = new JsonSerializer().Deserialize <PackageGen>(new JsonTextReader(new StreamReader(ctx.Request.Body, Encoding.UTF8))); ctx.Response.StatusCode = StatusCodes.Status201Created; } else { ctx.Response.StatusCode = StatusCodes.Status500InternalServerError; } return(Task.CompletedTask); }; var packageInfo = new PackageInfo { PackageId = "somePackageId", Size = ContainerSize.Medium, Tag = "sometag", Weight = 100d }; await _caller.UpsertPackageAsync(packageInfo); Assert.NotNull(actualPackageId); Assert.Equal($"/api/packages/{packageInfo.PackageId}", actualPackageId); Assert.NotNull(actualPackage); Assert.Equal((int)packageInfo.Size, (int)actualPackage.Size); Assert.Equal(packageInfo.Tag, actualPackage.Tag); Assert.Equal(packageInfo.Weight, actualPackage.Weight); }
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); }