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);
                }
            }
        }
示例#4
0
        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;
            }
        }