コード例 #1
0
        public void Get_all_future_hops_should_return_HopArrivalModel_list()
        {
            // Arrange
            HopArrivalModel latest = new HopArrivalModel()
            {
            };
            TruckModel closestTruck = new TruckModel()
            {
            };
            RecipientModel recipient = new RecipientModel
            {
                FirstName  = "Rudi",
                LastName   = "Recipient",
                Street     = "Poststraße",
                PostalCode = "A-1070",
                City       = "Poststadt"
            };
            ParcelModel parcel = new ParcelModel {
                Recipient = recipient, Weight = 1.0f
            };

            // Act
            var result = warehouse.GetAllFutureHops(latest, closestTruck, parcel);

            // Assert
            Assert.IsInstanceOfType(result, typeof(IList <HopArrivalModel>));
        }
コード例 #2
0
        public bool ReportHop(HopArrivalModel hopModel)
        {
            try
            {
                var truck     = _truckRepository.GetByCode(hopModel.Code);
                var warehouse = _warehouseRepository.GetByCode(hopModel.Code);
                var parcel    = _parcelRepository.GetByTrackingCode(hopModel.TrackingId);

                if (truck == null && warehouse == null)
                {
                    throw new Exception("Location code invalid");
                }
                if (parcel == null)
                {
                    throw new Exception("Parcel trackingId invalid");
                }

                _hopRepository.Create(Mapper.Map <HopArrivalModel, HopArrivalDTO>(hopModel));

                _logger.Info(string.Format("Parcel '{0}' has been scanned at LocationCode '{1}'. Timestamp: {2}", hopModel.TrackingId, hopModel.Code, hopModel.DateTime));
                return(true);
            }
            catch (Exception ex)
            {
                throw new BLException("BL error reporting hop: " + ex.Message, ex);
            }
        }
コード例 #3
0
        public void ValidateHop_should_return_true()
        {
            // Arrange
            HopArrivalModel hop = new HopArrivalModel()
            {
                Code = "MOCK", TrackingId = "MOCKCODE", DateTime = DateTime.Now
            };

            // Act
            var result = _tl.ValidateHop(hop);

            // Assert
            Assert.IsTrue(result);
        }
コード例 #4
0
        public void Report_hop_should_return_true()
        {
            var hop = new HopArrivalModel
            {
                Code       = "1234",
                DateTime   = DateTime.Now,
                TrackingId = "12345ABC"
            };

            var recipient = new RecipientDTO
            {
                FirstName  = "Rudi",
                LastName   = "Recipient",
                Street     = "Poststraße",
                PostalCode = "A-1070",
                City       = "Poststadt"
            };
            var parcel = new ParcelDTO {
                Recipient = recipient, Weight = 1.0f, TrackingCode = "MOCKCODE"
            };

            var ware = new WarehouseDTO
            {
                Code        = "1234",
                Description = "root warehouse",
                Duration    = 12,
                Id          = 3
            };

            var truck = new TruckDTO
            {
                Code        = "1234",
                Description = "root truck",
                Duration    = 42,
                Id          = 4
            };

            truckMock.Setup(input => input.GetByCode(It.IsAny <string>())).Returns(truck);
            warehouseMock.Setup(input => input.GetByCode(It.IsAny <string>())).Returns(ware);
            parcelMock.Setup(input => input.GetByTrackingCode(It.IsAny <string>())).Returns(parcel);
            var result = tracking.ReportHop(hop);

            // Assert
            Assert.IsTrue(result);
        }
コード例 #5
0
        public bool ReportParcelHop(string parcelTrackingCode, string locationCode)
        {
            try
            {
                // i.   Validation of data
                HopArrivalModel hop = new HopArrivalModel()
                {
                    TrackingId = parcelTrackingCode, Code = locationCode, DateTime = DateTime.Now
                };
                _trackingLogic.ValidateHop(hop);

                // ii.  Write new hop for parcel journey to DB
                return(_trackingLogic.ReportHop(hop));
            }
            catch (Exception ex)
            {
                throw new BLException("BL error reporting hop: " + ex.Message, ex);
            }
        }
コード例 #6
0
        public bool ValidateHop(HopArrivalModel hop)
        {
            try
            {
                if (hop == null)
                {
                    return(false);
                }

                ValidationResult valRes;
                valRes = _hVal.Validate(hop);

                if (!valRes.IsValid)
                {
                    throw new BLException(valRes.Errors, new ArgumentException());
                }
                return(true);
            }
            catch (Exception ex)
            {
                _logger.Error(ex.Message);
                throw new BLException("BL error validating hop: " + ex.Message, ex);
            }
        }
コード例 #7
0
        public IList <HopArrivalModel> GetAllFutureHops(HopArrivalModel latestHop, TruckModel closestTruck, ParcelModel parcelModel)
        {
            _logger.Debug(string.Format("WarehouseLogic.GetAllFutureHops: latestHop: {0}, closestTruck: {1}, parcelModel: {2}", (latestHop != null ? latestHop.Code : "null"), (closestTruck != null ? closestTruck.Code : "null"), (parcelModel != null ? parcelModel.TrackingCode : "null")));
            //Wenn es keinen Truck in Reichweite gibt, wirf eine Exception
            if (closestTruck == null)
            {
                throw new Exception("No truck in range!");
            }

            //Sonst: bereite die Datencontainer vor
            HopArrivalModel closestTruckHop = new HopArrivalModel()
            {
                Code = closestTruck.Code, TrackingId = parcelModel.TrackingCode, DateTime = DateTime.Now                                                       /*TODO!!*/
            };
            List <HopArrivalModel> futureHops = new List <HopArrivalModel>();

            //Wenn der letzte HopReport schon der Truck war, dann gibt es keine weiteren Reports
            //Shortcut evaluation, kann nicht auf null.Code zugreifen!
            // -> leere Liste
            if (latestHop != null && latestHop.Code == closestTruck.Code)
            {
                return(futureHops);
            }


            //Wenn der letzte Report kein Truck war, dann füge den Truck in den Container
            futureHops.Add(closestTruckHop);

            //Wenn der Truck keinen Parent hat, wirf eine exception
            if (closestTruck.Parent == null)
            {
                throw new Exception("Closest truck has no parent!");
            }

            //Sonst: setze den Parent auf den Parent des Zieltrucks
            WarehouseModel parent = closestTruck.Parent;


            //Schleife, bis parent null (Root gefunden)
            int iter = 10; //Forcierter Schleifenabbruch

            while (parent != null && iter-- > 0)
            {
                _logger.Debug(string.Format("comparing parentCode '{0}' to lastHopCode '{1}'", parent.Code, latestHop != null ? latestHop.Code : "null"));
                if (latestHop == null || parent.Code != latestHop.Code)
                {
                    _logger.Debug(string.Format("save parent '{0}' to list", parent.Code));
                    futureHops.Add(new HopArrivalModel()
                    {
                        Code       = parent.Code,
                        TrackingId = parcelModel.TrackingCode,
                        DateTime   = DateTime.Now
                    });
                }
                else
                {
                    _logger.Debug(string.Format("break loop: parent '{0}' ", parent.Code));
                    break;
                }
                parent = Mapper.Map <WarehouseDTO, WarehouseModel>(_warehouseRepository.ParentOf(parent.Code));
            }

            //gib sortierte (TODO) liste an futurehops zurück
            return(futureHops.OrderByDescending(h => h.DateTime).ToList());
        }
コード例 #8
0
 public bool ValidateHop(HopArrivalModel hop)
 {
     return(true);
 }
コード例 #9
0
 public bool ReportHop(HopArrivalModel hopModel)
 {
     return(true);
 }
コード例 #10
0
 public IList <HopArrivalModel> GetAllFutureHops(HopArrivalModel latestHop, TruckModel closestTruck, ParcelModel parcelModel)
 {
     return(new List <HopArrivalModel>());
 }