def test_hasDefaultEnum(self):
        entity = entities.StateIncarcerationSentence.new_with_defaults(
            incarceration_type=entities.StateIncarcerationType.STATE_PRISON)
        db_entity = converter.convert_entity_to_schema_object(entity)

        self.assertTrue(
            entity.has_default_enum(
                'incarceration_type',
                entities.StateIncarcerationType.STATE_PRISON))

        entity.incarceration_type_raw_text = 'PRISON'
        self.assertFalse(entity.has_default_enum(
            'incarceration_type', entities.StateIncarcerationType.STATE_PRISON))

        entity.incarceration_type = entities.StateIncarcerationType.COUNTY_JAIL
        entity.incarceration_type_raw_text = None
        self.assertFalse(entity.has_default_enum(
            'incarceration_type', entities.StateIncarcerationType.STATE_PRISON))

        self.assertTrue(
            db_entity.has_default_enum(
                'incarceration_type',
                entities.StateIncarcerationType.STATE_PRISON))

        db_entity.incarceration_type_raw_text = 'PRISON'
        self.assertFalse(db_entity.has_default_enum(
            'incarceration_type', entities.StateIncarcerationType.STATE_PRISON))

        db_entity.incarceration_type = \
            entities.StateIncarcerationType.COUNTY_JAIL.value
        db_entity.incarceration_type_raw_text = None
        self.assertFalse(entity.has_default_enum(
            'incarceration_type', entities.StateIncarcerationType.STATE_PRISON))
예제 #2
0
    def test_getFieldAsList(self) -> None:
        fine = entities.StateFine.new_with_defaults(
            state_code="us_nc",
            external_id="ex1",
            status=StateFineStatus.PRESENT_WITHOUT_INFO,
        )
        fine_2 = entities.StateFine.new_with_defaults(
            state_code="us_nc",
            external_id="ex2",
            status=StateFineStatus.PRESENT_WITHOUT_INFO,
        )
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="us_nc",
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            fines=[fine, fine_2],
        )
        db_entity = converter.convert_entity_to_schema_object(entity)

        self.assertCountEqual(["us_nc"],
                              entity.get_field_as_list("state_code"))
        self.assertCountEqual([fine, fine_2],
                              entity.get_field_as_list("fines"))
        self.assertCountEqual(
            [], entity.get_field_as_list("supervision_sentences"))

        self.assertCountEqual(["us_nc"],
                              db_entity.get_field_as_list("state_code"))
        self.assertCountEqual(
            [fine, fine_2],
            converter.convert_schema_objects_to_entity(
                db_entity.get_field_as_list("fines"),
                populate_back_edges=False),
        )
        self.assertCountEqual(
            [], db_entity.get_field_as_list("supervision_sentences"))
예제 #3
0
    def test_clearField(self) -> None:
        fine = entities.StateFine.new_with_defaults(
            state_code="us_nc",
            external_id="ex1",
            status=StateFineStatus.PRESENT_WITHOUT_INFO,
        )
        fine_2 = entities.StateFine.new_with_defaults(
            state_code="us_nc",
            external_id="ex2",
            status=StateFineStatus.PRESENT_WITHOUT_INFO,
        )
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="us_nc",
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            fines=[fine, fine_2],
        )
        db_entity = converter.convert_entity_to_schema_object(entity)
        if not isinstance(db_entity, schema.StateSentenceGroup):
            self.fail(f"Unexpected type for db_entity: {[db_entity]}.")

        entity.clear_field("state_code")
        entity.clear_field("fines")
        self.assertIsNone(entity.state_code)
        self.assertCountEqual([], entity.fines)

        db_entity.clear_field("state_code")
        db_entity.clear_field("fines")
        self.assertIsNone(db_entity.state_code)
        self.assertCountEqual([], db_entity.fines)
    def test_setFieldFromList_raises(self):
        entity = entities.StateSentenceGroup.new_with_defaults()
        db_entity = converter.convert_entity_to_schema_object(entity)

        with pytest.raises(ValueError):
            entity.set_field_from_list('state_code', ['us_nc', 'us_sc'])

        with pytest.raises(ValueError):
            db_entity.set_field_from_list('state_code', ['us_nc', 'us_sc'])
예제 #5
0
    def test_setFieldFromList_raises(self) -> None:
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="US_XX",
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO)
        db_entity = converter.convert_entity_to_schema_object(entity)

        with pytest.raises(ValueError):
            entity.set_field_from_list("state_code", ["us_nc", "us_sc"])

        with pytest.raises(ValueError):
            db_entity.set_field_from_list("state_code", ["us_nc", "us_sc"])
    def test_hasDefaultStatus(self):
        entity = entities.StateSentenceGroup.new_with_defaults(
            status=entities.StateSentenceStatus.PRESENT_WITHOUT_INFO)
        db_entity = converter.convert_entity_to_schema_object(entity)

        self.assertTrue(entity.has_default_status())
        entity.status = entities.StateSentenceStatus.SERVING
        self.assertFalse(entity.has_default_status())

        self.assertTrue(db_entity.has_default_status())
        db_entity.status = entities.StateSentenceStatus.SERVING.value
        self.assertFalse(db_entity.has_default_status())
    def test_getField(self):
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code='us_nc', county_code=None)
        db_entity = converter.convert_entity_to_schema_object(entity)

        self.assertEqual('us_nc', entity.get_field('state_code'))
        self.assertEqual('us_nc', db_entity.get_field('state_code'))

        with pytest.raises(ValueError):
            entity.get_field('country_code')

        with pytest.raises(ValueError):
            db_entity.get_field('country_code')
    def test_setFieldFromList(self):
        entity = entities.StateSentenceGroup.new_with_defaults()
        fine = entities.StateFine.new_with_defaults(external_id='ex1')
        fine_2 = entities.StateFine.new_with_defaults(external_id='ex2')

        db_entity = converter.convert_entity_to_schema_object(entity)
        db_fine = converter.convert_entity_to_schema_object(fine)
        db_fine_2 = converter.convert_entity_to_schema_object(fine_2)

        entity.set_field_from_list('state_code', ['us_nc'])
        self.assertEqual('us_nc', entity.state_code)

        db_entity.set_field_from_list('state_code', ['us_nc'])
        self.assertEqual('us_nc', db_entity.state_code)

        entity.set_field_from_list('fines', [fine, fine_2])
        self.assertCountEqual([fine, fine_2], entity.fines)

        db_entity.set_field_from_list('fines', [db_fine, db_fine_2])
        self.assertCountEqual([fine, fine_2],
                              converter.convert_schema_objects_to_entity(
                                  db_entity.fines,
                                  populate_back_edges=False))
예제 #9
0
    def test_setFieldFromList(self) -> None:
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="US_XX",
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO)
        fine = entities.StateFine.new_with_defaults(
            state_code="US_XX",
            external_id="ex1",
            status=StateFineStatus.PRESENT_WITHOUT_INFO,
        )
        fine_2 = entities.StateFine.new_with_defaults(
            state_code="US_XX",
            external_id="ex2",
            status=StateFineStatus.PRESENT_WITHOUT_INFO,
        )

        db_entity = converter.convert_entity_to_schema_object(entity)
        if not isinstance(db_entity, schema.StateSentenceGroup):
            self.fail(f"Unexpected type for db_entity: {[db_entity]}.")

        db_fine = converter.convert_entity_to_schema_object(fine)
        db_fine_2 = converter.convert_entity_to_schema_object(fine_2)

        entity.set_field_from_list("state_code", ["us_nc"])
        self.assertEqual("us_nc", entity.state_code)

        db_entity.set_field_from_list("state_code", ["us_nc"])
        self.assertEqual("us_nc", db_entity.state_code)

        entity.set_field_from_list("fines", [fine, fine_2])
        self.assertCountEqual([fine, fine_2], entity.fines)

        db_entity.set_field_from_list("fines", [db_fine, db_fine_2])
        self.assertCountEqual(
            [fine, fine_2],
            converter.convert_schema_objects_to_entity(
                db_entity.fines, populate_back_edges=False),
        )
예제 #10
0
    def test_hasDefaultStatus(self) -> None:
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="US_XX",
            status=entities.StateSentenceStatus.PRESENT_WITHOUT_INFO)
        db_entity = converter.convert_entity_to_schema_object(entity)
        if not isinstance(db_entity, schema.StateSentenceGroup):
            self.fail(f"Unexpected type for db_entity: {[db_entity]}.")

        self.assertTrue(entity.has_default_status())
        entity.status = entities.StateSentenceStatus.SERVING
        self.assertFalse(entity.has_default_status())

        self.assertTrue(db_entity.has_default_status())
        db_entity.status = entities.StateSentenceStatus.SERVING.value
        self.assertFalse(db_entity.has_default_status())
    def test_clearField(self):
        fine = entities.StateFine.new_with_defaults(external_id='ex1')
        fine_2 = entities.StateFine.new_with_defaults(external_id='ex2')
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code='us_nc', fines=[fine, fine_2])
        db_entity = converter.convert_entity_to_schema_object(entity)

        entity.clear_field('state_code')
        entity.clear_field('fines')
        self.assertIsNone(entity.state_code)
        self.assertCountEqual([], entity.fines)

        db_entity.clear_field('state_code')
        db_entity.clear_field('fines')
        self.assertIsNone(db_entity.state_code)
        self.assertCountEqual([], db_entity.fines)
예제 #12
0
    def test_getField(self) -> None:
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="us_nc",
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            county_code=None,
        )
        db_entity = converter.convert_entity_to_schema_object(entity)

        self.assertEqual("us_nc", entity.get_field("state_code"))
        self.assertEqual("us_nc", db_entity.get_field("state_code"))

        with pytest.raises(ValueError):
            entity.get_field("country_code")

        with pytest.raises(ValueError):
            db_entity.get_field("country_code")
예제 #13
0
    def test_hasDefaultEnum(self) -> None:
        entity = entities.StateIncarcerationSentence.new_with_defaults(
            state_code="US_XX",
            incarceration_type=entities.StateIncarcerationType.STATE_PRISON,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
        )
        db_entity = converter.convert_entity_to_schema_object(entity)
        if not isinstance(db_entity, schema.StateIncarcerationSentence):
            self.fail(f"Unexpected type for db_entity: {[db_entity]}.")

        self.assertTrue(
            entity.has_default_enum(
                "incarceration_type",
                entities.StateIncarcerationType.STATE_PRISON))

        entity.incarceration_type_raw_text = "PRISON"
        self.assertFalse(
            entity.has_default_enum(
                "incarceration_type",
                entities.StateIncarcerationType.STATE_PRISON))

        entity.incarceration_type = entities.StateIncarcerationType.COUNTY_JAIL
        entity.incarceration_type_raw_text = None
        self.assertFalse(
            entity.has_default_enum(
                "incarceration_type",
                entities.StateIncarcerationType.STATE_PRISON))

        self.assertTrue(
            db_entity.has_default_enum(
                "incarceration_type",
                entities.StateIncarcerationType.STATE_PRISON))

        db_entity.incarceration_type_raw_text = "PRISON"
        self.assertFalse(
            db_entity.has_default_enum(
                "incarceration_type",
                entities.StateIncarcerationType.STATE_PRISON))

        db_entity.incarceration_type = entities.StateIncarcerationType.COUNTY_JAIL.value
        db_entity.incarceration_type_raw_text = None
        self.assertFalse(
            entity.has_default_enum(
                "incarceration_type",
                entities.StateIncarcerationType.STATE_PRISON))
예제 #14
0
    def test_setField(self) -> None:
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code="US_XX",
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO)
        db_entity = converter.convert_entity_to_schema_object(entity)
        if not isinstance(db_entity, schema.StateSentenceGroup):
            self.fail(f"Unexpected type for db_entity: {[db_entity]}.")

        entity.set_field("state_code", "us_nc")
        db_entity.set_field("state_code", "us_nc")

        self.assertEqual("us_nc", entity.state_code)
        self.assertEqual("us_nc", db_entity.state_code)

        with pytest.raises(ValueError):
            entity.set_field("country_code", "us")

        with pytest.raises(ValueError):
            db_entity.set_field("country_code", "us")
    def test_getFieldAsList(self):
        fine = entities.StateFine.new_with_defaults(external_id='ex1')
        fine_2 = entities.StateFine.new_with_defaults(external_id='ex2')
        entity = entities.StateSentenceGroup.new_with_defaults(
            state_code='us_nc', fines=[fine, fine_2])
        db_entity = converter.convert_entity_to_schema_object(entity)

        self.assertCountEqual(['us_nc'],
                              entity.get_field_as_list('state_code'))
        self.assertCountEqual([fine, fine_2],
                              entity.get_field_as_list('fines'))
        self.assertCountEqual([],
                              entity.get_field_as_list('supervision_sentences'))

        self.assertCountEqual(['us_nc'],
                              db_entity.get_field_as_list('state_code'))
        self.assertCountEqual([fine, fine_2],
                              converter.convert_schema_objects_to_entity(
                                  db_entity.get_field_as_list('fines'),
                                  populate_back_edges=False))
        self.assertCountEqual([], db_entity.get_field_as_list(
            'supervision_sentences'))
    def test_moveIncidentsOntoPeriods(self) -> None:
        merged_incarceration_period_1 = StateIncarcerationPeriod.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID + "|" + _EXTERNAL_ID_2,
            status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY,
            facility=_FACILITY,
            admission_date=_DATE_1,
            admission_reason=StateIncarcerationPeriodAdmissionReason.NEW_ADMISSION,
            release_date=_DATE_3,
            release_reason=StateIncarcerationPeriodReleaseReason.TRANSFER,
        )
        merged_incarceration_period_2 = StateIncarcerationPeriod.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID_3 + "|" + _EXTERNAL_ID_4,
            status=StateIncarcerationPeriodStatus.NOT_IN_CUSTODY,
            facility=_FACILITY_2,
            admission_date=_DATE_3,
            admission_reason=StateIncarcerationPeriodAdmissionReason.TRANSFER,
            release_date=_DATE_5,
            release_reason=StateIncarcerationPeriodReleaseReason.TRANSFER,
        )
        unmerged_incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID_5,
            status=StateIncarcerationPeriodStatus.IN_CUSTODY,
            facility=_FACILITY_3,
            admission_date=_DATE_5,
            admission_reason=StateIncarcerationPeriodAdmissionReason.TRANSFER,
        )

        incident_1 = StateIncarcerationIncident.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID,
            facility=_FACILITY,
            incident_date=_DATE_2,
        )
        incident_2 = StateIncarcerationIncident.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID_2,
            facility=_FACILITY_2,
            incident_date=_DATE_4,
        )
        incident_3 = StateIncarcerationIncident.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID_3,
            facility=_FACILITY_4,
            incident_date=_DATE_7,
        )
        placeholder_incarceration_period = StateIncarcerationPeriod.new_with_defaults(
            state_code=_STATE_CODE,
            incarceration_incidents=[incident_1, incident_2, incident_3],
            status=StateIncarcerationPeriodStatus.PRESENT_WITHOUT_INFO,
        )

        incarceration_sentence = StateIncarcerationSentence.new_with_defaults(
            state_code=_STATE_CODE,
            external_id=_EXTERNAL_ID,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            incarceration_periods=[
                merged_incarceration_period_1,
                merged_incarceration_period_2,
                unmerged_incarceration_period,
            ],
        )
        placeholder_incarceration_sentence = (
            StateIncarcerationSentence.new_with_defaults(
                state_code=_STATE_CODE,
                external_id=_EXTERNAL_ID_2,
                incarceration_periods=[placeholder_incarceration_period],
                status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            )
        )
        sentence_group = StateSentenceGroup.new_with_defaults(
            state_code=_STATE_CODE,
            status=StateSentenceStatus.PRESENT_WITHOUT_INFO,
            incarceration_sentences=[
                incarceration_sentence,
                placeholder_incarceration_sentence,
            ],
        )

        person = StatePerson.new_with_defaults(
            state_code=_STATE_CODE, sentence_groups=[sentence_group]
        )

        expected_merged_period = attr.evolve(
            merged_incarceration_period_1, incarceration_incidents=[incident_1]
        )
        expected_merged_period_2 = attr.evolve(
            merged_incarceration_period_2, incarceration_incidents=[incident_2]
        )
        expected_unmerged_period = attr.evolve(unmerged_incarceration_period)
        expected_placeholder_period = attr.evolve(
            placeholder_incarceration_period, incarceration_incidents=[incident_3]
        )
        expected_sentence = attr.evolve(
            incarceration_sentence,
            incarceration_periods=[
                expected_merged_period,
                expected_merged_period_2,
                expected_unmerged_period,
            ],
        )
        expected_placeholder_sentence = attr.evolve(
            placeholder_incarceration_sentence,
            incarceration_periods=[expected_placeholder_period],
        )
        expected_sentence_group = attr.evolve(
            sentence_group,
            incarceration_sentences=[expected_sentence, expected_placeholder_sentence],
        )
        expected_person = convert_entity_to_schema_object(
            attr.evolve(person, sentence_groups=[expected_sentence_group])
        )

        schema_person = convert_entity_to_schema_object(person)
        if not isinstance(schema_person, schema.StatePerson):
            self.fail(f"Expected schema.StatePerson. Found {schema_person}")

        move_incidents_onto_periods([schema_person])
        self.assert_schema_objects_equal(expected_person, schema_person)
 def test_isSentenceEndedByStatus(self):
     sentence = StateSupervisionSentence.new_with_defaults()
     for status in StateSentenceStatus:
         sentence.status = status
         _is_sentence_ended_by_status(
             converter.convert_entity_to_schema_object(sentence))