Skip to content

Commit 7500bf2

Browse files
committed
Refactor print in other function
1 parent c84d8dd commit 7500bf2

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

gitea_github_sync/cli.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import List
2+
13
import click
24
from rich import print
35

@@ -9,15 +11,11 @@ def cli() -> None:
911
pass
1012

1113

12-
@click.option("--stats", is_flag=True)
13-
@cli.command()
14-
def list_all_repositories(stats: bool) -> None:
15-
gh = github.get_github()
16-
repos = github.list_all_repositories(gh)
14+
def print_repositories(repos: List[repository.Repository], display_stats: bool) -> None:
1715
for repo in repos:
1816
print(f"[b]{repo.get_org_name()}[/]/{repo.get_repo_name()}")
1917

20-
if stats:
18+
if display_stats:
2119
print()
2220
print("[b]Repository stats[/]")
2321
number_public_repos = sum(
@@ -31,3 +29,11 @@ def list_all_repositories(stats: bool) -> None:
3129
print(f"Number of private repos identified: [b red]{number_private_repos}[/]")
3230
print(f"Number of unknown repos identified: [b red]{number_unknown_repos}[/]")
3331
print(f"Total number of repos identified: [b red]{len(repos)}[/]")
32+
33+
34+
@click.option("--stats", is_flag=True)
35+
@cli.command()
36+
def list_all_github_repositories(stats: bool) -> None:
37+
gh = github.get_github()
38+
repos = github.list_all_repositories(gh)
39+
print_repositories(repos, stats)

tests/test_cli.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import textwrap
2+
from io import StringIO
23
from typing import List
34
from unittest.mock import MagicMock, patch
45

56
import pytest
67
from click.testing import CliRunner
78

8-
from gitea_github_sync.cli import cli
9+
from gitea_github_sync.cli import cli, print_repositories
910
from gitea_github_sync.repository import Repository, Visibility
1011

1112

@@ -18,38 +19,47 @@ def repositories_fixture() -> List[Repository]:
1819
]
1920

2021

22+
@pytest.mark.parametrize("expected_stat", [True, False])
23+
@patch("gitea_github_sync.cli.print_repositories", autospec=True)
2124
@patch("gitea_github_sync.cli.github.get_github", autospec=True)
2225
@patch("gitea_github_sync.cli.github.list_all_repositories", autospec=True)
23-
def test_list_all_repositories(
26+
def test_list_all_github_repositories_with_stats(
2427
mock_list_all_repositories: MagicMock,
2528
mock_get_github: MagicMock,
29+
mock_print_repositories: MagicMock,
30+
expected_stat: bool,
2631
repositories_fixture: List[Repository],
2732
) -> None:
2833
mock_github = MagicMock()
2934
mock_get_github.return_value = mock_github
3035
mock_list_all_repositories.return_value = repositories_fixture
3136

3237
runner = CliRunner()
33-
result = runner.invoke(cli, ["list-all-repositories"])
38+
command = (
39+
["list-all-github-repositories", "--stats"]
40+
if expected_stat
41+
else ["list-all-github-repositories"]
42+
)
43+
result = runner.invoke(cli, command)
3444

35-
assert result.output == "some-team/a-repo\nsome-team/b-repo\nsome-team/c-repo\n"
3645
assert result.exit_code == 0
46+
mock_print_repositories.assert_called_once_with(repositories_fixture, expected_stat)
3747

3848

39-
@patch("gitea_github_sync.cli.github.get_github", autospec=True)
40-
@patch("gitea_github_sync.cli.github.list_all_repositories", autospec=True)
41-
def test_list_all_repositories_with_stats(
42-
mock_list_all_repositories: MagicMock,
43-
mock_get_github: MagicMock,
49+
@patch("sys.stdout", new_callable=StringIO)
50+
def test_print_repositories_without_stats(
51+
stdout: StringIO,
4452
repositories_fixture: List[Repository],
4553
) -> None:
46-
mock_github = MagicMock()
47-
mock_get_github.return_value = mock_github
48-
mock_list_all_repositories.return_value = repositories_fixture
4954

50-
runner = CliRunner()
51-
result = runner.invoke(cli, ["list-all-repositories", "--stats"])
55+
print_repositories(repositories_fixture, False)
56+
assert stdout.getvalue() == "some-team/a-repo\nsome-team/b-repo\nsome-team/c-repo\n"
5257

58+
59+
@patch("sys.stdout", new_callable=StringIO)
60+
def test_print_repositories(stdout: StringIO, repositories_fixture: List[Repository]) -> None:
61+
62+
print_repositories(repositories_fixture, True)
5363
expected_result = textwrap.dedent(
5464
"""\
5565
some-team/a-repo
@@ -64,5 +74,4 @@ def test_list_all_repositories_with_stats(
6474
"""
6575
)
6676

67-
assert result.output == expected_result
68-
assert result.exit_code == 0
77+
assert stdout.getvalue() == expected_result

0 commit comments

Comments
 (0)