Пример #1
0
    def test_list_projects(self, loader_mock, mock_out):
        loader_mock.return_value = [{
            "id": 1,
            "title": "active",
            "shortcode": "active",
            "color": "green",
            "active": True
        }, {
            "id": 2,
            "title": "inactive",
            "shortcode": "inactive",
            "color": "red",
            "active": False
        }]
        expected_active = output_formatter.format_string(
            "  1", dim=True
        ) + " " + "active" + "\033[0m" + " (\033[32m#active\033[0m)"
        expected_inactive = output_formatter.format_string(
            "  2", dim=True
        ) + " \033[2m" + "inactive" + "\033[0m" + " (\033[31m#inactive\033[0m)"

        list_projects.list_projects(self.mock_args)
        self.assertEqual(
            mock_out.getvalue(),
            "\n" + expected_active + "\n" + expected_inactive + "\n\n")
        mock_out.truncate(0)
        mock_out.seek(0)

        self.mock_args.show_all_projects = False
        list_projects.list_projects(self.mock_args)
        self.assertEqual(mock_out.getvalue(), "\n" + expected_active + "\n\n")
        mock_out.truncate(0)
        mock_out.seek(0)
Пример #2
0
def show_by_project(tasks, projects):
    context = "project"

    tasks_by_project = defaultdict(list)
    for task in tasks:
        if task["project"]:
            task_project = task["project"]["id"]
        else:
            task_project = ""
        tasks_by_project[task_project].append(task)

    print()
    for project in projects:
        tasks = tasks_by_project[
            project["id"]] if project["id"] in tasks_by_project else []
        headline = format_headline(project["title"])
        headline_app = format_string("#" + project["shortcode"],
                                     color=project["color"],
                                     bold=True)
        print(format_headline(headline, headline_app))
        print(format_task_block(context, tasks, print_project=False))

    if '' in tasks_by_project:
        headline = format_string("No Project",
                                 underlined=True,
                                 bold=True,
                                 dim=True)
        print(headline)
        print(
            format_task_block(context,
                              tasks_by_project[''],
                              print_project=False))
Пример #3
0
def list_projects(arguments):
    projects = load_projects()

    if not arguments.show_all_projects:
        projects = list(filter(lambda x: x["active"], projects))

    print()
    project_counter = 1
    for project in projects:
        counter = format_string(str(project_counter).rjust(3), dim=True)
        title = format_string(project["title"], dim=(not project["active"]))
        shortcode = format_string("#" + project["shortcode"],
                                  color=project["color"])
        print(counter + " " + title + " (" + shortcode + ")")
        project_counter += 1

    print()
Пример #4
0
    def test_add_project(self, saver_mock, mock_out):
        saver_mock.return_value = None

        self.mock_args.title = "new_project"
        self.mock_args.shortcode = "new-proj"
        expected_print = "You created project \"" + "new_project" + "\" (" + output_formatter.format_string(
            "#new-proj", color="red") + ").\n"

        project.add_project(self.mock_args)
        self.assertEqual(mock_out.getvalue(), expected_print)
Пример #5
0
def delete_task(arguments):
    task = load_task(str(arguments.task_id))

    print("You are about to delete task " +
          format_string(str(task["id"]), dim=True) + ": '" + task["title"] +
          "'. Are you sure? [y/N]")
    confirmation = input()
    if confirmation in ["y", "Y", "yes"]:
        remove_task(task)
        print("Task deleted.")
        return

    print("Task not deleted.")
Пример #6
0
    def test_add_project_with_invalid_color(self, saver_mock, mock_err,
                                            mock_out):
        saver_mock.return_value = None

        self.mock_args.title = "new_project"
        self.mock_args.shortcode = "new-proj"
        self.mock_args.color = "turquoise"

        expected_error_start = "This is not a valid color. This entry will not be saved.\n"
        expected_print = "You created project \"" + "new_project" + "\" (" + output_formatter.format_string(
            "#new-proj", color="default") + ").\n"

        project.add_project(self.mock_args)
        self.assertEqual(mock_err.getvalue(), expected_error_start)
        self.assertEqual(mock_out.getvalue(), expected_print)
Пример #7
0
    def test_edit_project(self, loader_mock, saver_mock, mock_out):
        saver_mock.return_value = None
        loader_mock.return_value = {
            "id": 1,
            "title": "active",
            "shortcode": "active",
            "color": "green",
            "active": True
        }

        self.mock_args.title = "New Title"
        self.mock_args.new_shortcode = "new-code"
        self.mock_args.color = None

        expected_print = "You edited project \"" + "New Title" + "\" (" + output_formatter.format_string(
            "#new-code", color="green") + ").\n"

        project.edit_project(self.mock_args)
        self.assertEqual(mock_out.getvalue(), expected_print)
        mock_out.truncate(0)
        mock_out.seek(0)
Пример #8
0
    def test_add_project_without_shortcode_specified(self, saver_mock,
                                                     mock_out):
        saver_mock.return_value = None

        self.mock_args.title = "No Shortcode Project"

        expected_print = "You created project \"" + "No Shortcode Project" + "\" (" + output_formatter.format_string(
            "#no-shortcode-project", color="red") + ").\n"
        project.add_project(self.mock_args)
        self.assertEqual(mock_out.getvalue(), expected_print)