Ejemplo n.º 1
0
def test_to_str():
    assert Number.to_str(1) == "1"
    assert Number.to_str(1000) == "1,000"
    assert Number.to_str(10000) == "10,000"
    assert Number.to_str(1000000) == "1,000,000"

    assert Number.to_str(1000.0) == "1,000"
    assert Number.to_str(1500.56) == "1,500.56"

    assert Duration.to_str(timedelta(days=1)) == "1 day, 0:00:00"
    assert Duration.to_str(timedelta(days=1, minutes=1, seconds=40)) == \
        "1 day, 0:01:40"
    assert Duration.to_str(timedelta(minutes=5, seconds=5)) == "0:05:05"
Ejemplo n.º 2
0
    def _assign_time_interactive(self, task, total):
        self._title("\n\nAssign Time")
        self._print("The stop watch recorded {}. Assign that time to the " "metrics in this task:\n\n".format(total))

        remainder = total
        duration_metrics = filter(lambda m: m.metric_type is Duration, self.current_project.metrics)
        for metric in sorted(duration_metrics, key=lambda m: m.name):
            parsed_val = None
            while parsed_val is None:
                value = input("  {} ({} remaining): ".format(metric.name, remainder))
                if value.lower() == "rest":
                    parsed_val = remainder
                else:
                    try:
                        parsed_val = Duration.parse(value)
                    except ParsingError as e:
                        self._error(str(e))
                    except:
                        self._error("Invalid duration")

                if parsed_val > remainder:
                    self._error(
                        "{} is greater than remaining time from " "stopwatch ({})".format(parsed_val, remainder)
                    )
                    parsed_val = None

            task.record(metric, parsed_val)
            remainder -= parsed_val

            if remainder.total_seconds() <= 0:
                break

        self._print()
Ejemplo n.º 3
0
def test_duration(metrics_session,
                  duration_metric,
                  mock_task):
    entry1 = Duration(duration_metric, mock_task, timedelta(hours=1))
    entry2 = Duration(duration_metric, mock_task, timedelta(hours=2))

    metrics_session.add(entry1)
    metrics_session.add(entry2)

    metrics_session.commit()

    # Test aggregation
    total_duration = Duration.total(duration_metric, mock_task, metrics_session)
    assert isinstance(total_duration, timedelta)
    assert total_duration == timedelta(hours=3)

    # Test individual metrics
    persisted_1 = metrics_session.query(Duration)\
        .filter_by(metric_id=duration_metric.id,
                   task_id=mock_task.id,
                   id=entry1.id)\
        .one()
    persisted_2 = metrics_session.query(Duration) \
        .filter_by(metric_id=duration_metric.id,
                   task_id=mock_task.id,
                   id=entry2.id) \
        .one()

    assert persisted_1.value == timedelta(hours=1)
    assert persisted_2.value == timedelta(hours=2)
Ejemplo n.º 4
0
def test_duration_multiple():
    value = Duration.parse("2 hrs, 5 mins")
    assert value == timedelta(hours=2, minutes=5)
Ejemplo n.º 5
0
def test_duration_days():
    value = Duration.parse("2 days")
    assert value == timedelta(days=2)
Ejemplo n.º 6
0
def test_duration_seconds():
    value = Duration.parse("4.5 seconds")
    assert value == timedelta(seconds=4, milliseconds=500)

    value = Duration.parse("525s")
    assert value == timedelta(seconds=525)
Ejemplo n.º 7
0
def test_duration_minutes():
    value = Duration.parse("4 minutes")
    assert value == timedelta(minutes=4)

    value = Duration.parse("4.5 mins")
    assert value == timedelta(minutes=4, seconds=30)
Ejemplo n.º 8
0
def test_duration_hours():
    value = Duration.parse("4 hours")
    assert value == timedelta(hours=4)

    value = Duration.parse("4.5 hours")
    assert value == timedelta(hours=4, minutes=30)
Ejemplo n.º 9
0
def test_duration_timefmt():
    value = Duration.parse("10:05:01")
    assert value == timedelta(hours=10, minutes=5, seconds=1)

    value = Duration.parse("10:05")
    assert value == timedelta(hours=10, minutes=5)