def test_get_violation_type_frequency_counter_us_pa(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code='US_PA', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.ABSCONDED ), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text='L05'), ]), StateSupervisionViolation.new_with_defaults( state_code='US_PA', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType. MISDEMEANOR), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text='H12') ]) ] violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter( violations) self.assertEqual([['ABSCONDED', 'FELONY', 'LOW_TECH'], ['MISDEMEANOR', 'SUBSTANCE_ABUSE']], violation_type_frequency_counter)
def test_identifyViolationSubtype_nonTechnical(self): # Arrange violations = [ StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( condition='DRG') ]), StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ]) ] # Act subtype = identify_violation_subtype( StateSupervisionViolationType.FELONY, violations) self.assertIsNone(subtype)
def test_get_violation_type_frequency_counter_us_mo(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code="US_MO", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.ABSCONDED, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.FELONY, ), ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_XX", condition="DRG") ], ) ] violation_type_frequency_counter = ( violation_utils.get_violation_type_frequency_counter(violations)) self.assertEqual( [["ABSCONDED", "FELONY", "SUBSTANCE_ABUSE"]], violation_type_frequency_counter, )
def test_identify_most_severe_violation_type(self) -> None: violation = StateSupervisionViolation.new_with_defaults( state_code="US_XX", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.FELONY, ), ], ) ( most_severe_violation_type, most_severe_violation_type_subtype, ) = violation_utils.identify_most_severe_violation_type_and_subtype( [violation]) self.assertEqual(most_severe_violation_type, StateSupervisionViolationType.FELONY) self.assertEqual( most_severe_violation_type_subtype, StateSupervisionViolationType.FELONY.value, )
def test_identifyViolationSubtype_technical_drg(self): # Arrange violations = [ StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( condition='DRG') ]), StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ]) ] # Act subtype = identify_violation_subtype( StateSupervisionViolationType.TECHNICAL, violations) # Assert self.assertEqual('SUBSTANCE_ABUSE', subtype)
def test_identifyViolationSubtype_technical_law_citation(self): # Arrange violations = [ StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( condition=_SUBSTANCE_ABUSE_CONDITION_STR), StateSupervisionViolatedConditionEntry.new_with_defaults( condition=_LAW_CITATION_SUBTYPE_STR) ]), StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ]) ] # Act subtype = identify_violation_subtype( StateSupervisionViolationType.TECHNICAL, violations) # Assert self.assertEqual(_LAW_CITATION_SUBTYPE_STR, subtype)
def test_get_violation_and_response_history(self): supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code="US_XX", violation_date=datetime.date(2009, 1, 3), supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.FELONY, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.ABSCONDED, ), ], ) supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults( supervision_violation_response_id=_DEFAULT_SSVR_ID, response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT, state_code="US_XX", response_date=datetime.date(2009, 1, 7), supervision_violation_response_decisions=[ StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_XX", decision=StateSupervisionViolationResponseDecision.REVOCATION, revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION, ), StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_XX", decision=StateSupervisionViolationResponseDecision.CONTINUANCE, ), ], supervision_violation=supervision_violation, ) revocation_date = datetime.date(2009, 2, 13) violation_history = violation_utils.get_violation_and_response_history( revocation_date, [supervision_violation_response], UsXxViolationDelegate() ) expected_output = violation_utils.ViolationHistory( most_severe_violation_type=StateSupervisionViolationType.FELONY, most_severe_violation_type_subtype=StateSupervisionViolationType.FELONY.value, most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION, response_count=1, violation_history_description="1felony", violation_type_frequency_counter=[["TECHNICAL", "FELONY", "ABSCONDED"]], ) self.assertEqual(expected_output, violation_history)
def test_get_violation_and_response_history_with_us_pa_subtype_high_technical(self): supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code="US_PA", violation_date=datetime.date(2009, 1, 3), supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_PA", violation_type=StateSupervisionViolationType.ABSCONDED, violation_type_raw_text="H09", ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_PA", violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text="H08", # High Technical ), ], ) supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults( supervision_violation_response_id=_DEFAULT_SSVR_ID, response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT, state_code="US_PA", response_date=datetime.date(2009, 1, 7), supervision_violation_response_decisions=[ StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_PA", decision=StateSupervisionViolationResponseDecision.REVOCATION, revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION, ), StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_PA", decision=StateSupervisionViolationResponseDecision.CONTINUANCE, revocation_type=StateSupervisionViolationResponseRevocationType.SHOCK_INCARCERATION, ), ], supervision_violation=supervision_violation, ) revocation_date = datetime.date(2009, 2, 13) violation_history = violation_utils.get_violation_and_response_history( revocation_date, [supervision_violation_response], UsPaViolationDelegate() ) expected_output = violation_utils.ViolationHistory( most_severe_violation_type=StateSupervisionViolationType.TECHNICAL, most_severe_violation_type_subtype="HIGH_TECH", most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION, response_count=1, violation_history_description="1high_tech", violation_type_frequency_counter=[["ABSCONDED", "HIGH_TECH"]], ) self.assertEqual(expected_output, violation_history)
def test_get_violation_type_frequency_counter_us_mo_multiple_violations( self, ) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code="US_MO", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.ABSCONDED, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.FELONY, ), ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_XX", condition="WEA" ) ], ), StateSupervisionViolation.new_with_defaults( state_code="US_MO", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.MISDEMEANOR, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, ), ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_XX", condition="DRG" ), StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_XX", condition="EMP" ), ], ), ] violation_type_frequency_counter = ( violation_utils.get_violation_type_frequency_counter( violations, UsMoViolationDelegate() ) ) self.assertEqual( [["ABSCONDED", "FELONY", "WEA"], ["MISDEMEANOR", "SUBSTANCE_ABUSE", "EMP"]], violation_type_frequency_counter, )
def test_get_violation_and_response_history_citation_date(self): supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code="US_XX", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.ABSCONDED, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.MISDEMEANOR, ), ], ) supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults( state_code="US_XX", supervision_violation_response_id=_DEFAULT_SSVR_ID, response_type=StateSupervisionViolationResponseType.CITATION, response_date=datetime.date(2009, 1, 7), supervision_violation_response_decisions=[ StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_XX", decision=StateSupervisionViolationResponseDecision.REVOCATION, revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION, ), StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_XX", decision=StateSupervisionViolationResponseDecision.CONTINUANCE, revocation_type=StateSupervisionViolationResponseRevocationType.SHOCK_INCARCERATION, ), ], supervision_violation=supervision_violation, ) revocation_date = datetime.date(2009, 2, 13) violation_history = violation_utils.get_violation_and_response_history( revocation_date, [supervision_violation_response], UsXxViolationDelegate() ) expected_output = violation_utils.ViolationHistory( most_severe_violation_type=StateSupervisionViolationType.MISDEMEANOR, most_severe_violation_type_subtype=StateSupervisionViolationType.MISDEMEANOR.value, most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION, response_count=1, violation_history_description="1misdemeanor", violation_type_frequency_counter=[["ABSCONDED", "MISDEMEANOR"]], ) self.assertEqual(expected_output, violation_history)
def test_us_nd_prepare_violation_responses_for_calculations_different_days( self, ) -> None: supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123, state_code=STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code=STATE_CODE, violation_type=StateSupervisionViolationType.ABSCONDED, ), ], ) ssvr = StateSupervisionViolationResponse.new_with_defaults( state_code=STATE_CODE, supervision_violation_response_id=123, supervision_violation=supervision_violation, response_date=datetime.date(2008, 12, 1), response_type=StateSupervisionViolationResponseType.PERMANENT_DECISION, ) other_supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123, state_code=STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code=STATE_CODE, violation_type=StateSupervisionViolationType.FELONY, ), ], ) other_ssvr = StateSupervisionViolationResponse.new_with_defaults( state_code=STATE_CODE, supervision_violation_response_id=123, supervision_violation=other_supervision_violation, response_date=datetime.date(2008, 12, 25), response_type=StateSupervisionViolationResponseType.PERMANENT_DECISION, ) prepared_responses = ( us_nd_violation_utils.us_nd_prepare_violation_responses_for_calculations( violation_responses=[ssvr, other_ssvr] ) ) self.assertCountEqual( [ssvr, other_ssvr], prepared_responses, )
def test_get_violation_type_frequency_counter_us_mo_technical_only_no_conditions( self, ) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code="US_MO", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, ) ], ) ] violation_type_frequency_counter = ( violation_utils.get_violation_type_frequency_counter( violations, UsMoViolationDelegate() ) ) self.assertEqual( [[StateSupervisionViolationType.TECHNICAL.value]], violation_type_frequency_counter, )
def test_get_violation_type_frequency_counter_us_mo_technical_only(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code="US_MO", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, ) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_XX", condition="DRG" ) ], ) ] violation_type_frequency_counter = ( violation_utils.get_violation_type_frequency_counter( violations, UsMoViolationDelegate() ) ) self.assertEqual([["SUBSTANCE_ABUSE"]], violation_type_frequency_counter)
def test_us_pa_get_violation_type_subtype_strings_for_violation_high_technical( self, ) -> None: # Arrange violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code="US_PA", violation_date=date(2009, 1, 3), supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code=_STATE_CODE, violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text="H05", ), ], ) # Act type_subtype_strings = ( self.delegate.get_violation_type_subtype_strings_for_violation(violation) ) # Assert expected_type_subtype_strings = ["HIGH_TECH"] self.assertEqual(expected_type_subtype_strings, type_subtype_strings)
def test_identify_most_severe_violation_type(self): violation = StateSupervisionViolation.new_with_defaults( state_code='US_MO', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ]) most_severe_violation_type, most_severe_violation_type_subtype = \ calculator_utils.identify_most_severe_violation_type_and_subtype([violation]) self.assertEqual(most_severe_violation_type, StateSupervisionViolationType.FELONY) self.assertEqual('UNSET', most_severe_violation_type_subtype)
def test_us_mo_get_violation_type_subtype_strings_for_violation_technical( self, ) -> None: # Arrange violation = StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code=_STATE_CODE, violation_type=StateSupervisionViolationType.TECHNICAL, ) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code=_STATE_CODE, condition="EMP") ], ) # Act type_subtype_strings = ( self.delegate.get_violation_type_subtype_strings_for_violation( violation)) # Assert expected_type_subtype_strings = ["EMP", "TECHNICAL"] self.assertEqual(expected_type_subtype_strings, type_subtype_strings)
def test_getRankedViolationTypeAndSubtypeCounts(self): # Arrange violations = [ StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( condition='LAW') ]), StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( condition='DRG') ]), StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ]), StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType. MISDEMEANOR), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ]) ] # Act ordered_counts = get_ranked_violation_type_and_subtype_counts( violations, VIOLATION_TYPE_SEVERITY_ORDER) # Assert expected_counts = OrderedDict([('fel', 2), ('subs', 1), ('tech', 1)]) self.assertEqual(expected_counts, ordered_counts)
def test_get_violation_type_frequency_counter_us_pa(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code="US_PA", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.ABSCONDED, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.FELONY, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text="L05", ), ], ), StateSupervisionViolation.new_with_defaults( state_code="US_PA", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.MISDEMEANOR, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text="H12", ), ], ), ] violation_type_frequency_counter = ( violation_utils.get_violation_type_frequency_counter( violations, UsPaViolationDelegate() ) ) self.assertEqual( [["ABSCONDED", "FELONY", "LOW_TECH"], ["MISDEMEANOR", "SUBSTANCE_ABUSE"]], violation_type_frequency_counter, )
def test_get_violation_and_response_history_us_mo_handle_law_technicals(self): """Tests that a US_MO violation report with a TECHNICAL type and a LAW condition is not treated like a citation with a LAW condition.""" supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code="US_MO", violation_date=datetime.date(2009, 1, 7), supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_MO", violation_type=StateSupervisionViolationType.TECHNICAL, ), ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_MO", condition="LAW" ), ], ) supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults( state_code="US_MO", supervision_violation_response_id=_DEFAULT_SSVR_ID, response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT, response_subtype="ITR", response_date=datetime.date(2009, 1, 7), is_draft=False, supervision_violation_response_decisions=[ StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_MO", decision=StateSupervisionViolationResponseDecision.REVOCATION, revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION, ), StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_MO", decision=StateSupervisionViolationResponseDecision.CONTINUANCE, revocation_type=StateSupervisionViolationResponseRevocationType.SHOCK_INCARCERATION, ), ], supervision_violation=supervision_violation, ) revocation_date = datetime.date(2009, 2, 13) violation_history = violation_utils.get_violation_and_response_history( revocation_date, [supervision_violation_response], UsMoViolationDelegate() ) expected_output = violation_utils.ViolationHistory( most_severe_violation_type=StateSupervisionViolationType.TECHNICAL, most_severe_violation_type_subtype=StateSupervisionViolationType.TECHNICAL.value, most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION, response_count=1, violation_history_description="1tech", violation_type_frequency_counter=[["LAW", "TECHNICAL"]], ) self.assertEqual(expected_output, violation_history)
def test_get_violation_and_response_history_with_us_mo_subtype(self): supervision_violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code="US_MO", violation_date=datetime.date(2009, 1, 3), supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_MO", violation_type=StateSupervisionViolationType.TECHNICAL, ), ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_MO", condition="DRG" ), StateSupervisionViolatedConditionEntry.new_with_defaults( state_code="US_MO", condition="OTHER" ), ], ) supervision_violation_response = StateSupervisionViolationResponse.new_with_defaults( supervision_violation_response_id=_DEFAULT_SSVR_ID, response_type=StateSupervisionViolationResponseType.VIOLATION_REPORT, response_subtype="INI", state_code="US_MO", response_date=datetime.date(2009, 1, 7), supervision_violation_response_decisions=[ StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_MO", decision=StateSupervisionViolationResponseDecision.REVOCATION, revocation_type=StateSupervisionViolationResponseRevocationType.REINCARCERATION, ), StateSupervisionViolationResponseDecisionEntry.new_with_defaults( state_code="US_MO", decision=StateSupervisionViolationResponseDecision.CONTINUANCE, ), ], supervision_violation=supervision_violation, ) revocation_date = datetime.date(2009, 2, 13) violation_history = violation_utils.get_violation_and_response_history( revocation_date, [supervision_violation_response], UsMoViolationDelegate() ) expected_output = violation_utils.ViolationHistory( most_severe_violation_type=StateSupervisionViolationType.TECHNICAL, most_severe_violation_type_subtype="SUBSTANCE_ABUSE", most_severe_response_decision=StateSupervisionViolationResponseDecision.REVOCATION, response_count=1, violation_history_description="1subs", violation_type_frequency_counter=[["SUBSTANCE_ABUSE", "OTHER"]], ) self.assertEqual(expected_output, violation_history)
def test_get_violation_type_frequency_counter(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code='US_XX', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.ABSCONDED ), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ], ) ] violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter( violations) self.assertEqual([['ABSCONDED', 'FELONY']], violation_type_frequency_counter)
def test_get_violation_type_frequency_counter_us_mo(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code='US_MO', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.ABSCONDED ), StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.FELONY) ], supervision_violated_conditions=[ StateSupervisionViolatedConditionEntry.new_with_defaults( condition='DRG') ]) ] violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter( violations) self.assertEqual([['ABSCONDED', 'FELONY', 'SUBSTANCE_ABUSE']], violation_type_frequency_counter)
def test_get_violation_type_frequency_counter(self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code="US_XX", supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.ABSCONDED, ), StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.FELONY, ), ], ) ] violation_type_frequency_counter = ( violation_utils.get_violation_type_frequency_counter(violations)) self.assertEqual([["ABSCONDED", "FELONY"]], violation_type_frequency_counter)
def test_identify_most_severe_violation_type_test_all_types(self): for violation_type in StateSupervisionViolationType: violation = StateSupervisionViolation.new_with_defaults( state_code='US_MO', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=violation_type) ]) most_severe_violation_type, most_severe_violation_type_subtype = \ calculator_utils.identify_most_severe_violation_type_and_subtype([violation]) self.assertEqual(most_severe_violation_type, violation_type) self.assertEqual('UNSET', most_severe_violation_type_subtype)
def test_identify_most_severe_violation_type_test_all_types(self) -> None: for violation_type in StateSupervisionViolationType: violation = StateSupervisionViolation.new_with_defaults( state_code='US_XX', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=violation_type) ]) most_severe_violation_type, most_severe_violation_type_subtype = \ violation_utils.identify_most_severe_violation_type_and_subtype([violation]) self.assertEqual(most_severe_violation_type, violation_type) self.assertEqual(violation_type.value, most_severe_violation_type_subtype)
def testSetViolationOnViolationsResponse(self): """Tests that the hydrated StateSupervisionViolation is set on the StateSupervisionViolationResponse.""" supervision_violation_response = \ StateSupervisionViolationResponse.new_with_defaults( supervision_violation_response_id=123, response_type= StateSupervisionViolationResponseType.PERMANENT_DECISION ) supervision_violation = \ StateSupervisionViolation.new_with_defaults( supervision_violation_id=999, supervision_violation_responses= [supervision_violation_response], supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL )] ) supervision_violations_and_responses = ( {'violations': [supervision_violation], 'violation_responses': [supervision_violation_response] } ) expected_violation_response = \ StateSupervisionViolationResponse.new_with_defaults( supervision_violation_response_id=123, response_type= StateSupervisionViolationResponseType.PERMANENT_DECISION, supervision_violation=supervision_violation ) test_pipeline = TestPipeline() output = (test_pipeline | beam.Create([(12345, supervision_violations_and_responses)]) | 'Set Supervision Violation on ' 'Supervision Violation Response' >> beam.ParDo( entity_hydration_utils.SetViolationOnViolationsResponse()) ) assert_that(output, equal_to([(12345, expected_violation_response)])) test_pipeline.run()
def testSetViolationOnViolationsResponse(self): """Tests that the hydrated StateSupervisionViolation is set on the StateSupervisionViolationResponse.""" supervision_violation_response = ( StateSupervisionViolationResponse.new_with_defaults( state_code="US_XX", supervision_violation_response_id=123, response_type=StateSupervisionViolationResponseType. PERMANENT_DECISION, )) supervision_violation = StateSupervisionViolation.new_with_defaults( state_code="US_XX", supervision_violation_id=999, supervision_violation_responses=[supervision_violation_response], supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( state_code="US_XX", violation_type=StateSupervisionViolationType.TECHNICAL, ) ], ) supervision_violations_and_responses = { "violations": [supervision_violation], "violation_responses": [supervision_violation_response], } expected_violation_response = ( StateSupervisionViolationResponse.new_with_defaults( state_code="US_XX", supervision_violation_response_id=123, response_type=StateSupervisionViolationResponseType. PERMANENT_DECISION, supervision_violation=supervision_violation, )) test_pipeline = TestPipeline() output = test_pipeline | beam.Create( [(12345, supervision_violations_and_responses)] ) | "Set Supervision Violation on " "Supervision Violation Response" >> beam.ParDo( entity_hydration_utils.SetViolationOnViolationsResponse()) assert_that(output, equal_to([(12345, expected_violation_response)])) test_pipeline.run()
def test_get_violation_type_frequency_counter_us_mo_technical_only_no_conditions( self) -> None: violations = [ StateSupervisionViolation.new_with_defaults( state_code='US_MO', supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL) ]) ] violation_type_frequency_counter = violation_utils.get_violation_type_frequency_counter( violations) self.assertEqual([[StateSupervisionViolationType.TECHNICAL.value]], violation_type_frequency_counter)
def test_us_pa_get_violation_type_subtype_strings_for_violation( self) -> None: # Arrange violation = StateSupervisionViolation.new_with_defaults( state_code=_STATE_CODE, supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.LAW) ]) # Act type_subtype_strings = us_pa_get_violation_type_subtype_strings_for_violation( violation) # Assert expected_type_subtype_strings = ['LAW'] self.assertEqual(expected_type_subtype_strings, type_subtype_strings)
def test_us_pa_get_violation_type_subtype_strings_for_violation_unsupported_raw_text( self) -> None: # Arrange violation = StateSupervisionViolation.new_with_defaults( supervision_violation_id=123455, state_code='US_PA', violation_date=date(2009, 1, 3), supervision_violation_types=[ StateSupervisionViolationTypeEntry.new_with_defaults( violation_type=StateSupervisionViolationType.TECHNICAL, violation_type_raw_text='XL'), ]) # Act with pytest.raises(ValueError): _ = us_pa_get_violation_type_subtype_strings_for_violation( violation)