public async Task GetRecalcedTermin_Should_Respect_Kontingent_Test_5()
        {
            // arrange
            var data = new Dictionary <int, OrderItem>
            {
                [1] = new OrderItem
                {
                    Id = 1,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("05.12.2019 21:33:49"),
                    Status = OrderStatesInternal.ZumReponierenBereit
                },
                [2] = new OrderItem
                {
                    Id = 2,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("09.12.2019 11:28:36"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [3] = new OrderItem
                {
                    Id = 3,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("10.12.2019 12:07:29"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [4] = new OrderItem
                {
                    Id = 4,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("10.12.2019 17:38:14"),
                    Status = OrderStatesInternal.DigitalisierungAbgebrochen
                }
            };
            var digipoolAccess = new MockDigipoolAccess(data);
            var sut            = new DigitalisierungsTerminManager(digipoolAccess);

            var neuesKontingent = new DigitalisierungsKontingent
            {
                AnzahlAuftraege = 4,
                InAnzahlTagen   = 1
            };

            // act
            await sut.RecalcTermine(DigitalisierungsKategorie.Amt, neuesKontingent);

            // assert
            var digipool = await digipoolAccess.GetDigipool();

            digipool[0].TerminDigitalisierung.Should().Be(CreateDate("09.12.2019 11:28:36"));
            digipool[1].TerminDigitalisierung.Should().Be(CreateDate("09.12.2019 11:28:36"));
        }
        public async Task GetRecalcedTermin_Should_Respect_Kontingent_Test_1()
        {
            // arrange
            var data = new Dictionary <int, OrderItem>
            {
                [1] = new OrderItem
                {
                    Id = 1,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("25.11.2019 07:16:30"),
                    Status = OrderStatesInternal.Abgeschlossen
                },
                [2] = new OrderItem
                {
                    Id = 2,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("29.11.2019 16:25:36"),
                    Status = OrderStatesInternal.Ausgeliehen
                },
                [3] = new OrderItem
                {
                    Id = 3,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("06.12.2019 08:37:45"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [4] = new OrderItem
                {
                    Id = 4,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("12.12.2019 08:37:45"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                }
            };
            var digipoolAccess = new MockDigipoolAccess(data);
            var sut            = new DigitalisierungsTerminManager(digipoolAccess);

            var neuesKontingent = new DigitalisierungsKontingent
            {
                AnzahlAuftraege = 1,
                InAnzahlTagen   = 10
            };

            // act
            await sut.RecalcTermine(DigitalisierungsKategorie.Amt, neuesKontingent);

            // assert
            var digipool = await digipoolAccess.GetDigipool();

            digipool[0].TerminDigitalisierung.Should().Be(CreateDate("13.12.2019 16:25:36"));
            digipool[1].TerminDigitalisierung.Should().Be(CreateDate("27.12.2019 16:25:36"));
        }
        public async Task GetRecalcedTermin_Should_Respect_Kontingent_Test_4()
        {
            // arrange
            var data = new Dictionary <int, OrderItem>
            {
                [1] = new OrderItem
                {
                    Id = 1,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("17.11.2019 09:19:58"),
                    Status = OrderStatesInternal.Abgeschlossen
                },
                [2] = new OrderItem
                {
                    Id = 2,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("17.12.2019 13:25:36"),
                    Status = OrderStatesInternal.Ausgeliehen
                }
            };
            var digipoolAccess = new MockDigipoolAccess(data);
            var sut            = new DigitalisierungsTerminManager(digipoolAccess);

            var neuesKontingent = new DigitalisierungsKontingent
            {
                AnzahlAuftraege = 3,
                InAnzahlTagen   = 1
            };

            // act
            await sut.RecalcTermine(DigitalisierungsKategorie.Amt, neuesKontingent);

            // assert
            var items = await digipoolAccess.GetLatestDigitalisierungsTermine(null, DateTime.MinValue, DigitalisierungsKategorie.Amt);

            items[0].Termin.Should().Be(CreateDate("17.11.2019 09:19:58"), "Keine Anpassung, da kein Auftrag im Status 'für digitalisierung bereit'");
            items[1].Termin.Should().Be(CreateDate("17.12.2019 13:25:36"), "Keine Anpassung, da kein Auftrag im Status 'für digitalisierung bereit'");
        }
        public async Task GetRecalcedTermin_Should_Respect_Kontingent_Test_Own_2()
        {
            // arrange
            var data = new Dictionary <int, OrderItem>
            {
                [1] = new OrderItem
                {
                    Id = 1,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("11.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [2] = new OrderItem
                {
                    Id = 2,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("11.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [3] = new OrderItem
                {
                    Id = 3,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("13.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [4] = new OrderItem
                {
                    Id = 4,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("13.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [5] = new OrderItem
                {
                    Id = 5,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("13.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [6] = new OrderItem
                {
                    Id = 6,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("13.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [7] = new OrderItem
                {
                    Id = 7,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("13.02.2019 00:00:00"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                }
            };
            var digipoolAccess = new MockDigipoolAccess(data);
            var sut            = new DigitalisierungsTerminManager(digipoolAccess);

            var neuesKontingent = new DigitalisierungsKontingent
            {
                AnzahlAuftraege = 2,
                InAnzahlTagen   = 1
            };

            // act
            await sut.RecalcTermine(DigitalisierungsKategorie.Termin, neuesKontingent);

            // assert
            var digipool = await digipoolAccess.GetDigipool();

            var json = JsonConvert.SerializeObject(digipool);

            digipool[0].TerminDigitalisierung.Should().Be(CreateDate("11.02.2019 00:00:00"));
            digipool[1].TerminDigitalisierung.Should().Be(CreateDate("11.02.2019 00:00:00"));
            digipool[2].TerminDigitalisierung.Should().Be(CreateDate("12.02.2019 00:00:00"));
            digipool[3].TerminDigitalisierung.Should().Be(CreateDate("12.02.2019 00:00:00"));
            digipool[4].TerminDigitalisierung.Should().Be(CreateDate("13.02.2019 00:00:00"));
            digipool[5].TerminDigitalisierung.Should().Be(CreateDate("13.02.2019 00:00:00"));
            digipool[6].TerminDigitalisierung.Should().Be(CreateDate("14.02.2019 00:00:00"));
        }
        public async Task GetRecalcedTermin_Should_Respect_Kontingent_Test_Own()
        {
            // arrange
            var data = new Dictionary <int, OrderItem>
            {
                [1] = new OrderItem
                {
                    Id = 1,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("16.01.2020 09:59:27"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [2] = new OrderItem
                {
                    Id = 2,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("16.01.2020 09:59:27"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [3] = new OrderItem
                {
                    Id = 3,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("16.01.2020 09:59:27"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [4] = new OrderItem
                {
                    Id = 4,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Termin,
                    TerminDigitalisierung     = CreateDate("16.01.2020 09:59:27"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [5] = new OrderItem
                {
                    Id = 5,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Oeffentlichkeit,
                    TerminDigitalisierung     = CreateDate("08.05.2019 11:48:06"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [6] = new OrderItem
                {
                    Id = 6,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("08.05.2019 11:34:11"),
                    Status = OrderStatesInternal.FuerAushebungBereit
                },
                [7] = new OrderItem
                {
                    Id = 7,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("07.05.2019 13:39:49"),
                    Status = OrderStatesInternal.AushebungsauftragErstellt
                }
            };
            var digipoolAccess = new MockDigipoolAccess(data);
            var sut            = new DigitalisierungsTerminManager(digipoolAccess);

            var neuesKontingent = new DigitalisierungsKontingent
            {
                AnzahlAuftraege = 2,
                InAnzahlTagen   = 1
            };

            // act
            await sut.RecalcTermine(DigitalisierungsKategorie.Termin, neuesKontingent);

            // assert
            var digipool = await digipoolAccess.GetDigipool();

            var json = JsonConvert.SerializeObject(digipool);

            digipool[0].TerminDigitalisierung.Should().Be(CreateDate("16.01.2020 09:59:27"));
            digipool[1].TerminDigitalisierung.Should().Be(CreateDate("16.01.2020 09:59:27"));
            digipool[2].TerminDigitalisierung.Should().Be(CreateDate("17.01.2020 09:59:27"));
            digipool[3].TerminDigitalisierung.Should().Be(CreateDate("17.01.2020 09:59:27"));
        }
        public async Task GetRecalcedTermin_Should_Respect_Kontingent_Test_3()
        {
            // arrange
            var data = new Dictionary <int, OrderItem>
            {
                [1] = new OrderItem
                {
                    Id = 1,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("07.11.2019 13:47:10"),
                    Status = OrderStatesInternal.ZumReponierenBereit
                },
                [2] = new OrderItem
                {
                    Id = 2,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("13.11.2019 13:47:10"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [3] = new OrderItem
                {
                    Id = 3,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("19.12.2019 13:47:10"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [4] = new OrderItem
                {
                    Id = 4,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("25.12.2019 13:47:10"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                },
                [5] = new OrderItem
                {
                    Id = 5,
                    DigitalisierungsKategorie = DigitalisierungsKategorie.Amt,
                    TerminDigitalisierung     = CreateDate("29.12.2019 13:47:10"),
                    Status = OrderStatesInternal.FuerDigitalisierungBereit
                }
            };
            var digipoolAccess = new MockDigipoolAccess(data);
            var sut            = new DigitalisierungsTerminManager(digipoolAccess);

            var neuesKontingent = new DigitalisierungsKontingent
            {
                AnzahlAuftraege = 2,
                InAnzahlTagen   = 1
            };

            // act
            await sut.RecalcTermine(DigitalisierungsKategorie.Amt, neuesKontingent);

            // assert
            var digipool = await digipoolAccess.GetDigipool();

            digipool[0].TerminDigitalisierung.Should().Be(CreateDate("13.11.2019 13:47:10"));
            digipool[1].TerminDigitalisierung.Should().Be(CreateDate("13.11.2019 13:47:10"));
            digipool[2].TerminDigitalisierung.Should().Be(CreateDate("14.11.2019 13:47:10"));
            digipool[3].TerminDigitalisierung.Should().Be(CreateDate("14.11.2019 13:47:10"));
        }