Example #1
0
def test_read_database_cache(temp_user_cache, monkeypatch):
    read = set()
    monkeypatch.setattr(events_mod.pickle, 'load',
                        lambda f: read.add(f.name.split('/')[-1][:-4]))
    in_dir = 'tests/data/test'
    events = Events.read(in_dir)
    events = Events.read(in_dir)
    assert read == set(events.tasks())
Example #2
0
def test_read_database_cache_broken(temp_user_cache, tmpdir):
    in_dir = 'tests/data/test'
    events = Events.read(in_dir)
    cache_files = glob(tmpdir.join('cache', '**', '*.pkl').strpath,
                       recursive=True)
    with open(cache_files[0], 'w') as f:
        f.write('Broken data')
    events2 = Events.read(in_dir)
    assert events == events2
Example #3
0
def test_read_database_cache(temp_user_cache, monkeypatch):
    read = set()
    monkeypatch.setattr(
        events_mod.pickle, 'load',
        lambda f: read.add(f.name.split('/')[-1][:-4])
    )
    in_dir = 'tests/data/test'
    events = Events.read(in_dir)
    events = Events.read(in_dir)
    assert read == set(events.tasks())
Example #4
0
def test_read_database_cache_broken(temp_user_cache, tmpdir):
    in_dir = 'tests/data/test'
    events = Events.read(in_dir)
    cache_files = glob(
        tmpdir.join('cache', '**', '*.pkl').strpath, recursive=True
    )
    with open(cache_files[0], 'w') as f:
        f.write('Broken data')
    events2 = Events.read(in_dir)
    assert events == events2
Example #5
0
def test_check_events(n, task, start, delta):
    # FIXME: Clean-ish way to perform check, with the caveat that it parses the
    # database on each entry.  Need a better solution.
    events = Events.read('tests/data/test', write_cache=False)
    expect(events[n].task) == task
    expect(events[n].start) == start
    expect(events[n].delta) == delta
Example #6
0
def test_check_events(n: int, task: str, start: datetime, delta: timedelta):
    # FIXME: Clean-ish way to perform check, with the caveat that it parses the
    # database on each entry.  Need a better solution.
    events = Events.read('tests/data/test', write_cache=False)
    assert events[n].task == task
    assert events[n].start == start
    assert events[n].delta == delta
Example #7
0
def test_fail_start_when_task_typo():
    events = Events.read('tests/data/test_not_running')
    with expect.raises(
            TaskNotExistError,
            "Task non_existant does not exist!  Use `--new' to "
            "create it"):
        events.start(task='non_existant')
Example #8
0
def test_write_database_cache(temp_user_cache, tmpdir):
    events = Events.read('tests/data/test')
    events._dirty = events.tasks()
    events.write(tmpdir.join('database').strpath)
    cache_files = glob(tmpdir.join('cache', '**', '*.pkl').strpath,
                       recursive=True)
    assert {f.split('/')[-1][:-4] for f in cache_files} == set(events.tasks())
Example #9
0
def test_check_events(n: int, task: str, start: datetime, delta: timedelta):
    # FIXME: Clean-ish way to perform check, with the caveat that it parses the
    # database on each entry.  Need a better solution.
    events = Events.read('tests/data/test', write_cache=False)
    assert events[n].task == task
    assert events[n].start == start
    assert events[n].delta == delta
Example #10
0
def test_check_events(n, task, start, delta):
    # FIXME: Clean-ish way to perform check, with the caveat that it parses the
    # database on each entry.  Need a better solution.
    events = Events.read('tests/data/test')
    expect(events[n].task) == task
    expect(events[n].start) == start
    expect(events[n].delta) == delta
Example #11
0
def test_fail_start_when_task_typo():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    with raises(
            TaskNotExistError,
            match='Task non_existent does not exist!  Use “--new” to '
            'create it'):
        events.start('non_existent')
Example #12
0
def test_fail_start_when_task_typo():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    with raises(
        TaskNotExistError,
        match='Task non_existent does not exist!  Use “--new” to '
        'create it'
    ):
        events.start('non_existent')
Example #13
0
def test_write_database_cache(temp_user_cache, tmpdir):
    events = Events.read('tests/data/test')
    events._dirty = events.tasks()
    events.write(tmpdir.join('database').strpath)
    cache_files = glob(
        tmpdir.join('cache', '**', '*.pkl').strpath, recursive=True
    )
    assert {f.split('/')[-1][:-4] for f in cache_files} == set(events.tasks())
Example #14
0
def test_write_database(tmpdir):
    in_dir = 'tests/data/test'
    events = Events.read(in_dir, write_cache=False)
    events._dirty = events.tasks()
    events.write(tmpdir.strpath)
    comp = dircmp(in_dir, tmpdir.strpath, [])
    assert comp.diff_files == []
    assert comp.left_only == []
    assert comp.right_only == []
    assert comp.funny_files == []
    assert comp.subdirs == {}
Example #15
0
def test_write_database(tmpdir):
    in_dir = 'tests/data/test'
    events = Events.read(in_dir, write_cache=False)
    events._dirty = events.tasks()
    events.write(tmpdir.strpath)
    comp = dircmp(in_dir, tmpdir.strpath, [])
    assert comp.diff_files == []
    assert comp.left_only == []
    assert comp.right_only == []
    assert comp.funny_files == []
    assert comp.subdirs == {}
Example #16
0
def test_write_database():
    runner = CliRunner()
    in_dir = abspath('tests/data/test')
    events = Events.read(in_dir, write_cache=False)
    events._dirty = events.tasks()
    with runner.isolated_filesystem() as tempdir:
        events.write(tempdir)
        comp = dircmp(in_dir, tempdir)
        expect(comp.diff_files) == []
        expect(comp.left_only) == []
        expect(comp.right_only) == []
        expect(comp.funny_files) == []
Example #17
0
def test_write_database():
    events = Events.read('tests/data/test')
    events._dirty = events.tasks()
    try:
        events.write('tests/data/test_write')

        old_files = sorted(glob('tests/data/test/*.csv'))
        new_files = sorted(glob('tests/data/test_write/*.csv'))
        for old, new in zip(old_files, new_files):
            expect(open(old).read()) == open(new).read()
    finally:
        for i in os.listdir('tests/data/test_write'):
            os.unlink('tests/data/test_write/%s' % i)
        os.rmdir('tests/data/test_write')
Example #18
0
def test_write_database():
    events = Events.read('tests/data/test')
    events._dirty = events.tasks()
    try:
        events.write('tests/data/test_write')

        old_files = sorted(glob('tests/data/test/*.csv'))
        new_files = sorted(glob('tests/data/test_write/*.csv'))
        for old, new in zip(old_files, new_files):
            expect(open(old).read()) == open(new).read()
    finally:
        for i in os.listdir('tests/data/test_write'):
            os.unlink('tests/data/test_write/%s' % i)
        os.rmdir('tests/data/test_write')
Example #19
0
def test_read_datebase_wrapper_write(tmpdir):
    test_dir = tmpdir.join('test').strpath
    copytree('tests/data/test', test_dir)
    with Events.wrapping(test_dir, write_cache=False) as evs:
        evs.stop()
    comp = dircmp('tests/data/test', test_dir, [])
    assert comp.diff_files == [
        'task.csv',
    ]
    assert comp.left_only == []
    assert comp.right_only == [
        'task.csv~',
    ]
    assert comp.funny_files == []
    assert comp.subdirs == {}
Example #20
0
def test_read_datebase_wrapper_write(tmpdir):
    test_dir = tmpdir.join('test').strpath
    copytree('tests/data/test', test_dir)
    with Events.wrapping(test_dir, write_cache=False) as evs:
        evs.stop()
    comp = dircmp('tests/data/test', test_dir, [])
    assert comp.diff_files == [
        'task.csv',
    ]
    assert comp.left_only == []
    assert comp.right_only == [
        'task.csv~',
    ]
    assert comp.funny_files == []
    assert comp.subdirs == {}
Example #21
0
def test_write_database_event_backups(tmpdir):
    test_dir = tmpdir.join('test').strpath
    copytree('tests/data/test_not_running', test_dir)
    events = Events.read(test_dir, write_cache=False)
    events.start('task')
    events.write(test_dir)
    comp = dircmp('tests/data/test_not_running', test_dir, [])
    assert comp.diff_files == [
        'task.csv',
    ]
    assert comp.left_only == []
    assert comp.right_only == [
        'task.csv~',
    ]
    assert comp.funny_files == []
    assert comp.subdirs == {}
Example #22
0
def test_write_database_event_backups(tmpdir):
    test_dir = tmpdir.join('test').strpath
    copytree('tests/data/test_not_running', test_dir)
    events = Events.read(test_dir, write_cache=False)
    events.start('task')
    events.write(test_dir)
    comp = dircmp('tests/data/test_not_running', test_dir, [])
    assert comp.diff_files == [
        'task.csv',
    ]
    assert comp.left_only == []
    assert comp.right_only == [
        'task.csv~',
    ]
    assert comp.funny_files == []
    assert comp.subdirs == {}
Example #23
0
def process_events(location: str) -> Dict[str, List[str]]:
    with Events.wrapping(location, write_cache=False) as evs:
        task_warning = False
        message_warning = False
        files = defaultdict(list)
        for ev in evs:
            if '-' in ev.task:
                task = ev.task.replace('-', '_')
                if not task_warning:
                    pwarn('Task names containing ‘-’ will use ‘_’ in export')
                task_warning = True
            else:
                task = ev.task
            if ev.message and not message_warning:
                pwarn('Event messages aren’t supported by timew')
                message_warning = True
            out = [
                f'inc {ev.start:%Y%m%dT%H%M%SZ}',
            ]
            if ev.delta:
                out.append(f'- {ev.start + ev.delta:%Y%m%dT%H%M%SZ}')
            out.append(f'# {task}\n')
            files[ev.start.strftime('%Y-%m')].append(' '.join(out))
    return files
Example #24
0
def process_events(location: str) -> Dict[str, List[str]]:
    with Events.wrapping(location, write_cache=False) as evs:
        task_warning = False
        message_warning = False
        files = defaultdict(list)
        for ev in evs:
            if '-' in ev.task:
                task = ev.task.replace('-', '_')
                if not task_warning:
                    pwarn('Task names containing ‘-’ will use ‘_’ in export')
                task_warning = True
            else:
                task = ev.task
            if ev.message and not message_warning:
                pwarn('Event messages aren’t supported by timew')
                message_warning = True
            out = [
                f'inc {ev.start:%Y%m%dT%H%M%SZ}',
            ]
            if ev.delta:
                out.append(f'- {ev.start + ev.delta:%Y%m%dT%H%M%SZ}')
            out.append(f'# {task}\n')
            files[ev.start.strftime('%Y-%m')].append(' '.join(out))
    return files
Example #25
0
def test_read_last(database: str, result: Optional[Event]):
    evs = Events.read('tests/data/' + database, write_cache=False)
    assert evs.last() == result
Example #26
0
def test_non_existing_database():
    expect(Events()) == Events.read("I_NEVER_EXIST")
Example #27
0
def test_read_datebase_wrapper(database: str, events: int):
    with Events.wrapping('tests/data/' + database, write_cache=False) as evs:
        assert len(evs) == events
Example #28
0
def test_sum_durations_in_database():
    events = Events.read('tests/data/test_not_running')
    expect(events.sum()) == timedelta(hours=2, minutes=15)
Example #29
0
def test_fetch_events_for_week():
    events = Events.read('tests/data/date_filtering')
    expect(len(events.for_week(year=2011, week=9))) == 1
Example #30
0
def test_write_database_no_change_noop(tmpdir):
    in_dir = 'tests/data/test'
    events = Events.read(in_dir, write_cache=False)
    events.write(tmpdir.strpath)
    assert glob(tmpdir.join('*').strpath) == []
Example #31
0
def test_list_tasks():
    events = Events.read('tests/data/test', write_cache=False)
    assert events.tasks() == ['task', 'task2']
Example #32
0
def test_read_datebase(database, events):
    evs = Events.read('tests/data/' + database, write_cache=False)
    expect(len(evs)) == events
Example #33
0
def test_non_existing_database():
    expect(Events()) == Events.read('I_NEVER_EXIST', write_cache=False)
Example #34
0
def test_current_running_event():
    events = Events.read('tests/data/test')
    expect(events.running()) == 'task'
Example #35
0
def test_fetch_events_for_date(date: Dict[str, int], expected: int):
    events = Events.read('tests/data/date_filtering', write_cache=False)
    assert len(events.for_date(**date)) == expected
Example #36
0
def test_stop_event_with_message():
    events = Events.read('tests/data/test', write_cache=False)
    events.stop(message='test')
    last = events.last()
    assert last.message == 'test'
Example #37
0
def test_fail_start_when_running():
    events = Events.read('tests/data/test', write_cache=False)
    with raises(TaskRunningError, match='Running task task!'):
        events.start('task2')
Example #38
0
def test_fail_start_with_overlap():
    evs = Events.read('tests/data/test_not_running', write_cache=False)
    with raises(TaskRunningError, match='Start date overlaps'):
        evs.start('task', start=datetime(2011, 5, 4, 9, 33))
Example #39
0
def test_store_messages_with_events():
    events = Events.read('tests/data/test', write_cache=False)
    assert events.last().message == 'finished'
Example #40
0
def test_current_running_event():
    events = Events.read('tests/data/test', write_cache=False)
    assert events.running() == 'task'
Example #41
0
def test_start_event():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    events.start('task2')
    assert events.running() == 'task2'
Example #42
0
def test_store_messages_with_events():
    events = Events.read('tests/data/test')
    expect(events.last().message) == 'finished'
Example #43
0
def test_list_tasks():
    events = Events.read('tests/data/test')
    expect(events.tasks()) == ['task', 'task2']
Example #44
0
def test_events_repr():
    ev1 = Event('task', '2011-05-05T11:23:48Z', 'PT01H00M00S')
    ev2 = Event('task', '2011-05-05T12:23:48Z', 'PT00H30M00S')
    events = Events([ev1, ev2])
    assert repr(events) == eval_repr(events)
Example #45
0
def test_read_invalid_data():
    with raises(ValueError, match='Invalid data'):
        Events.read('tests/data/faulty_csv', write_cache=False)
Example #46
0
def test_sum_durations_in_database():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    assert events.sum() == timedelta(hours=2, minutes=15)
Example #47
0
def test_no_currently_running_event():
    events = Events.read('tests/data/test_not_running')
    expect(events.running()) is False
Example #48
0
def test_non_existing_database():
    assert Events() == Events.read('I_NEVER_EXIST', write_cache=False)
Example #49
0
def test_no_currently_running_event():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    assert not events.running()
Example #50
0
def test_read_datebase(database: str, events: int):
    evs = Events.read('tests/data/' + database, write_cache=False)
    assert len(evs) == events
Example #51
0
def test_read_datebase():
    expect(len(Events.read('tests/data/test'))) == 3
Example #52
0
def test_stop_event():
    events = Events.read('tests/data/test', write_cache=False)
    events.stop()
    assert not events.running()
Example #53
0
def test_list_tasks():
    events = Events.read('tests/data/test', write_cache=False)
    assert events.tasks() == ['task', 'task2']
Example #54
0
def test_fail_stop_single_when_not_running():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    with raises(TaskNotRunningError, match='No task running!'):
        events.last().stop()
Example #55
0
def test_current_running_event():
    events = Events.read('tests/data/test', write_cache=False)
    assert events.running() == 'task'
Example #56
0
def test_fetch_events_for_task():
    events = Events.read('tests/data/test', write_cache=False)
    assert len(events.for_task('task2')) == 1
Example #57
0
def test_no_currently_running_event():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    assert not events.running()
Example #58
0
def test_fetch_events_for_week():
    events = Events.read('tests/data/date_filtering', write_cache=False)
    assert len(events.for_week(2011, 9)) == 1
Example #59
0
def test_sum_durations_in_database():
    events = Events.read('tests/data/test_not_running', write_cache=False)
    assert events.sum() == timedelta(hours=2, minutes=15)