Code Duplication    Length = 22-24 lines in 4 locations

tests/unit/test_main.py 4 locations

@@ 578-601 (lines=24) @@
575
        self.scheduler.get_maintenance.assert_called_once_with("1234")
576
        self.scheduler.update.assert_not_called()
577
578
    async def test_update_mw_case_5(self):
579
        """Test successful update."""
580
        self.napp.controller.loop = asyncio.get_running_loop()
581
        start1 = datetime.now(pytz.utc) + timedelta(days=1)
582
        end1 = start1 + timedelta(hours=6)
583
        self.scheduler.get_maintenance.return_value = MW.model_construct(
584
            id="1234",
585
            start=start1.replace(microsecond=0),
586
            end=end1.replace(microsecond=0),
587
            switches=["00:00:00:00:00:00:12:23"],
588
        )
589
        start_new = datetime.now(pytz.utc) + timedelta(days=1, hours=3)
590
        end_new = start_new - timedelta(hours=5)
591
        payload = {
592
            "start": start_new.strftime(TIME_FMT),
593
            "end": end_new.strftime(TIME_FMT),
594
        }
595
        url = f"{self.base_endpoint}/1234"
596
        response = await self.api.patch(url, json=payload)
597
        current_data = response.json()
598
        assert response.status_code == 400
599
        assert current_data["description"] == "end: Value error, End before start not allowed"
600
        self.scheduler.get_maintenance.assert_called_once_with("1234")
601
        self.scheduler.update.assert_not_called()
602
603
    async def test_update_mw_case_6(self):
604
        """Test successful update."""
@@ 810-832 (lines=23) @@
807
        self.scheduler.get_maintenance.assert_called_once_with("1234")
808
        self.scheduler.update.assert_not_called()
809
810
    async def test_extend_case_6(self):
811
        """Test maintenance already finished."""
812
        self.napp.controller.loop = asyncio.get_running_loop()
813
        start1 = datetime.now(pytz.utc) - timedelta(hours=3)
814
        end1 = start1 + timedelta(hours=2)
815
        self.scheduler.get_maintenance.return_value = MW.model_construct(
816
            id="1234",
817
            start=start1.replace(microsecond=0),
818
            end=end1.replace(microsecond=0),
819
            switches=["00:00:00:00:00:00:12:23"],
820
            status="finished",
821
        )
822
        url = f"{self.base_endpoint}/1234/extend"
823
        payload = {"minutes": 240}
824
        response = await self.api.patch(url, json=payload)
825
        assert response.status_code == 400
826
        current_data = response.json()
827
        assert (
828
            current_data["description"]
829
            == "Maintenance window 1234 has already finished"
830
        )
831
        self.scheduler.get_maintenance.assert_called_once_with("1234")
832
        self.scheduler.update.assert_not_called()
833
834
    async def test_extend_case_7(self):
835
        """Test no maintenace found."""
@@ 787-808 (lines=22) @@
784
        assert current_data["description"] == "Minutes of extension must be integer"
785
        self.scheduler.update.assert_not_called()
786
787
    async def test_extend_case_5(self):
788
        """Test maintenance did not start."""
789
        self.napp.controller.loop = asyncio.get_running_loop()
790
        start1 = datetime.now(pytz.utc) + timedelta(hours=3)
791
        end1 = start1 + timedelta(hours=4)
792
        self.scheduler.get_maintenance.return_value = MW.model_construct(
793
            id="1234",
794
            start=start1.replace(microsecond=0),
795
            end=end1.replace(microsecond=0),
796
            switches=["00:00:00:00:00:00:12:23"],
797
            status="pending",
798
        )
799
        url = f"{self.base_endpoint}/1234/extend"
800
        payload = {"minutes": 240}
801
        response = await self.api.patch(url, json=payload)
802
        assert response.status_code == 400
803
        current_data = response.json()
804
        assert (
805
            current_data["description"] == "Maintenance window 1234 has not yet started"
806
        )
807
        self.scheduler.get_maintenance.assert_called_once_with("1234")
808
        self.scheduler.update.assert_not_called()
809
810
    async def test_extend_case_6(self):
811
        """Test maintenance already finished."""
@@ 555-576 (lines=22) @@
552
            )
553
        )
554
555
    async def test_update_mw_case_4(self):
556
        """Test successful update."""
557
        self.napp.controller.loop = asyncio.get_running_loop()
558
        start1 = datetime.now(pytz.utc) + timedelta(days=1)
559
        end1 = start1 + timedelta(hours=6)
560
        self.scheduler.get_maintenance.return_value = MW.model_construct(
561
            id="1234",
562
            start=start1.replace(microsecond=0),
563
            end=end1.replace(microsecond=0),
564
            switches=["00:00:00:00:00:00:12:23"],
565
        )
566
        start_new = datetime.now(pytz.utc) - timedelta(days=1, hours=3)
567
        payload = {
568
            "start": start_new.strftime(TIME_FMT),
569
        }
570
        url = f"{self.base_endpoint}/1234"
571
        response = await self.api.patch(url, json=payload)
572
        current_data = response.json()
573
        assert response.status_code == 400
574
        assert current_data["description"] == "start: Value error, Start in the past not allowed"
575
        self.scheduler.get_maintenance.assert_called_once_with("1234")
576
        self.scheduler.update.assert_not_called()
577
578
    async def test_update_mw_case_5(self):
579
        """Test successful update."""