public async Task <IActionResult> Create(DeliveryInputModel model) { if (!this.ModelState.IsValid) { return(this.View()); } var robotId = await this.deliveryService.Create(model); return(RedirectToAction("Details", "Delivery", new{ id = robotId })); }
public async Task <string> Create(DeliveryInputModel model) { var delivery = Mapper.Map <Delivery>(model); var sender = this.Context.Users .Include(x => x.Robots) .Include(x => x.SentRobots) .Include(x => x.ReceivedRobots) .First(x => x.Id == model.SenderId); var receiver = this.Context.Users .Include(x => x.Robots) .Include(x => x.SentRobots) .Include(x => x.ReceivedRobots) .First(x => x.UserName == model.ReceiverUsername); delivery.ReceiverId = receiver.Id; var transportType = this.transportTypeService.GetTransportTypeByName(model.TransportTypeName); delivery.TransportTypeId = transportType.Id; var robot = this.Context.Robots .Include(x => x.Deliveries) .Include(x => x.Assembly) .ThenInclude(x => x.SubAssemblies) .ThenInclude(x => x.Parts) .First(x => x.Id == model.RobotId); robot.UserId = receiver.Id; robot.Deliveries.Add(delivery); sender.Robots.Remove(robot); receiver.Robots.Add(robot); sender.SentRobots.Add(delivery); receiver.ReceivedRobots.Add(delivery); this.Context.Deliveries.Update(delivery); this.Context.Robots.Update(robot); this.Context.Users.Update(sender); this.Context.Users.Update(receiver); await this.Context.SaveChangesAsync(); return(delivery.Id); }
public void CreateDelivery_Should_Succeed() { var sender = new User() { Id = "1", Name = "Ivan Ivanov", UserName = "******" }; var receiver = new User() { Id = "2", Name = "Gosho Goshov", UserName = "******" }; var robot = new Robot() { Id = "1", Name = "myrobot", SerialNumber = "232323", UserId = sender.Id }; var transportType = new TransportType() { Id = "4", Name = "bus" }; this.userManager.CreateAsync(sender).GetAwaiter(); this.userManager.CreateAsync(receiver).GetAwaiter(); this.Context.Robots.Add(robot); this.Context.TransportTypes.Add(transportType); this.Context.SaveChanges(); var deliveryInput = new DeliveryInputModel { StartingPoint = "Stara Zagora", DestinationPoint = "Plovdiv", Price = 2.50m, RobotId = robot.Id, SenderId = sender.Id, ReceiverUsername = receiver.UserName, TransportTypeName = transportType.Name }; var result = this.deliveryService.Create(deliveryInput); var delivery = this.Context.Deliveries.First(); result.Should().NotBeNull(); delivery.Should().NotBeNull() .And.Subject.Should().BeEquivalentTo(new { Id = result, SenderId = sender.Id, ReceiverId = receiver.Id, RobotId = robot.Id, TransportTypeId = transportType.Id }, options => options.ExcludingMissingMembers()); }