from unittest.mock import patch

from django.test import SimpleTestCase

from .helper import _active_loan_payments_queryset, _active_loan_schedules_queryset


class LoanSoftDeleteQuerysetTests(SimpleTestCase):
    @patch("loans.helper.LoanPayments.objects.filter")
    def test_active_loan_payments_queryset_excludes_deleted_rows(self, filter_mock):
        _active_loan_payments_queryset(loan_application="loan-1", payment_status="normal")

        filter_mock.assert_called_once_with(
            loan_application="loan-1",
            payment_status="normal",
            deleted=False,
        )

    @patch("loans.helper.LoanPayments.objects.filter")
    def test_active_loan_payments_queryset_overrides_deleted_flag(self, filter_mock):
        _active_loan_payments_queryset(
            loan_application="loan-1", payment_status="normal", deleted=True
        )

        filter_mock.assert_called_once_with(
            loan_application="loan-1",
            payment_status="normal",
            deleted=False,
        )

    @patch("loans.helper.LoanRepaymentSchedule.objects.filter")
    def test_active_loan_schedules_queryset_excludes_deleted_rows(self, filter_mock):
        _active_loan_schedules_queryset(loan_application="loan-1", status="active")

        filter_mock.assert_called_once_with(
            loan_application="loan-1",
            status="active",
            deleted=False,
        )

    @patch("loans.helper.LoanRepaymentSchedule.objects.filter")
    def test_active_loan_schedules_queryset_overrides_deleted_flag(self, filter_mock):
        _active_loan_schedules_queryset(
            loan_application="loan-1", status="active", deleted=True
        )

        filter_mock.assert_called_once_with(
            loan_application="loan-1",
            status="active",
            deleted=False,
        )
