public void RegisterPortCall_ReturnsBadRequest_WhenForeignKeyConstraintFails() { using (var factory = new ContextFactory()) { using (var context = factory.CreateContext()) { // Arrange var seedContext = SeedContext(context); var controller = new PortCallController(seedContext); var PortCall = new PortCall { PortCallStatusId = -1 }; // Act var result = controller.RegisterPortCall(PortCall); // Assert var badRequestResult = Assert.IsType <BadRequestObjectResult>(result); Assert.IsType <DbUpdateException>(badRequestResult.Value); } } }
public IActionResult SetStatusAwaitingClearance(int portCallId) { try { if (!_context.PortCall.Any(pc => pc.PortCallId == portCallId)) { return(NotFound("Port call with id: " + portCallId + " could not be found in database.")); } PortCall portCall = _context.PortCall.Where(pc => pc.PortCallId == portCallId).FirstOrDefault(); portCall.PortCallStatusId = Constants.Integers.DatabaseTableIds.PORT_CALL_STATUS_AWAITING_CLEARANCE; _context.Update(portCall); _context.SaveChanges(); portCall = _context.PortCall.Where(pc => pc.PortCallId == portCallId) .Include(pc => pc.PortCallStatus) .FirstOrDefault(); return(Json(portCall)); } catch (DbUpdateException ex) when(ex.InnerException is Npgsql.PostgresException) { Npgsql.PostgresException innerEx = (Npgsql.PostgresException)ex.InnerException; return(BadRequest("PostgreSQL Error Code: " + innerEx.SqlState)); } }
public void RegisterPortCall_ReturnsBadRequest_WhenModelStateIsInvalid() { using (var factory = new ContextFactory()) { using (var context = factory.CreateContext()) { // Arrange var seedContext = SeedContext(context); var controller = new PortCallController(seedContext); controller.ModelState.AddModelError("Name", "Required"); var portCall = new PortCall { PortCallStatusId = 1, ShipId = 1, LocationId = 1 }; // Act var result = controller.RegisterPortCall(portCall); // Assert var badRequestResult = Assert.IsType <BadRequestObjectResult>(result); Assert.IsType <SerializableError>(badRequestResult.Value); } } }
public IActionResult CertificateOfClearanceToken(int portCallId) { try { var userId = this.GetUserId(); var dbUser = _context.User.Where(u => u.UserId.ToString().Equals(userId)) .Include(u => u.Organization.OrganizationType) .FirstOrDefault(); var userRole = this.GetUserRoleName(); if (dbUser == null) { throw new ArgumentNullException(); } var portCall = new PortCall(); if (userRole == UserRoles.Admin || userRole == UserRoles.SuperAdmin) { portCall = _context.PortCall .Include(x => x.Location) .ThenInclude(x => x.Country) .Include(x => x.NextLocation) .Include(x => x.PersonOnBoard) .ThenInclude(x => x.PersonOnBoardType) .Include(x => x.Ship) .Include(x => x.PreviousLocation) .Where(pc => pc.PortCallStatusId != Constants.Integers.DatabaseTableIds.PORT_CALL_STATUS_DELETED) .FirstOrDefault(pc => pc.PortCallId == portCallId); } else if (userRole == UserRoles.Agent || userRole == UserRoles.Customs || userRole == UserRoles.HealthAgency) { portCall = _context.PortCall .Include(x => x.Location) .ThenInclude(x => x.Country) .Include(x => x.NextLocation) .Include(x => x.PersonOnBoard) .ThenInclude(x => x.PersonOnBoardType) .Include(x => x.Ship) .Include(x => x.PreviousLocation) .Include(x => x.OrganizationPortCall) .Where(pc => pc.OrganizationPortCall.Any(x => x.OrganizationId == dbUser.OrganizationId) && pc.PortCallStatusId != Constants.Integers.DatabaseTableIds.PORT_CALL_STATUS_DELETED) .FirstOrDefault(pc => pc.PortCallId == portCallId); } if (portCall == null) { throw new ArgumentNullException("Port Call not found"); } if (portCall.PortCallStatusId != Constants.Integers.DatabaseTableIds.PORT_CALL_STATUS_CLEARED) { throw new InvalidDataException("Port Call not cleared"); } //Generate token byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary()); byte[] key = Guid.NewGuid().ToByteArray(); string token = Convert.ToBase64String(time.Concat(key).ToArray()); var url = "certificateOfClearance/" + portCallId.ToString() + "?token=" + token; return(Json(url)); } catch (Exception ex) { Logger.Error(ex); Logger.Error(ex.Message); Logger.Error(ex.InnerException); Logger.Error(ex.StackTrace); throw ex; } }