Example #1
0
 def setUp(self):
     last_week = datetime.today() - timedelta(days=7)
     self.single_charge = ChargeFactory.build()
     self.single_charge["disposition"] = Disposition(date=last_week,
                                                     ruling="No Complaint")
     self.charges = []
Example #2
0
    case_all_eligible.charges = [
        ChargeFactory.create(
            case=case_all_eligible,
            name="Theft of dignity",
            disposition=Disposition(ruling="Convicted",
                                    date=Time.TEN_YEARS_AGO),
        )
    ]

    case_partially_eligible = CaseFactory.create(
        case_number="0001",
        balance="200.00",
        date_location=["1/1/1995", "Clackamas"])
    case_partially_eligible.charges = [
        ChargeFactory.create(case=case_partially_eligible,
                             disposition=Disposition(ruling="Convicted",
                                                     date=Time.TEN_YEARS_AGO)),
        ChargeFactory.create(
            case=case_partially_eligible,
            level="Felony Class A",
            disposition=Disposition(ruling="Convicted",
                                    date=Time.TEN_YEARS_AGO),
        ),
    ]

    case_possibly_eligible = CaseFactory.create(
        case_number="0002",
        balance="300.00",
        date_location=["1/1/1995", "Baker"])
    case_possibly_eligible.charges = [
        ChargeFactory.create(
            case=case_possibly_eligible,
 def setUp(self):
     last_week = (datetime.today() - timedelta(days=7)).strftime('%m/%d/%Y')
     self.single_charge = ChargeFactory.build()
     self.single_charge['disposition'] = Disposition(ruling='Acquitted',
                                                     date=last_week)
     self.charges = []
Example #4
0
 def setUp(self):
     last_week = datetime.today() - timedelta(days=7)
     self.dismissal = Disposition(ruling="Dismissed", date=last_week)
     self.charge_dict = ChargeFactory.build()
     self.charge_dict["disposition"] = Disposition(ruling="Convicted",
                                                   date=last_week)
    def test_it_sets_most_recent_conviction_from_the_last_10yrs(self):
        self.mrc_charge.disposition = Disposition(Time.LESS_THAN_TEN_YEARS_AGO, 'Convicted')
        self.case.charges = [self.mrc_charge]
        self.run_expunger([self.case])

        assert self.expunger.most_recent_conviction is self.mrc_charge
Example #6
0
 def create_recent_charge(self):
     charge = ChargeFactory.save(self.single_charge)
     last_week = datetime.today() - timedelta(days=7)
     charge.disposition = Disposition(ruling="Convicted", date=last_week)
     return charge
        }

    @staticmethod
    def save(charge):
        return Charge.create(**charge)

    @staticmethod
    def create(case=CaseFactory.create(),
               name='Theft of services',
               statute='164.125',
               level='Misdemeanor Class A',
               date='1/1/0001',
               disposition=None):
        if disposition:
            ruling, date = disposition
            disposition = Disposition(date=date, ruling=ruling)
        kwargs = {
            'case': case,
            'name': name,
            'statute': statute,
            'level': level,
            'date': date,
            'disposition': disposition
        }

        return Charge.create(**kwargs)

    @staticmethod
    def create_dismissed_charge(case=CaseFactory.create(),
                                name='Theft of services',
                                statute='164.125',
class TestDismissalBlock(unittest.TestCase):
    def setUp(self):
        self.case_1 = CaseFactory.create()
        self.case_2 = CaseFactory.create()

        self.recent_dismissal = ChargeFactory.create_dismissed_charge(
            case=self.case_1, date=Time.TWO_YEARS_AGO)
        self.case_1.charges = [self.recent_dismissal]

    def test_record_with_only_an_mrd_is_time_eligible(self):
        record = Record([self.case_1])
        expunger = Expunger(record)
        expunger.run()

        assert self.recent_dismissal.expungement_result.time_eligibility.status is EligibilityStatus.ELIGIBLE
        assert self.recent_dismissal.expungement_result.time_eligibility.reason == ""
        assert self.recent_dismissal.expungement_result.time_eligibility.date_will_be_eligible == Time.TWO_YEARS_AGO

    def test_all_mrd_case_related_dismissals_are_expungeable(self):
        case_related_dismissal = ChargeFactory.create_dismissed_charge(
            case=self.case_1, date=Time.TWO_YEARS_AGO)
        self.case_1.charges.append(case_related_dismissal)

        record = Record([self.case_1])
        expunger = Expunger(record)
        expunger.run()

        assert self.recent_dismissal.expungement_result.time_eligibility.status is EligibilityStatus.ELIGIBLE
        assert self.recent_dismissal.expungement_result.time_eligibility.reason == ""
        assert self.recent_dismissal.expungement_result.time_eligibility.date_will_be_eligible == Time.TWO_YEARS_AGO

        assert case_related_dismissal.expungement_result.time_eligibility.status is EligibilityStatus.ELIGIBLE
        assert case_related_dismissal.expungement_result.time_eligibility.reason == ""
        assert case_related_dismissal.expungement_result.time_eligibility.date_will_be_eligible == Time.TWO_YEARS_AGO

    def test_mrd_blocks_dismissals_in_unrelated_cases(self):
        unrelated_dismissal = ChargeFactory.create_dismissed_charge(
            case=self.case_2, date=Time.TEN_YEARS_AGO)
        self.case_2.charges = [unrelated_dismissal]

        record = Record([self.case_1, self.case_2])
        expunger = Expunger(record)
        expunger.run()

        assert unrelated_dismissal.expungement_result.time_eligibility.status is EligibilityStatus.INELIGIBLE
        assert (unrelated_dismissal.expungement_result.time_eligibility.reason
                == "Three years from most recent other arrest (137.225(8)(a))")
        assert unrelated_dismissal.expungement_result.time_eligibility.date_will_be_eligible == Time.ONE_YEARS_FROM_NOW

    def test_mrd_does_not_block_convictions(self):
        case = CaseFactory.create()
        convicted_charge = ChargeFactory.create(
            case=case,
            date=Time.TWENTY_YEARS_AGO,
            disposition=Disposition(ruling="Convicted",
                                    date=Time.TWENTY_YEARS_AGO),
        )
        case.charges = [convicted_charge]

        record = Record([self.case_1, case])
        expunger = Expunger(record)
        expunger.run()

        assert convicted_charge.expungement_result.time_eligibility.status is EligibilityStatus.ELIGIBLE
        assert convicted_charge.expungement_result.time_eligibility.reason == ""
        assert (convicted_charge.expungement_result.time_eligibility.
                date_will_be_eligible == convicted_charge.disposition.date +
                relativedelta(years=+3))
Example #9
0
        kwargs = {
            "case": case,
            "name": name,
            "statute": statute,
            "level": level,
            "date": date_string,
            "disposition": disposition,
        }

        return ChargeCreator.create(**kwargs)

    @staticmethod
    def create_dismissed_charge(
            case=CaseFactory.create(),
            name="Theft of services",
            statute="164.125",
            level="Misdemeanor Class A",
            date=date_class(1901, 1, 1),
    ):
        disposition = Disposition(date=date_class.today(), ruling="Dismissed")
        kwargs = {
            "case": case,
            "name": name,
            "statute": statute,
            "level": level,
            "date": date.strftime("%m/%d/%Y"),
            "disposition": disposition,
        }

        return ChargeCreator.create(**kwargs)
Example #10
0
 def create_charge(self):
     charge = ChargeFactory.save(self.charge)
     charge.disposition = Disposition(**self.convicted_disposition)
     return charge
def build_charges(statute, disposition_ruling):
    last_week = datetime.today() - timedelta(days=7)
    return ChargeFactory.create_ambiguous_charge(statute=statute,
                                                 disposition=Disposition(
                                                     ruling=disposition_ruling,
                                                     date=last_week))
Example #12
0
class Dispositions:
    LAST_WEEK = datetime.today() - timedelta(days=7)
    CONVICTED = Disposition(ruling="Convicted", date=LAST_WEEK)
    DISMISSED = Disposition(ruling="Dismissed", date=LAST_WEEK)
    UNRECOGNIZED_DISPOSITION = Disposition(ruling="Something unrecognized", date=LAST_WEEK)
    NO_COMPLAINT = Disposition(ruling="No Complaint", date=LAST_WEEK)
    case = CaseFactory.create()
    case.charges = [violation_charge, arrest]
    expunger = Expunger(Record([case]))
    expunger.run()

    assert arrest.expungement_result.time_eligibility.status is EligibilityStatus.ELIGIBLE
    assert arrest.expungement_result.time_eligibility.date_will_be_eligible == arrest.date
    assert arrest.expungement_result.time_eligibility.reason == ""


def test_eligible_mrc_with_violation():
    case = CaseFactory.create()

    three_yr_mrc = ChargeFactory.create(case=case,
                                        disposition=Disposition(
                                            ruling="Convicted",
                                            date=Time.THREE_YEARS_AGO))

    arrest = ChargeFactory.create(case=case,
                                  disposition=Disposition(
                                      ruling="Dismissed",
                                      date=Time.THREE_YEARS_AGO))

    violation = ChargeFactory.create(level="Violation",
                                     case=case,
                                     disposition=Disposition(
                                         ruling="Convicted",
                                         date=Time.THREE_YEARS_AGO))

    case.charges = [three_yr_mrc, arrest, violation]
    record = Record([case])
        case = CaseFactory.create()
        mrd_charge = ChargeFactory.create_dismissed_charge(
            date=self.TWO_YEARS_AGO)
        charge = ChargeFactory.create_dismissed_charge(
            date=self.LESS_THAN_THREE_YEARS_AGO)
        case.charges = [charge, charge, mrd_charge]

        expunger = Expunger([case])
        expunger.run()

        assert expunger._most_recent_dismissal is mrd_charge

    def test_it_sets_most_recent_conviction_from_the_last_10yrs(self):
        case = CaseFactory.create()
        mrc_charge = ChargeFactory.create()
        mrc_charge.disposition = Disposition(self.LESS_THAN_TEN_YEARS_AGO,
                                             'Convicted')
        case.charges = [mrc_charge]

        expunger = Expunger([case])
        expunger.run()

        assert expunger._most_recent_conviction is mrc_charge

    def test_it_sets_the_second_most_recent_conviction_within_the_last_10yrs(
            self):
        case = CaseFactory.create()
        mrc_charge = ChargeFactory.create()
        mrc_charge.disposition = Disposition(self.TWO_YEARS_AGO, 'Convicted')
        second_mrc_charge = ChargeFactory.create()
        second_mrc_charge.disposition = Disposition(
            self.LESS_THAN_TEN_YEARS_AGO, 'Convicted')
Example #15
0
    def test_it_knows_if_it_has_a_recent_conviction_happy_path(self):
        charge = ChargeFactory.create()
        charge.disposition = Disposition(self.LESS_THAN_TEN_YEARS_AGO,
                                         "Convicted")

        assert charge.recent_conviction() is True
            three_yr_conviction.expungement_result.time_eligibility.reason ==
            "Ten years from most recent other conviction (137.225(7)(b))")
        assert three_yr_conviction.expungement_result.time_eligibility.date_will_be_eligible == date.today(
        ) + relativedelta(years=7, days=1)

        assert arrest.expungement_result.time_eligibility.status is EligibilityStatus.INELIGIBLE
        assert arrest.expungement_result.time_eligibility.date_will_be_eligible == date.today(
        ) + relativedelta(years=7)

    def test_ineligible_mrc_with_arrest_on_single_case(self):
        # In this case, the friendly rule doesn't apply because the conviction doesn't become eligible
        case = CaseFactory.create()

        mrc = ChargeFactory.create(
            case=case,
            disposition=Disposition(ruling="Convicted",
                                    date=Time.LESS_THAN_THREE_YEARS_AGO),
            statute="666.666",
            level="Felony Class A",
        )

        arrest = ChargeFactory.create(case=case,
                                      disposition=Disposition(
                                          ruling="Dismissed",
                                          date=Time.LESS_THAN_THREE_YEARS_AGO))

        case.charges = [mrc, arrest]
        record = Record([case])
        expunger = Expunger(record)

        expunger.run()
        assert arrest.expungement_result.time_eligibility.status is EligibilityStatus.INELIGIBLE
Example #17
0
    def test_it_knows_if_it_has_a_recent_conviction_sad_path(self):
        charge = ChargeFactory.create()
        charge.disposition = Disposition(self.TEN_YEARS_AGO, "Convicted")

        assert charge.recent_conviction() is False
Example #18
0
 def setUp(self):
     last_week = (datetime.today() - timedelta(days=7)).strftime('%m/%d/%Y')
     disposition = Disposition(ruling='Convicted', date=last_week)
     self.charge = ChargeFactory.build(disposition=disposition)
     self.charges = []
Example #19
0
    def test_dismissed_charge_is_not_a_recent_conviction(self):
        charge = ChargeFactory.create()
        charge.disposition = Disposition(self.LESS_THAN_TEN_YEARS_AGO,
                                         "Dismissed")

        assert charge.recent_conviction() is False
    def test_it_does_not_set_mrc_when_greater_than_10yrs(self):
        self.mrc_charge.disposition = Disposition(Time.TEN_YEARS_AGO, 'Convicted')
        self.case.charges = [self.mrc_charge]
        self.run_expunger([self.case])

        assert self.expunger.most_recent_conviction is None
Example #21
0
    def test_most_recent_dismissal_happy_path(self):
        charge = ChargeFactory.create(date=self.LESS_THAN_THREE_YEARS_AGO)
        charge.disposition = Disposition(date=self.LESS_THAN_THREE_YEARS_AGO,
                                         ruling="Dismissed")

        assert charge.recent_dismissal() is True
 def setUp(self):
     last_week = datetime.today() - timedelta(days=7)
     disposition = Disposition(ruling="Convicted", date=last_week)
     self.charge = ChargeFactory.build(disposition=disposition)
     self.charges = []
Example #23
0
    def test_most_recent_dismissal_sad_path(self):
        charge = ChargeFactory.create(date=self.THREE_YEARS_AGO)
        charge.disposition = Disposition(date=self.THREE_YEARS_AGO,
                                         ruling="Dismissed")

        assert charge.recent_dismissal() is False
     violation_type="Something",
     current_status="CLOSED",
     case_detail_link="alink",
     balance_due_in_cents=0,
     edit_status=EditStatus.UNCHANGED,
 ),
 (
     OeciCharge(
         ambiguous_charge_id="X0001-1",
         name="petty theft",
         statute="100.000",
         level="Misdemeanor",
         date=date(2000, 1, 1),
         disposition=Disposition(
             date=date(2001, 1, 1),
             ruling="Convicted",
             status=DispositionStatus.CONVICTED,
             amended=False,
         ),
         probation_revoked=None,
         balance_due_in_cents=0,
         edit_status=EditStatus.UNCHANGED,
     ),
     OeciCharge(
         ambiguous_charge_id="X0001-2",
         name="assault 3",
         statute="200.000",
         level="Felony Class C",
         date=date(2001, 1, 1),
         disposition=Disposition(
             date=date(2001, 1, 1),
             ruling="Convicted",
Example #25
0
    def test_convicted_charge_is_not_a_recent_dismissal(self):
        charge = ChargeFactory.create(date=self.LESS_THAN_THREE_YEARS_AGO)
        charge.disposition = Disposition(date=self.LESS_THAN_THREE_YEARS_AGO,
                                         ruling="Convicted")

        assert charge.recent_dismissal() is False
Example #26
0
 def __build_charge(charge_id, charge, case_parser):
     if case_parser.hashed_dispo_data.get(charge_id):
         charge['disposition'] = Disposition(
             case_parser.hashed_dispo_data[charge_id].get('date'),
             case_parser.hashed_dispo_data[charge_id].get('ruling'))
     return ChargeCreator.create(**charge)
Example #27
0
 def setUp(self):
     last_week = datetime.today() - timedelta(days=7)
     self.single_charge = ChargeFactory.build()
     self.single_charge["disposition"] = Disposition(ruling="Dismissed",
                                                     date=last_week)
     self.charges = []