class TestWithCompletionDateMonthlyUpdateNavigationItems:
    def setup_method(self):
        self.supply_chain = SupplyChainFactory()
        self.strategic_action = StrategicActionFactory(
            supply_chain=self.supply_chain)
        self.strategic_action_update = StrategicActionUpdateFactory(
            strategic_action=self.strategic_action,
            supply_chain=self.strategic_action.supply_chain,
        )

    def test_info_view_has_info_status_summary_links_if_completion_date_unchanged(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-info-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )
        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "is_current_page" in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "RevisedTiming" not in navigation_links
        assert "Summary" in navigation_links

    def test_info_view_has_info_status_revisedtiming_summary_links_if_completion_date_changed(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-info-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )

        self.strategic_action_update.changed_value_for_target_completion_date = date(
            year=2021, month=12, day=25)
        self.strategic_action_update.save()

        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "is_current_page" in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "RevisedTiming" in navigation_links
        assert "Summary" in navigation_links

    def test_info_view_has_info_status_revisedtiming_summary_links_if_is_ongoing_changed(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-info-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )

        self.strategic_action_update.changed_value_for_is_ongoing = True
        self.strategic_action_update.save()

        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "is_current_page" in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "RevisedTiming" in navigation_links
        assert "Summary" in navigation_links

    def test_status_view_has_info_status_summary_links_if_completion_date_unchanged(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-status-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )
        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "is_current_page" in navigation_links["Status"]
        assert "RevisedTiming" not in navigation_links
        assert "Summary" in navigation_links

    def test_status_view_has_info_status_revisedtiming_summary_links_if_completion_date_changed(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-status-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )

        self.strategic_action_update.changed_value_for_target_completion_date = date(
            year=2021, month=12, day=25)
        self.strategic_action_update.save()

        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "is_current_page" in navigation_links["Status"]
        assert "RevisedTiming" in navigation_links
        assert "Summary" in navigation_links

    def test_status_view_has_info_status_revisedtiming_summary_links_if_is_ongoing_changed(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-status-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )

        self.strategic_action_update.changed_value_for_is_ongoing = True
        self.strategic_action_update.save()

        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "is_current_page" in navigation_links["Status"]
        assert "RevisedTiming" in navigation_links
        assert "Summary" in navigation_links

    def test_revised_timing_view_has_info_status_revisedtiming_summary_links(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-revised-timing-edit",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )
        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "not_a_link" not in navigation_links["Status"]
        assert "RevisedTiming" in navigation_links
        assert "is_current_page" in navigation_links["RevisedTiming"]
        assert "Summary" in navigation_links

    def test_summary_view_has_info_status_summary_links_if_completion_date_unchanged(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-summary",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )
        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "not_a_link" not in navigation_links["Status"]
        assert "RevisedTiming" not in navigation_links
        assert "Summary" in navigation_links
        assert "is_current_page" in navigation_links["Summary"]

    def test_summary_view_has_info_status_revised_timing_summary_links_if_completion_date_changed(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-summary",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )

        self.strategic_action_update.changed_value_for_target_completion_date = date(
            year=2021, month=12, day=25)
        self.strategic_action_update.save()

        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "not_a_link" not in navigation_links["Status"]
        assert "RevisedTiming" in navigation_links
        assert "not_a_link" not in navigation_links["RevisedTiming"]
        assert "Summary" in navigation_links
        assert "is_current_page" in navigation_links["Summary"]

    def test_summary_view_has_info_status_revised_timing_summary_links_if_is_ongoing_changed(
            self, logged_in_client, test_user):
        test_user.gov_department = self.supply_chain.gov_department
        test_user.save()
        url = reverse(
            "monthly-update-summary",
            kwargs={
                "supply_chain_slug": self.strategic_action.supply_chain.slug,
                "action_slug": self.strategic_action.slug,
                "update_slug": self.strategic_action_update.slug,
            },
        )

        self.strategic_action_update.changed_value_for_is_ongoing = True
        self.strategic_action_update.save()

        response = logged_in_client.get(url)

        navigation_links = response.context_data["navigation_links"]
        assert "Info" in navigation_links
        assert "not_a_link" not in navigation_links["Info"]
        assert "Timing" not in navigation_links
        assert "Status" in navigation_links
        assert "not_a_link" not in navigation_links["Status"]
        assert "RevisedTiming" in navigation_links
        assert "not_a_link" not in navigation_links["RevisedTiming"]
        assert "Summary" in navigation_links
        assert "is_current_page" in navigation_links["Summary"]
def test_completed_strategic_action_update():
    update = StrategicActionUpdateFactory(
        status=StrategicActionUpdate.Status.READY_TO_SUBMIT)
    update.save()
    yield update
def test_submitted_strategic_action_update():
    update = StrategicActionUpdateFactory(
        status=StrategicActionUpdate.Status.SUBMITTED)
    update.save()
    yield update
def test_in_progress_strategic_action_update():
    update = StrategicActionUpdateFactory()
    update.save()
    yield update