def test_workrpt_order(tmpdir, fx_wrprep): """ Times or dates out of order should produce SystemExit exception """ pytest.debug_func() xyz = tmpdir.join('XYZ') xyz.write('\n'.join(['2015-01-07 10:00:00 first task', '2015-01-07 10:15:00 second task', '2015-01-07 10:10:00 time order', '2015-01-07 10:20:00 fourth task', ])) with pytest.raises(SystemExit) as err: opts = optparse.Values({'filename': xyz.strpath, 'start': '2015.0107', 'end': '2015.0107', 'dayflag': False}) wr.write_report(opts, True) assert_includes(str(err), 'Dates or times out of order')
def test_standalone_category(tmpdir, fx_stddata, fx_wrprep): """ test standalone categories like 'vacation' and 'holiday' """ pytest.debug_func() opts = optparse.Values({'filename': fx_stddata.file.strpath, 'start': '2009.0721', 'end': '2009.0724', 'dayflag': False}) r = wr.write_report(opts, True) assert_includes(r, '27:58:49')
def test_start_date_missing(tmpdir, fx_stddata, fx_wrprep): """ Calculate a week when the first few dates are missing """ pytest.debug_func() opts = optparse.Values({'filename': fx_stddata.file.strpath, 'start': '2009.0718', 'end': '2009.0722', 'dayflag': False}) r = wr.write_report(opts, True) assert_excludes(r, '24.0') assert_excludes(r, '2009.0719') assert_includes(r, '16:29:06 (16.4)')
def test_rounding(tmpdir, fx_stddata, fx_wrprep): """ Test that calculations round properly. There are five types of duration number in this report: line item hms - HH:MM:SS for a specific task subtotal hms - HH:MM:SS for a category of tasks subtotal fp - floating point hour.tenth version of subtotal hms total hms - HH:MM:SS total duration at the bottom total fp - floating point hour.tenth version of total hms The issue is that sometimes when we add up the subtotal hms values, the result is larger than the sum of all the subtotal fp values. I want the total fp to represent the sum of the subtotal fp's, as PALS does. """ pytest.debug_func() opts = optparse.Values({'filename': fx_stddata.file.strpath, 'start': '2009.0721', 'end': '2009.0724', 'dayflag': False}) r = wr.write_report(opts, True) htot = stot = fpsum = 0 for line in r.split('\n'): # zap: result of parsing the string # hms: what HH:MM:SS matched # fp: what [\d.]+ matched # stot: total of lines # htot: total in header zap = re.findall('(\d\d:\d\d:\d\d)( \(([\d.]+)\))?', line) if 0 < len(zap): (hms, _, fp) = zap[0] if 'Total:' in line: # here we verify that the total fp matchs the sum of the # subtotal fp values even though the sum of the hms values # would be larger htot = float(fp) assert fp_close(htot, fpsum, 0.001) assert not fp_close(htot, phms(hms), 0.05) elif fp != '': # here we handle a subtotal header line if 0 < stot: assert fp_close(stot, htot, 0.05) stot = 0 htot = float(fp) assert fp_close(htot, phms(hms), 0.05) fpsum += htot else: # here we handle a detail line stot += phms(hms) pass
def test_daily_subtotal(tmpdir, fx_stddata, fx_wrprep): """ Test that generating a report with dayflag=True produces non-zero daily subtotals when appropriate """ pytest.skip() pytest.debug_func() opts = optparse.Values({'filename': fx_stddata.file.strpath, 'match_regexp': 'admin', 'start': '2009.0721', 'end': '2009.0724', 'dayflag': True}) r = wr.write_report(opts, True) subtotal = 0 for line in r.split('\n'): (text, duration) = parse_report_line(line) if 'Total:' in text: assert duration == subtotal subtotal = 0 else: subtotal += duration