public void TestFRVFahrzeitenMehrereWochenSuccess()
        {
            FrachtfuehrerRahmenvertrag frv = new FrachtfuehrerRahmenvertrag();
            frv.GueltigkeitAb = DateTime.Parse("29.07.2013"); // Montag
            frv.GueltigkeitBis = DateTime.Parse("10.08.2013"); // Montag zwei Wochen spaeter
            frv.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Monday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Saturday, Uhrzeit = 7 },
                new Startzeit() { Wochentag = DayOfWeek.Sunday, Uhrzeit = 11 }
            };

            List<DateTime> zeiten = frv.GetAbfahrtszeitenAbsolut(DateTime.Parse("01.07.2013"), DateTime.Parse("20.08.2013"));
            Assert.IsTrue(zeiten.Count == 5);
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("29.07.2013 08:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("05.08.2013 08:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("03.08.2013 07:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("10.08.2013 07:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("04.08.2013 11:00:00")));
        }
        public void TestFRVFahrzeitenVollstaendigInGueltikeitszeitraumSuccess()
        {
            FrachtfuehrerRahmenvertrag frv = new FrachtfuehrerRahmenvertrag();
            frv.GueltigkeitAb = DateTime.Parse("29.07.2013"); // Montag
            frv.GueltigkeitBis = DateTime.Parse("04.08.2013"); // Sonntag
            frv.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Monday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Wednesday, Uhrzeit = 9 },
                new Startzeit() { Wochentag = DayOfWeek.Wednesday, Uhrzeit = 12 },
                new Startzeit() { Wochentag = DayOfWeek.Friday, Uhrzeit = 6 }
            };

            List<DateTime> zeiten = frv.GetAbfahrtszeitenAbsolut(frv.GueltigkeitAb, frv.GueltigkeitBis);
            Assert.IsTrue(zeiten.Count == 4);
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("29.07.2013 08:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("31.07.2013 09:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("31.07.2013 12:00:00")));
            Assert.IsTrue(zeiten.Contains(DateTime.Parse("02.08.2013 06:00:00")));
        }
        public void TestFRVFahrzeitenAußerhalbGueltigkeitSuccess()
        {
            FrachtfuehrerRahmenvertrag frv = new FrachtfuehrerRahmenvertrag();
            frv.GueltigkeitAb = DateTime.Parse("29.07.2013"); // Montag
            frv.GueltigkeitBis = DateTime.Parse("04.08.2013"); // Sonntag
            frv.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Monday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Wednesday, Uhrzeit = 9 },
                new Startzeit() { Wochentag = DayOfWeek.Wednesday, Uhrzeit = 12 },
                new Startzeit() { Wochentag = DayOfWeek.Friday, Uhrzeit = 6 }
            };

            List<DateTime> zeiten = frv.GetAbfahrtszeitenAbsolut(DateTime.Parse("05.08.2013"), DateTime.Parse("10.09.2013"));
            Assert.IsTrue(zeiten.Count == 0);
        }
        public static void InitializeTests(TestContext testContext)
        {
            log4net.Config.XmlConfigurator.Configure();

            PersistenceServicesFactory.CreateSimpleMySQLPersistenceService(out persistenceService, out transactionService);

            auftragsServicesFürTransportplanungMock = new Mock<IAuftragServicesFürTransportplanung>();

            var transportnetzServicesFürTransportplanungMock = new Mock<ITransportnetzServicesFürTransportplanung>();

            hamburgLokation = new Lokation("Hamburg", TimeSpan.Parse("10"), 10);
            hamburgLokation.LokNr = 1;
            bremerhavenLokation = new Lokation("Bremerhaven", TimeSpan.Parse("15"), 15);
            bremerhavenLokation.LokNr = 2;
            rotterdamLokation = new Lokation("Rotterdam", TimeSpan.Parse("20"), 20);
            rotterdamLokation.LokNr = 3;
            shanghaiLokation = new Lokation("Shanghai", TimeSpan.Parse("10"), 10);
            shanghaiLokation.LokNr = 4;

            hh_bhv = new Transportbeziehung(hamburgLokation, bremerhavenLokation);
            hh_bhv.TbNr = 1;
            bhv_sh = new Transportbeziehung(bremerhavenLokation, shanghaiLokation);
            bhv_sh.TbNr = 2;
            hh_rtd = new Transportbeziehung(hamburgLokation, rotterdamLokation);
            hh_rtd.TbNr = 3;
            rtd_sh = new Transportbeziehung(rotterdamLokation, shanghaiLokation);
            rtd_sh.TbNr = 4;

            List<List<Transportbeziehung>> path_hh_bhv = new List<List<Transportbeziehung>>();
            path_hh_bhv.Add(new List<Transportbeziehung>() { hh_bhv });
            transportnetzServicesFürTransportplanungMock.Setup(tns => tns.GeneriereAllePfadeVonBis(hamburgLokation.LokNr, bremerhavenLokation.LokNr))
                .Returns(path_hh_bhv);
            List<List<Transportbeziehung>> path_hh_sh = new List<List<Transportbeziehung>>();
            path_hh_sh.Add(new List<Transportbeziehung>() { hh_bhv, bhv_sh });
            path_hh_sh.Add(new List<Transportbeziehung>() { hh_rtd, rtd_sh });
            transportnetzServicesFürTransportplanungMock.Setup(tns => tns.GeneriereAllePfadeVonBis(hamburgLokation.LokNr, shanghaiLokation.LokNr))
                .Returns(path_hh_sh);

            var unterbeauftragungsServicesMock = new Mock<IUnterbeauftragungServicesFürTransportplanung>();

            // Transportbeauftragung ist im Komponententest unwesentlich
            unterbeauftragungsServicesMock.Setup(ubs => ubs.BeauftrageTransport(It.IsAny<int>(), It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>()))
               .Returns(1);

            FrachtfuehrerRahmenvertrag frv_hh_bhv = new FrachtfuehrerRahmenvertrag();
            frv_hh_bhv.GueltigkeitAb = DateTime.Parse("01.01.2013");
            frv_hh_bhv.GueltigkeitBis = DateTime.Parse("31.12.2013");
            frv_hh_bhv.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Tuesday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Wednesday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Friday, Uhrzeit = 8 }
            };
            frv_hh_bhv.KapazitaetTEU = 2;
            frv_hh_bhv.KostenFix = 1000;
            frv_hh_bhv.KostenProTEU = 100;
            frv_hh_bhv.KostenProFEU = 200;
            frv_hh_bhv.FuerTransportAufTransportbeziehung = hh_bhv.TbNr;
            frv_hh_bhv.Zeitvorgabe = TimeSpan.Parse("2"); // 2 Tage
            frv_hh_bhv.FrvNr = 1;

            FrachtfuehrerRahmenvertrag frv_bhv_sh = new FrachtfuehrerRahmenvertrag();
            frv_bhv_sh.GueltigkeitAb = DateTime.Parse("01.01.2013");
            frv_bhv_sh.GueltigkeitBis = DateTime.Parse("31.12.2013");
            frv_bhv_sh.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Monday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Thursday, Uhrzeit = 10 },
                new Startzeit() { Wochentag = DayOfWeek.Saturday, Uhrzeit = 8 }
            };
            frv_bhv_sh.KapazitaetTEU = 20;
            frv_bhv_sh.KostenFix = 2000;
            frv_bhv_sh.KostenProTEU = 200;
            frv_bhv_sh.KostenProFEU = 400;
            frv_bhv_sh.FuerTransportAufTransportbeziehung = bhv_sh.TbNr;
            frv_bhv_sh.Zeitvorgabe = TimeSpan.Parse("5"); // 5 Tage
            frv_bhv_sh.FrvNr = 2;

            FrachtfuehrerRahmenvertrag frv_hh_rtd = new FrachtfuehrerRahmenvertrag();
            frv_hh_rtd.GueltigkeitAb = DateTime.Parse("01.09.2013");
            frv_hh_rtd.GueltigkeitBis = DateTime.Parse("31.12.2013");
            frv_hh_rtd.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Monday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Thursday, Uhrzeit = 10 },
                new Startzeit() { Wochentag = DayOfWeek.Saturday, Uhrzeit = 8 }
            };
            frv_hh_rtd.KapazitaetTEU = 20;
            frv_hh_rtd.KostenFix = 2000;
            frv_hh_rtd.KostenProTEU = 200;
            frv_hh_rtd.KostenProFEU = 400;
            frv_hh_rtd.FuerTransportAufTransportbeziehung = hh_rtd.TbNr;
            frv_hh_rtd.Zeitvorgabe = TimeSpan.Parse("3"); // 3 Tage
            frv_hh_rtd.FrvNr = 3;

            FrachtfuehrerRahmenvertrag frv_rtd_sh = new FrachtfuehrerRahmenvertrag();
            frv_rtd_sh.GueltigkeitAb = DateTime.Parse("01.09.2013");
            frv_rtd_sh.GueltigkeitBis = DateTime.Parse("31.12.2013");
            frv_rtd_sh.Abfahrtszeiten = new System.Collections.Generic.List<Startzeit>() 
            { 
                new Startzeit() { Wochentag = DayOfWeek.Monday, Uhrzeit = 8 },
                new Startzeit() { Wochentag = DayOfWeek.Thursday, Uhrzeit = 10 },
                new Startzeit() { Wochentag = DayOfWeek.Saturday, Uhrzeit = 8 }
            };
            frv_rtd_sh.KapazitaetTEU = 20;
            frv_rtd_sh.KostenFix = 3000;
            frv_rtd_sh.KostenProTEU = 300;
            frv_rtd_sh.KostenProFEU = 400;
            frv_rtd_sh.FuerTransportAufTransportbeziehung = rtd_sh.TbNr;
            frv_rtd_sh.Zeitvorgabe = TimeSpan.Parse("7"); // 7 Tage
            frv_rtd_sh.FrvNr = 4;

            unterbeauftragungsServicesMock.Setup(ubs => ubs.FindGültigFür(hh_bhv.TbNr, It.IsAny<DateTime>(), It.IsAny<DateTime>()))
                .Returns((long _, DateTime zeitspanneVon, DateTime zeitspanneBis)
                 =>
                 {
                     if ((zeitspanneVon >= frv_hh_bhv.GueltigkeitAb && zeitspanneVon <= frv_hh_bhv.GueltigkeitBis) ||
                         (zeitspanneBis >= frv_hh_bhv.GueltigkeitAb && zeitspanneBis <= frv_hh_bhv.GueltigkeitBis) ||
                         (zeitspanneVon <= frv_hh_bhv.GueltigkeitAb && zeitspanneBis >= frv_hh_bhv.GueltigkeitBis))
                     {
                         List<FrachtfuehrerRahmenvertrag> lfrv = new List<FrachtfuehrerRahmenvertrag>();
                         lfrv.Add(frv_hh_bhv);
                         return lfrv;
                     }
                     else
                     {
                         return new List<FrachtfuehrerRahmenvertrag>();
                     }
                 });

            unterbeauftragungsServicesMock.Setup(ubs => ubs.FindGültigFür(bhv_sh.TbNr, It.IsAny<DateTime>(), It.IsAny<DateTime>()))
                .Returns((long _, DateTime zeitspanneVon, DateTime zeitspanneBis)
                 =>
                {
                    if ((zeitspanneVon >= frv_bhv_sh.GueltigkeitAb && zeitspanneVon <= frv_bhv_sh.GueltigkeitBis) ||
                        (zeitspanneBis >= frv_bhv_sh.GueltigkeitAb && zeitspanneBis <= frv_bhv_sh.GueltigkeitBis) ||
                        (zeitspanneVon <= frv_bhv_sh.GueltigkeitAb && zeitspanneBis >= frv_bhv_sh.GueltigkeitBis))
                    {
                        List<FrachtfuehrerRahmenvertrag> lfrv = new List<FrachtfuehrerRahmenvertrag>();
                        lfrv.Add(frv_bhv_sh);
                        return lfrv;
                    }
                    else
                    {
                        return new List<FrachtfuehrerRahmenvertrag>();
                    }
                });

            unterbeauftragungsServicesMock.Setup(ubs => ubs.FindGültigFür(hh_rtd.TbNr, It.IsAny<DateTime>(), It.IsAny<DateTime>()))
                .Returns((long _, DateTime zeitspanneVon, DateTime zeitspanneBis)
                 =>
                {
                    if ((zeitspanneVon >= frv_hh_rtd.GueltigkeitAb && zeitspanneVon <= frv_hh_rtd.GueltigkeitBis) ||
                        (zeitspanneBis >= frv_hh_rtd.GueltigkeitAb && zeitspanneBis <= frv_hh_rtd.GueltigkeitBis) ||
                        (zeitspanneVon <= frv_hh_rtd.GueltigkeitAb && zeitspanneBis >= frv_hh_rtd.GueltigkeitBis))
                    {
                        List<FrachtfuehrerRahmenvertrag> lfrv = new List<FrachtfuehrerRahmenvertrag>();
                        lfrv.Add(frv_hh_rtd);
                        return lfrv;
                    }
                    else
                    {
                        return new List<FrachtfuehrerRahmenvertrag>();
                    }
                });

            unterbeauftragungsServicesMock.Setup(ubs => ubs.FindGültigFür(rtd_sh.TbNr, It.IsAny<DateTime>(), It.IsAny<DateTime>()))
                .Returns((long _, DateTime zeitspanneVon, DateTime zeitspanneBis)
                 =>
                {
                    if ((zeitspanneVon >= frv_rtd_sh.GueltigkeitAb && zeitspanneVon <= frv_rtd_sh.GueltigkeitBis) ||
                        (zeitspanneBis >= frv_rtd_sh.GueltigkeitAb && zeitspanneBis <= frv_rtd_sh.GueltigkeitBis) ||
                        (zeitspanneVon <= frv_rtd_sh.GueltigkeitAb && zeitspanneBis >= frv_rtd_sh.GueltigkeitBis))
                    {
                        List<FrachtfuehrerRahmenvertrag> lfrv = new List<FrachtfuehrerRahmenvertrag>();
                        lfrv.Add(frv_rtd_sh);
                        return lfrv;
                    }
                    else
                    {
                        return new List<FrachtfuehrerRahmenvertrag>();
                    }
                });

            var timeServicesMock = new Mock<ITimeServices>();
            //// Wir müssen einen fixen Zeitpunkt simulieren, ansonsten sind bei der Ausführung/Planung evtl. die Verträge oder Angebote abgelaufen
            timeServicesMock.Setup(ts => ts.Now)
               .Returns(DateTime.Parse("31.08.2013 12:00"));

            transportplanungsServices = new TransportplanungKomponenteFacade(persistenceService, transactionService, auftragsServicesFürTransportplanungMock.Object, unterbeauftragungsServicesMock.Object as IUnterbeauftragungServicesFürTransportplanung, transportnetzServicesFürTransportplanungMock.Object as ITransportnetzServicesFürTransportplanung, timeServicesMock.Object);
            transportplanungsServicesFuerSendung = transportplanungsServices as ITransportplanungServicesFuerSendung;
            transportplanungsServicesFürAuftrag = transportplanungsServices as ITransportplanungServicesFürAuftrag;
            Assert.IsTrue(transportplanungsServicesFürAuftrag != null);
        }
 public void Save(FrachtfuehrerRahmenvertrag frv)
 {
     persistenceService.Save(frv);
 }