def test_delays_order(self): """A NoticeXML's effective date can be delayed by multiple NoticeXMLs. Last one wins""" delayed, delayer1, delayer2 = Mock(), Mock(), Mock() delayed.configure_mock(published=1, fr_volume='vvv', start_page=100, end_page=200, version_id='1', **{'delays.return_value': []}) delayer1.configure_mock( published=2, fr_volume='vvv', start_page=200, end_page=300, version_id='2', **{'delays.return_value': [FRDelay('vvv', 100, 'zzz-date')]}) delayer2.configure_mock( published=3, fr_volume='vvv', start_page=300, end_page=400, version_id='3', **{'delays.return_value': [FRDelay('vvv', 100, 'aaa-date')]}) delays = versions.delays([delayed, delayer2, delayer1]) self.assertEqual(delays, {'1': versions.Delay('3', 'aaa-date')}) delays = versions.delays([delayed, delayer1, delayer2]) self.assertEqual(delays, {'1': versions.Delay('3', 'aaa-date')})
def test_delays(self): """For NoticeXMLs which cause delays to other NoticeXMLs, we'd like to get a dictionary of delayed -> Delay(delayer, delayed_until)""" not_involved, delayed, delayer = Mock(), Mock(), Mock() not_involved.configure_mock(published=1, fr_volume='vvv', start_page=100, end_page=200, version_id='1', **{'delays.return_value': []}) delayed.configure_mock(published=2, fr_volume='vvv', start_page=300, end_page=400, version_id='2', **{'delays.return_value': []}) delayer.configure_mock(published=3, fr_volume='vvv', start_page=500, end_page=600, version_id='3', **{ 'delays.return_value': [ FRDelay('other', 1, 'another-date'), FRDelay('vvv', 350, 'new-date') ] }) delays = versions.delays([not_involved, delayed, delayer]) self.assertEqual(delays, {'2': versions.Delay('3', 'new-date')})
def test_write_if_needed_delays(monkeypatch): """Delays introduce dependencies.""" monkeypatch.setattr(versions, 'write_to_disk', Mock()) entry.Entry('notice_xml', '111').write(b'content') entry.Entry('notice_xml', '222').write(b'content') entry.Entry('version', 'title', 'part', '111').write(b'out') versions.write_if_needed('title', 'part', ['111'], {'111': 'xml111'}, {'111': versions.Delay('222', 'until-date')}) assert not versions.write_to_disk.called # Simulate a change to an input file label_id = str(entry.Notice('222')) new_time = timezone.now() + timedelta(hours=1) DBEntry.objects.filter(label_id=label_id).update(modified=new_time) versions.write_if_needed('title', 'part', ['111'], {'111': 'xml111'}, {'111': versions.Delay('222', 'until-date')}) assert versions.write_to_disk.called
def test_write_if_needed_delays(self, write_to_disk): """Delays introduce dependencies.""" with self.cli.isolated_filesystem(): entry.Entry('notice_xml', '111').write(b'content') entry.Entry('notice_xml', '222').write(b'content') entry.Entry('version', 'title', 'part', '111').write(b'out') versions.write_if_needed( 'title', 'part', ['111'], {'111': 'xml111'}, {'111': versions.Delay('222', 'until-date')}) self.assertFalse(write_to_disk.called) # Simulate a change to an input file os.utime(str(entry.Notice('222')), (time() + 1000, time() + 1000)) versions.write_if_needed( 'title', 'part', ['111'], {'111': 'xml111'}, {'111': versions.Delay('222', 'until-date')}) self.assertTrue(write_to_disk.called)
def test_write_if_needed_delays(self, write_to_disk): """Delays introduce dependencies.""" with self.cli.isolated_filesystem(): entry.Entry('notice_xml', '111').write(b'content') entry.Entry('notice_xml', '222').write(b'content') entry.Entry('version', 'title', 'part', '111').write(b'out') versions.write_if_needed( 'title', 'part', ['111'], {'111': 'xml111'}, {'111': versions.Delay('222', 'until-date')}) self.assertFalse(write_to_disk.called) # Simulate a change to an input file label_id = str(entry.Notice('222')) new_time = timezone.now() + timedelta(hours=1) DBEntry.objects.filter(label_id=label_id).update(modified=new_time) versions.write_if_needed( 'title', 'part', ['111'], {'111': 'xml111'}, {'111': versions.Delay('222', 'until-date')}) self.assertTrue(write_to_disk.called)
def test_write_to_disk(): """If a version has been delayed, its effective date should be part of the serialized json""" xml = Mock(effective=date(2002, 2, 2), version_id='111', fr_citation=Citation(1, 1)) path = entry.Version('12', '1000') versions.write_to_disk(xml, path / '111') xml.version_id = '222' versions.write_to_disk(xml, path / '222', versions.Delay(by='333', until=date(2004, 4, 4))) assert (path / '111').read().effective == date(2002, 2, 2) assert (path / '222').read().effective == date(2004, 4, 4)
def test_write_to_disk(self): """If a version has been delayed, its effective date should be part of the serialized json""" xml = Mock() path = entry.Version('12', '1000') with self.cli.isolated_filesystem(): xml.configure_mock(effective=date(2002, 2, 2), version_id='111', published=date(2002, 1, 1)) versions.write_to_disk(xml, path / '111') xml.configure_mock(version_id='222') versions.write_to_disk( xml, path / '222', versions.Delay(by='333', until=date(2004, 4, 4))) self.assertEqual((path / '111').read().effective, date(2002, 2, 2)) self.assertEqual((path / '222').read().effective, date(2004, 4, 4))