def test_get_rome_per_period(self): """Basic usages of get_rome_per_period.""" now = datetime.date(2015, 12, 1) job_seeker = fhs.JobSeeker({ 'region': '21', 'IDX': '1.0', 'de': [ { 'IDX': '1.0', 'DATINS': datetime.date(2013, 5, 1), 'DATANN': datetime.date(2013, 5, 22), 'CATREGR': '1', 'ROME': 'H1234', 'DEPCOM': 'Here', 'MOTINS': 'aaa', 'SEXE': '1', }, { 'IDX': '1.0', 'DATINS': datetime.date(2015, 6, 1), 'DATANN': datetime.date(2015, 6, 22), 'CATREGR': '1', 'ROME': 'A1001', 'DEPCOM': 'There', 'MOTINS': 'aaa', 'SEXE': '1', }, ], 'rome': [{ 'IDX': '1.0', 'JOURDV': datetime.date(2013, 5, 1), 'JOURFV': datetime.date(2013, 5, 10), 'ROME': 'N1234', }] }) periods = list(job_seeker.get_rome_per_period(12, 'abc', now)) self.assertEqual([ _JobseekerCriteria( jobseeker_unique_id='1.0_21', code_rome='N1234', departement=None, gender=None, ), _JobseekerCriteria( jobseeker_unique_id='1.0_21', code_rome='H1234', departement='Here', gender='1', ), _JobseekerCriteria( jobseeker_unique_id='1.0_21', code_rome='A1001', departement='There', gender='1', ) ], periods)
def test_unemployment_a_periods_switching_to_e(self): """unemployment_a_periods when job seeker starts a training.""" job_seeker = fhs.JobSeeker({ 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1', }, { 'DATINS': datetime.date(2015, 12, 22), 'DATANN': datetime.date(2015, 12, 31), 'CATREGR': '5', }, ], 'e0': [], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 12, 22), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1' })]), periods)
def test_unemployment_a_periods_useless_change(self): """unemployment_a_periods whith a change from CATREGR 1 to 2.""" job_seeker = fhs.JobSeeker({ 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'bbb', }, { 'DATINS': datetime.date(2015, 12, 22), 'DATANN': datetime.date(2015, 12, 31), 'CATREGR': '2', 'MOTINS': 'ccc', 'MOTANN': 'ddd', }, ], 'e0': [], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 12, 31), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 31), 'CATREGR': '2', 'MOTINS': 'aaa', 'MOTANN': 'ddd' })]), periods)
def test_unemployment_a_periods_switching_to_b(self): """unemployment_a_periods when job seeker starts partial work.""" job_seeker = fhs.JobSeeker({ 'de': [{ 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 12, 22), 'CATREGR': '1', }], 'e0': [{ 'MOIS': '201510' }, { 'MOIS': '201511' }, { 'MOIS': '201512' }], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([ (datetime.date(2015, 5, 1), datetime.date(2015, 10, 1), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 10, 1), 'CATREGR': '1', 'MOTANN': fhs.CancellationReason.STARTING_PART_TIME_WORK }) ]), periods)
def test_state_at_date(self) -> None: """Basic usages of state_at_date.""" job_seeker = fhs.JobSeeker( 1, '01', { 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1', 'ROME': 'H1234', }, { 'DATINS': datetime.date(2015, 6, 1), 'DATANN': datetime.date(2015, 6, 22), 'CATREGR': '1', 'ROME': 'A1001', }, ], }) first_state = { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1', 'ROME': 'H1234', } tests = [ _StateAtDateTestCase(name='In the middle', date=datetime.date(2015, 5, 10), expect=first_state), _StateAtDateTestCase(name='Before unemployment', date=datetime.date(2014, 5, 10), expect=None), _StateAtDateTestCase(name='After unemployment', date=datetime.date(2016, 5, 10), expect=None), _StateAtDateTestCase(name='Between 2 unemployment periods', date=datetime.date(2015, 5, 30), expect=None), _StateAtDateTestCase(name='First day of unemployment', date=datetime.date(2015, 5, 1), expect=first_state), _StateAtDateTestCase(name='First day of employment', date=datetime.date(2015, 5, 22), expect=None), ] for test in tests: state = job_seeker.state_at_date(test.date) self.assertEqual(test.expect, state, msg=test.name)
def test_unemployment_a_periods(self): """Basic usage of unemployment_a_periods.""" job_seeker = fhs.JobSeeker({ 'de': [{ 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1', }], 'e0': [], }) periods = job_seeker.unemployment_a_periods() self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 5, 22), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1' })]), periods)
def test_unemployment_a_periods_mistakenly_kicked_out(self): """unemployment_a_periods with a mistaken kick-out. Frequently some job seeker forget the required monthly updated of their data, or do not show up at a mandatory meeting with their counselor. When that happens Pôle Emploi kicks them out of their register (and stop the allowance). Usually the job seeker would then re-register very quickly to get their allowance back. We identify periods where a job seeker left the unemployment system for a short period, and treat such gaps as if they had never left. """ job_seeker = fhs.JobSeeker({ 'de': [ { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 7, 31), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'bbb', }, { 'DATINS': datetime.date(2015, 8, 12), 'DATANN': datetime.date(2015, 10, 31), 'CATREGR': '1', 'MOTINS': 'ccc', 'MOTANN': 'ddd', }, { 'DATINS': datetime.date(2015, 11, 13), 'DATANN': None, 'CATREGR': '1', 'MOTINS': 'eee', 'MOTANN': 'fff', }, ], 'e0': [], }) # The first two periods should be merged, but not the last one. periods = job_seeker.unemployment_a_periods(cover_holes_up_to=12) self.assertEqual( fhs.DateIntervals([(datetime.date(2015, 5, 1), datetime.date(2015, 10, 31), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 10, 31), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'ddd' }), (datetime.date(2015, 11, 13), None, { 'DATINS': datetime.date(2015, 11, 13), 'DATANN': None, 'CATREGR': '1', 'MOTINS': 'eee', 'MOTANN': 'fff' })]), periods) self.assertEqual( fhs.Period( datetime.date(2015, 5, 1), datetime.date(2015, 10, 31), { 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 10, 31), 'CATREGR': '1', 'MOTINS': 'aaa', 'MOTANN': 'ddd' }), periods.first_contiguous_period())
def test_get_training_periods(self) -> None: """Basic usages of all_training_periods.""" job_seeker = fhs.JobSeeker( 1, '21', { 'de': [{ 'IDX': '1.0', 'DATINS': datetime.date(2013, 5, 1), 'DATANN': datetime.date(2013, 5, 22), 'CATREGR': '1', 'ROME': 'H1234', 'DEPCOM': 'Here', 'MOTINS': 'A', 'SEXE': '1', }, { 'IDX': '1.0', 'DATINS': datetime.date(2015, 5, 1), 'DATANN': datetime.date(2015, 5, 22), 'CATREGR': '1', 'ROME': 'B1234', 'DEPCOM': 'There', 'MOTINS': 'A', 'SEXE': '1', }], 'p2': [{ 'IDX': '1.0', 'P2DATDEB': datetime.date(2013, 5, 25), 'P2DATFIN': datetime.date(2013, 5, 30), 'FORMACOD': '42745', 'OBJFORM': '1', 'P2NIVFOR': 1, }, { 'IDX': '1.0', 'P2DATDEB': datetime.date(2016, 5, 1), 'P2DATFIN': datetime.date(2016, 5, 10), 'FORMACOD': '31685', 'OBJFORM': 'A', 'P2NIVFOR': 2, }] }) periods = job_seeker.all_training_periods() expected_periods = fhs.DateIntervals([ (datetime.date(2013, 5, 25), datetime.date(2013, 5, 30), { 'IDX': '1.0', 'P2DATDEB': datetime.date(2013, 5, 25), 'P2DATFIN': datetime.date(2013, 5, 30), 'FORMACOD': '42745', 'OBJFORM': '1', 'ROME': 'H1234', 'DEPCOM': 'Here', 'P2NIVFOR': 1, }), (datetime.date(2016, 5, 1), datetime.date(2016, 5, 10), { 'IDX': '1.0', 'P2DATDEB': datetime.date(2016, 5, 1), 'P2DATFIN': datetime.date(2016, 5, 10), 'FORMACOD': '31685', 'OBJFORM': 'A', 'ROME': 'B1234', 'DEPCOM': 'There', 'P2NIVFOR': 2, }), ]) self.assertEqual(expected_periods, periods)