public PackageTracker(IWebPoster webPoster, IGeocodeDb geocodeDb)
        {
            //Todo: This is a bad place to load these:
            var uspsUserName = WebConfigurationManager.AppSettings["UspsUserName"];
            var uspsPassword = WebConfigurationManager.AppSettings["UspsPassword"];

            var fedexKey = WebConfigurationManager.AppSettings["FedexKey"];
            var fedexPassword = WebConfigurationManager.AppSettings["FedexPassword"];
            var fedexAccountNumber = WebConfigurationManager.AppSettings["FedexAccountNumber"];
            var fedexMeterNumber = WebConfigurationManager.AppSettings["FedexMeterNumber"];

            var coreTrackers = new List<ITracker>();
            coreTrackers.Add(new Tracking.Simulation.SimulationTracker());
            coreTrackers.Add(new UpsTracker());
            coreTrackers.Add(new UspsTracker(new PostUtility(), uspsUserName, uspsPassword, true));
            coreTrackers.Add(new FedexTracker(new TrackService(), fedexKey, fedexPassword, fedexAccountNumber, fedexMeterNumber, false));
            //coreTrackers.Add(new DhlTracker(new PostUtility(), "", "");

            var multiTracker = new MultiTracker(coreTrackers);
            var cacheTracker = new CacheTracker(multiTracker);
            var emptyTracker = new EmptyTrackingNumberTracker(cacheTracker);
            var loggingTracker = new LoggingTracker(emptyTracker);
            var sanitizerTracker = new TrackingNumberStandardizerTracker(loggingTracker);
            var geocodingTracker = new GeocodingTracker(sanitizerTracker, geocodeDb);
            var errorHandlerTracker = new ErrorHandlerTracker(geocodingTracker);

            _defaultTracker = errorHandlerTracker;
        }
        public void UseDownstreamTracker()
        {
            var downstreamTracker = MockRepository.GenerateMock<ITracker>();
            var expectedTrackingData = new TrackingData();
            downstreamTracker.Expect(x => x.GetTrackingData("abc")).Return(expectedTrackingData);

            var t = new LoggingTracker(downstreamTracker);
            var actualTrackingData = t.GetTrackingData("abc");

            Assert.AreEqual(expectedTrackingData, actualTrackingData);
        }
        public void UseDownstreamTracker()
        {
            var downstreamTracker    = MockRepository.GenerateMock <ITracker>();
            var expectedTrackingData = new TrackingData();

            downstreamTracker.Expect(x => x.GetTrackingData("abc")).Return(expectedTrackingData);

            var t = new LoggingTracker(downstreamTracker);
            var actualTrackingData = t.GetTrackingData("abc");

            Assert.AreEqual(expectedTrackingData, actualTrackingData);
        }