Example #1
0
def cli(activity):
    """
    Track how much time you spend on different activities throughout the day!
    ACTIVITY is the type of activity you want to start tracking. Examples: working, reading, studying.
    To see a report, use the "timereport" command.
    """

    if activity in RESERVED_ARGUMENTS:
        if activity.lower() == STOP_TRACKING_TIME_ARGUMENT:
            try:
                last_activity = ActivityGateway.fetch_last_activity_started()
                ActivityManager.stop_tracking_last_activity()
                click.echo('Stopped tracking {}'.format(last_activity.category))
            except IndexError:
                click.echo('I was not tracking any activity!')

    else:
        a = ActivityManager.start_tracking_new_activity(activity)
        click.echo('Started tracking "%s".' % a.category)
        click.echo(
            "So far, you've spent {} on {} today!".format(
                format_seconds_returnbed_by_report(
                    TimeSpentInCategoryReport.generate_for_this_category_of_activity(activity, 0)[activity]
                ),
                activity
            )
        )
    def test_shows_seconds_when_number_of_seconds_doesnt_reach_minutes(self):
        assert 'seconds' in format_seconds_returnbed_by_report(59)
        assert '59' in format_seconds_returnbed_by_report(59)

        assert 'second' in format_seconds_returnbed_by_report(1) and not 'seconds' in \
                                                                         format_seconds_returnbed_by_report(1)
        assert '1' in format_seconds_returnbed_by_report(1)

        assert 'seconds' in format_seconds_returnbed_by_report(22)
        assert '22' in format_seconds_returnbed_by_report(22)
def cli(days, activity):
    """
    See a report on how you've spent your time on specific activities or all activity.
    You can see this report for today or the last X days, x being an integer.
    For example,
    To see how much time you've spent working today, type "timereport --activity working"
    To see how much time you've spent working the last 3 days, type "timereport --activity working --days=3"
    To see how you spent your time today, type "timereport"
    To see how you spent your time during the last 3 days type "timereport --days 3"
    """
    if activity != ACTIVITY_DEFAULT_ARGUMENT:
        if not days:
            days_text = 'today'
        elif days == 1:
            days_text = 'since yesterday'
        else:
            days_text = 'during the last {} days'.format(days)
        click.echo("So far, you've spent {} on {} {}!".format(
            format_seconds_returnbed_by_report(
                TimeSpentInCategoryReport.
                generate_for_this_category_of_activity(activity,
                                                       days)[activity]),
            activity, days_text))
    else:
        report = TimeSpentInCategoryReport.generate_for_all_categories_of_activity(
            days)
        if not report:
            _show_no_activities_found_message(days)
        else:
            if not days:
                days_text = 'today'
            elif days == 1:
                days_text = 'yesterday and today'
            else:
                days_text = 'the last {} days'.format(days)

            reporter = MultipleActivitiesReportDisplayer(report)
            click.echo("\n\nHere's your report for {}:\n\n{}".format(
                days_text, reporter.display()))
 def _assert_these_strings_are_not_in_the_result(
         self, seconds: int, strings_list: List[str]) -> None:
     for string in strings_list:
         assert string not in format_seconds_returnbed_by_report(seconds)
 def test_prints_nothing_when_it_receives_zero_seconds(self):
     assert 'exactly zero' in format_seconds_returnbed_by_report(0)
    def test_shows_minutes_when_number_of_seconds_doesnt_reach_hours_but_reaches_minutes(
            self):
        assert 'minute' in format_seconds_returnbed_by_report(60) and not 'minutes' in \
                                                                          format_seconds_returnbed_by_report(60)
        assert '1' in format_seconds_returnbed_by_report(60)

        assert 'minute' in format_seconds_returnbed_by_report(61) and not 'minutes' in \
                                                                          format_seconds_returnbed_by_report(60)
        assert '1' in format_seconds_returnbed_by_report(61)

        assert 'minute' in format_seconds_returnbed_by_report(119) and not 'minutes' in \
                                                                          format_seconds_returnbed_by_report(60)
        assert '1' in format_seconds_returnbed_by_report(119)

        assert 'minutes' in format_seconds_returnbed_by_report(120)
        assert '2' in format_seconds_returnbed_by_report(120)

        assert 'minutes' in format_seconds_returnbed_by_report(2345)
        assert '39' in format_seconds_returnbed_by_report(2345)

        assert 'minutes' in format_seconds_returnbed_by_report(3599)
        assert '59' in format_seconds_returnbed_by_report(3599)
 def test_throws_error_when_it_gets_wrong_values_like_negative_numbers_and_non_integers(
         self):
     with pytest.raises(ValueError):
         print(format_seconds_returnbed_by_report(-1))
     with pytest.raises(TypeError):
         format_seconds_returnbed_by_report('23')