def test_expunger_invokes_time_analyzer_with_most_recent_charge(self):
        CrawlerFactory.create(
            self.crawler,
            cases={
                'X0001':
                CaseDetails.case_x(
                    arrest_date=self.FIFTEEN_YEARS_AGO.strftime('%m/%d/%Y'),
                    charge1_name='Aggravated theft in the first degree',
                    charge1_statute='164.057',
                    charge1_level='Felony Class B',
                    dispo_ruling_1='Convicted',
                    dispo_date=self.FIFTEEN_YEARS_AGO.strftime('%m/%d/%Y')),
                'X0002':
                CaseDetails.case_x(),
                'X0003':
                CaseDetails.case_x()
            })

        expunger = Expunger(self.crawler.result.cases)
        expunger.run()

        assert len(expunger._type_analyzer.class_b_felonies) == 1
        assert expunger._type_analyzer.class_b_felonies[
            0].name == 'Aggravated theft in the first degree'
        assert expunger._time_analyzer._class_b_felonies[
            0].name == 'Aggravated theft in the first degree'
        assert expunger._time_analyzer._most_recent_charge.name == 'Aggravated theft in the first degree'
    def test_expunger_calls_time_analyzer(self):
        CrawlerFactory.create(
            self.crawler,
            cases={
                'X0001':
                CaseDetails.case_x(
                    arrest_date=self.FIFTEEN_YEARS_AGO.strftime('%m/%d/%Y'),
                    dispo_ruling_1='Dismissed',
                    dispo_ruling_2='Dismissed',
                    dispo_ruling_3='Acquitted'),
                'X0002':
                CaseDetails.case_x(
                    arrest_date=self.TWO_YEARS_AGO.strftime('%m/%d/%Y'),
                    dispo_ruling_1='Dismissed',
                    dispo_ruling_2='Convicted',
                    dispo_ruling_3='Dismissed'),
                'X0003':
                CaseDetails.case_x(
                    arrest_date=self.ONE_YEAR_AGO.strftime('%m/%d/%Y'),
                    dispo_ruling_1='No Complaint',
                    dispo_ruling_2='Convicted',
                    dispo_ruling_3='No Complaint')
            })
        expunger = Expunger(self.crawler.result.cases)

        assert expunger.run() is True

        assert expunger._time_analyzer._most_recent_conviction.date == self.ONE_YEAR_AGO
        assert expunger._time_analyzer._second_most_recent_conviction.date == self.TWO_YEARS_AGO
        assert expunger._time_analyzer._most_recent_dismissal.date == self.ONE_YEAR_AGO
        assert expunger._time_analyzer._num_acquittals == 4
Esempio n. 3
0
    def test_expunger_runs_time_analyzer(self):
        record = CrawlerFactory.create(self.crawler,
                              cases={'X0001': CaseDetails.case_x(arrest_date=self.FIFTEEN_YEARS_AGO.strftime('%m/%d/%Y'),
                                                                 dispo_date=self.FIFTEEN_YEARS_AGO.strftime('%m/%d/%Y'),
                                                                 dispo_ruling_1='Dismissed',
                                                                 dispo_ruling_2='Convicted',
                                                                 dispo_ruling_3='Acquitted'),
                                     'X0002': CaseDetails.case_x(arrest_date=self.TWO_YEARS_AGO.strftime('%m/%d/%Y'),
                                                                 dispo_ruling_1='Dismissed',
                                                                 dispo_ruling_2='Dismissed',
                                                                 dispo_ruling_3='Dismissed'),
                                     'X0003': CaseDetails.case_x(arrest_date=self.ONE_YEAR_AGO.strftime('%m/%d/%Y'),
                                                                 dispo_ruling_1='No Complaint',
                                                                 dispo_ruling_2='No Complaint',
                                                                 dispo_ruling_3='No Complaint')})
        expunger = Expunger(record)

        assert expunger.run() is True

        assert expunger.most_recent_conviction is None
        assert expunger.second_most_recent_conviction is None
        assert expunger.most_recent_dismissal.disposition.ruling == 'No Complaint'
        assert len(expunger.acquittals) == 8

        assert record.cases[0].charges[0].expungement_result.time_eligibility.status is False
        assert record.cases[0].charges[1].expungement_result.time_eligibility.status is True
        assert record.cases[0].charges[2].expungement_result.time_eligibility.status is False

        assert record.cases[1].charges[0].expungement_result.time_eligibility.status is False
        assert record.cases[1].charges[1].expungement_result.time_eligibility.status is False
        assert record.cases[1].charges[2].expungement_result.time_eligibility.status is False

        assert record.cases[2].charges[0].expungement_result.time_eligibility.status is True
        assert record.cases[2].charges[1].expungement_result.time_eligibility.status is True
        assert record.cases[2].charges[2].expungement_result.time_eligibility.status is True
Esempio n. 4
0
def record_with_specific_dates(crawler):
    return CrawlerFactory.create(
        crawler,
        cases={
            "X0001":
            CaseDetails.case_x(
                arrest_date=FIFTEEN_YEARS_AGO.strftime("%m/%d/%Y"),
                dispo_date=FIFTEEN_YEARS_AGO.strftime("%m/%d/%Y"),
                dispo_ruling_1="Dismissed",
                dispo_ruling_2="Convicted",
                dispo_ruling_3="Acquitted",
            ),
            "X0002":
            CaseDetails.case_x(
                arrest_date=TWO_YEARS_AGO.strftime("%m/%d/%Y"),
                dispo_ruling_1="Dismissed",
                dispo_ruling_2="Dismissed",
                dispo_ruling_3="Dismissed",
            ),
            "X0003":
            CaseDetails.case_x(
                arrest_date=ONE_YEAR_AGO.strftime("%m/%d/%Y"),
                dispo_ruling_1="No Complaint",
                dispo_ruling_2="No Complaint",
                dispo_ruling_3="No Complaint",
            ),
        },
    )
    def create_ambiguous_record_with_questions(
        record=JohnDoe.RECORD_WITH_CLOSED_CASES,
        cases={
            "X0001": CaseDetails.case_x(),
            "X0002": CaseDetails.case_x(),
            "X0003": CaseDetails.case_x()
        },
    ) -> Tuple[Record, AmbiguousRecord, Dict[str, Question], List[str]]:
        base_url = "https://publicaccess.courts.oregon.gov/PublicAccessLogin/"
        with requests_mock.Mocker() as m:
            m.post(URL.login_url(), text=PostLoginPage.POST_LOGIN_PAGE)

            m.post("{}{}".format(base_url, "Search.aspx?ID=100"),
                   [{
                       "text": SearchPageResponse.RESPONSE
                   }, {
                       "text": record
                   }])

            for key, value in cases.items():
                m.get("{}{}{}".format(base_url, "CaseDetail.aspx?CaseID=",
                                      key),
                      text=value)

            aliases = (Alias(first_name="John",
                             last_name="Doe",
                             middle_name="",
                             birth_date=""), )
            return RecordCreator.build_record(
                RecordCreator.build_search_results.__wrapped__, "username",
                "password", aliases, {})
Esempio n. 6
0
def record_with_unrecognized_dispo():
    return CrawlerFactory.create(cases={
        "X0001":
        CaseDetails.case_x(dispo_ruling_1="Something unrecognized"),
        "X0002":
        CaseDetails.case_x(dispo_ruling_1="Something unrecognized"),
        "X0003":
        CaseDetails.case_x(dispo_ruling_1="Something unrecognized"),
    }, )
Esempio n. 7
0
def record_with_revoked_probation():
    return CrawlerFactory.create(cases={
        "X0001":
        CaseDetails.CASE_WITH_REVOKED_PROBATION,
        "X0002":
        CaseDetails.case_x(dispo_ruling_1="Something unrecognized"),
        "X0003":
        CaseDetails.case_x(dispo_ruling_1="Something unrecognized"),
    }, )
Esempio n. 8
0
def record_with_multiple_disposition_errors():
    return CrawlerFactory.create(cases={
        "X0001":
        CaseDetails.case_x(dispo_ruling_1="Something unrecognized"),
        "X0002":
        CaseDetails.case_x(dispo_ruling_1="Something else unrecognized"),
        "X0003":
        CaseDetails.CASE_WITHOUT_DISPOS,
    }, )
 def create(
     record=JohnDoe.RECORD_WITH_CLOSED_CASES,
     cases={
         "X0001": CaseDetails.case_x(),
         "X0002": CaseDetails.case_x(),
         "X0003": CaseDetails.case_x()
     },
 ) -> Record:
     return CrawlerFactory.create_ambiguous_record_with_questions(
         record, cases)[0]
Esempio n. 10
0
def record_with_various_categories(crawler):
    return CrawlerFactory.create(crawler,
                                 cases={'X0001': CaseDetails.case_x(
                                     dispo_ruling_1='Convicted - Failure to show',
                                     dispo_ruling_2='Dismissed',
                                     dispo_ruling_3='Acquitted'),
                                     'X0002': CaseDetails.case_x(
                                         dispo_ruling_1='Dismissed',
                                         dispo_ruling_2='Convicted',
                                         dispo_ruling_3='Convicted'),
                                     'X0003': CaseDetails.case_x(
                                         dispo_ruling_1='No Complaint',
                                         dispo_ruling_2='Dismissed',
                                         dispo_ruling_3='Convicted')})
Esempio n. 11
0
def record_with_various_categories():
    return CrawlerFactory.create(cases={
        "X0001":
        CaseDetails.case_x(dispo_ruling_1="Convicted - Failure to show",
                           dispo_ruling_2="Dismissed",
                           dispo_ruling_3="Acquitted"),
        "X0002":
        CaseDetails.case_x(dispo_ruling_1="Dismissed",
                           dispo_ruling_2="Convicted",
                           dispo_ruling_3="Convicted"),
        "X0003":
        CaseDetails.case_x(dispo_ruling_1="No Complaint",
                           dispo_ruling_2="Dismissed",
                           dispo_ruling_3="Convicted"),
    }, )
Esempio n. 12
0
    def create(
        crawler,
        record=JohnDoe.RECORD_WITH_CLOSED_CASES,
        cases={"X0001": CaseDetails.case_x(), "X0002": CaseDetails.case_x(), "X0003": CaseDetails.case_x()},
    ):
        base_url = "https://publicaccess.courts.oregon.gov/PublicAccessLogin/"

        with requests_mock.Mocker() as m:
            m.post(
                "{}{}".format(base_url, "Search.aspx?ID=100"), [{"text": SearchPageResponse.RESPONSE}, {"text": record}]
            )

            for key, value in cases.items():
                m.get("{}{}{}".format(base_url, "CaseDetail.aspx?CaseID=", key), text=value)

            return crawler.search("John", "Doe")
Esempio n. 13
0
    def test_expunger_categorizes_charges(self):
        record = CrawlerFactory.create(self.crawler,
                              cases={'X0001': CaseDetails.case_x(dispo_ruling_1='Convicted - Failure to show',
                                                                 dispo_ruling_2='Dismissed',
                                                                 dispo_ruling_3='Acquitted'),
                                     'X0002': CaseDetails.case_x(dispo_ruling_1='Dismissed',
                                                                 dispo_ruling_2='Convicted',
                                                                 dispo_ruling_3='Convicted'),
                                     'X0003': CaseDetails.case_x(dispo_ruling_1='No Complaint',
                                                                 dispo_ruling_2='Dismissed',
                                                                 dispo_ruling_3='Convicted')})
        expunger = Expunger(record)

        assert expunger.run() is True
        assert len(expunger.acquittals) == 5
        assert len(expunger.convictions) == 4
Esempio n. 14
0
    def create(crawler,
               record=JohnDoe.RECORD_WITH_CLOSED_CASES,
               cases={'X0001': CaseDetails.case_x(),
                      'X0002': CaseDetails.case_x(),
                      'X0003': CaseDetails.case_x()}
               ):
        base_url = 'https://publicaccess.courts.oregon.gov/PublicAccessLogin/'

        with requests_mock.Mocker() as m:
            m.post("{}{}".format(base_url, 'Search.aspx?ID=100'), [{'text': SearchPageResponse.RESPONSE},
                                                                   {'text': record}])

            for key, value in cases.items():
                m.get("{}{}{}".format(base_url, 'CaseDetail.aspx?CaseID=', key), text=value)

            crawler.search('John', 'Doe')
Esempio n. 15
0
def record_with_specific_dates(crawler):
    return CrawlerFactory.create(crawler,
                                   cases={'X0001': CaseDetails.case_x(
                                       arrest_date=FIFTEEN_YEARS_AGO.strftime(
                                           '%m/%d/%Y'),
                                       dispo_date=FIFTEEN_YEARS_AGO.strftime(
                                           '%m/%d/%Y'),
                                       dispo_ruling_1='Dismissed',
                                       dispo_ruling_2='Convicted',
                                       dispo_ruling_3='Acquitted'),
                                          'X0002': CaseDetails.case_x(
                                              arrest_date=TWO_YEARS_AGO.strftime(
                                                  '%m/%d/%Y'),
                                              dispo_ruling_1='Dismissed',
                                              dispo_ruling_2='Dismissed',
                                              dispo_ruling_3='Dismissed'),
                                          'X0003': CaseDetails.case_x(
                                              arrest_date=ONE_YEAR_AGO.strftime(
                                                  '%m/%d/%Y'),
                                              dispo_ruling_1='No Complaint',
                                              dispo_ruling_2='No Complaint',
                                              dispo_ruling_3='No Complaint')})