def test_back_dating_update_with_earlier_days(self, sau_stub):
        """For RT-489, specifically"""
        # Arrange
        StrategicActionUpdateFactory.create(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.SUBMITTED,
            implementation_rag_rating=RAGRating.GREEN,
            reason_for_delays="some text",
            date_created=date.today().replace(day=10) -
            relativedelta(months=3),
            submission_date=date.today().replace(day=10) -
            relativedelta(months=3),
        )
        # Act
        sau = StrategicActionUpdateFactory.build(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.SUBMITTED,
            implementation_rag_rating=RAGRating.GREEN,
            reason_for_delays="some text",
            date_created=date.today().replace(day=20) -
            relativedelta(months=3),
            submission_date=date.today().replace(day=20) -
            relativedelta(months=3),
        )

        # Assert
        self.validate(sau, {ObjectLevelError: ""}, objects_saved=1)

        assert (StrategicActionUpdate.objects.given_month(date.today().replace(
            day=20) - relativedelta(months=3)).count() == 1)
    def test_since_with_filter(self):
        # Arrange
        sc = SupplyChainFactory.create(name="Supply Chain 1")
        sa = StrategicActionFactory.create(name="SA 01", supply_chain=sc)
        sau = StrategicActionUpdateFactory.create(
            status=StrategicActionUpdate.Status.IN_PROGRESS,
            supply_chain=sc,
            strategic_action=sa,
        )

        # Act
        sau_prog = StrategicActionUpdate.objects.since(
            deadline=date.today() - timedelta(days=1),
            supply_chain=sc,
            status=StrategicActionUpdate.Status.IN_PROGRESS,
        )

        sau_comp = StrategicActionUpdate.objects.since(
            deadline=date.today() - timedelta(days=1),
            supply_chain=sc,
            status=StrategicActionUpdate.Status.READY_TO_SUBMIT,
        )

        # Assert
        assert sau_prog[0] == sau
        assert sau_comp.count() == 0
    def test_back_dating_fail(self, sau_stub):
        # Arrange
        sau1 = StrategicActionUpdateFactory.create(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.SUBMITTED,
            implementation_rag_rating=RAGRating.GREEN,
            reason_for_delays="some text",
            date_created=date.today().replace(day=20) -
            relativedelta(months=3),
            submission_date=date.today().replace(day=20) -
            relativedelta(months=3),
        )

        # Act
        new = StrategicActionUpdateFactory.build(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.IN_PROGRESS,
            date_created=date.today().replace(day=20) -
            relativedelta(months=3),
        )

        # Assert
        self.validate(new, {ObjectLevelError: ""}, objects_saved=1)
        assert (StrategicActionUpdate.objects.given_month(date.today().replace(
            day=20) - relativedelta(months=3)).count() == 1)
    def test_back_dating_update_in_gap(self, sau_stub):
        # Arrange
        StrategicActionUpdateFactory.create(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.SUBMITTED,
            implementation_rag_rating=RAGRating.GREEN,
            reason_for_delays="some text",
            date_created=date.today().replace(day=20) -
            relativedelta(months=4),
            submission_date=date.today().replace(day=20) -
            relativedelta(months=4),
        )

        StrategicActionUpdateFactory.create(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.SUBMITTED,
            implementation_rag_rating=RAGRating.GREEN,
            reason_for_delays="some text",
            date_created=date.today().replace(day=20) -
            relativedelta(months=2),
            submission_date=date.today().replace(day=20) -
            relativedelta(months=2),
        )

        # Act
        sau = StrategicActionUpdateFactory.build(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.SUBMITTED,
            implementation_rag_rating=RAGRating.GREEN,
            reason_for_delays="some text",
            date_created=date.today().replace(day=20) -
            relativedelta(months=3),
            submission_date=date.today().replace(day=20) -
            relativedelta(months=3),
        )

        # Assert
        self.validate(sau, {}, objects_saved=3)
        assert (StrategicActionUpdate.objects.given_month(date.today().replace(
            day=20) - relativedelta(months=3)).count() == 1)
    def test_back_dating_change_state(self, sau_stub):
        # Arrange
        StrategicActionUpdateFactory.create(
            user=sau_stub["user"],
            strategic_action=sau_stub["sa"],
            supply_chain=sau_stub["sc"],
            status=Staus.IN_PROGRESS,
            implementation_rag_rating=RAGRating.GREEN,
            date_created=date.today().replace(day=20) -
            relativedelta(months=3),
        )
        StrategicActionUpdateFactory.create_batch(10)

        # Act
        sau = StrategicActionUpdate.objects.get(
            strategic_action=sau_stub["sa"])
        sau.status = Staus.SUBMITTED
        sau.submission_date = date.today().replace(day=20) - relativedelta(
            months=3)
        sau.save()

        # Assert
        assert (StrategicActionUpdate.objects.given_month(date.today().replace(
            day=20) - relativedelta(months=3)).count() == 1)