Add CLI tests #22

Merged
torjus merged 6 commits from cli-tests into master 2025-01-06 22:25:16 +00:00
3 changed files with 93 additions and 89 deletions
Showing only changes of commit 28b6695206 - Show all commits

View File

@ -1,92 +1,4 @@
import typer from nixprstatus.app import app
import json
from typing import Annotated
from nixprstatus.pr import pr_merge_status
from nixprstatus.pr import commits_since
from nixprstatus.watchlist import Watchlist
from nixprstatus.output import OutputFormat
app = typer.Typer(rich_markup_mode=None)
watchlist_app = typer.Typer()
app.add_typer(watchlist_app, name="watchlist", help="Manage watchlist.")
DEFAULT_HEADERS = {
"Accept": "application/vnd.github.text+json",
}
BRANCHES = ["nixos-unstable-small", "nixos-unstable", "nixos-24.05"]
@app.command()
def pr(
pr: list[int],
branches: Annotated[
list[str] | None, typer.Option(help="Check specific branch")
] = None,
format: Annotated[
OutputFormat, typer.Option(help="Output format")
] = OutputFormat.CONSOLE,
) -> None:
"""Get merge status of pull request."""
if isinstance(pr, int):
status = pr_merge_status(pr, branches)
status.print(format=format)
return
for pr_ in pr:
status = pr_merge_status(pr_, branches)
status.print(format=format)
print()
@app.command()
def since(
commit_sha: str,
target: str = "nixos-unstable",
waybar_format: Annotated[
bool, typer.Option(help="Output in format expected by waybar")
] = False,
) -> None:
"""
Return the count of commits that has happened between the two refs.
"""
count = commits_since(target, commit_sha)
if waybar_format:
output = {"text": str(count), "tooltip": f"{target}: {count}"}
typer.echo(json.dumps(output))
return
typer.echo(count)
@watchlist_app.command(name="list")
def command_list(
watchlist: str | None = None, format: OutputFormat = OutputFormat.CONSOLE
) -> None:
"""List PRs in watchlist."""
wl = Watchlist.from_file(path=watchlist)
wl.print(format=format)
@watchlist_app.command()
def add(pr: int, watchlist: str | None = None) -> None:
"""Add PR to watchlist."""
wl = Watchlist.from_file(path=watchlist)
info = wl.add_pr(pr)
wl.to_file(path=watchlist)
print(f"Added #{info.pr}: {info.title} to watchlist.")
@watchlist_app.command()
def remove(pr: int) -> None:
"""Remove PR from watchlist."""
wl = Watchlist.from_file()
if pr not in wl:
print(f"#{pr} not in watchlist.")
return
wl.remove(pr)
wl.to_file()
print(f"Removed #{pr} from watchlist.")
def main() -> None: def main() -> None:

89
nixprstatus/app.py Normal file
View File

@ -0,0 +1,89 @@
import typer
import json
from typing import Annotated
from nixprstatus.pr import pr_merge_status
from nixprstatus.pr import commits_since
from nixprstatus.watchlist import Watchlist
from nixprstatus.output import OutputFormat
app = typer.Typer(rich_markup_mode=None)
watchlist_app = typer.Typer()
app.add_typer(watchlist_app, name="watchlist", help="Manage watchlist.")
DEFAULT_HEADERS = {
"Accept": "application/vnd.github.text+json",
}
BRANCHES = ["nixos-unstable-small", "nixos-unstable", "nixos-24.05"]
@app.command()
def pr(
pr: list[int],
branches: Annotated[
list[str] | None, typer.Option(help="Check specific branch")
] = None,
format: Annotated[
OutputFormat, typer.Option(help="Output format")
] = OutputFormat.CONSOLE,
) -> None:
"""Get merge status of pull request(s)."""
if isinstance(pr, int):
status = pr_merge_status(pr, branches)
status.print(format=format)
return
for pr_ in pr:
status = pr_merge_status(pr_, branches)
status.print(format=format)
print()
@app.command()
def since(
commit_sha: str,
target: str = "nixos-unstable",
waybar_format: Annotated[
bool, typer.Option(help="Output in format expected by waybar")
] = False,
) -> None:
"""
Return the count of commits that has happened between the two refs.
"""
count = commits_since(target, commit_sha)
if waybar_format:
output = {"text": str(count), "tooltip": f"{target}: {count}"}
typer.echo(json.dumps(output))
return
typer.echo(count)
@watchlist_app.command(name="list")
def command_list(
watchlist: str | None = None, format: OutputFormat = OutputFormat.CONSOLE
) -> None:
"""List PRs in watchlist."""
wl = Watchlist.from_file(path=watchlist)
wl.print(format=format)
@watchlist_app.command()
def add(pr: int, watchlist: str | None = None) -> None:
"""Add PR to watchlist."""
wl = Watchlist.from_file(path=watchlist)
info = wl.add_pr(pr)
wl.to_file(path=watchlist)
print(f"Added #{info.pr}: {info.title} to watchlist.")
@watchlist_app.command()
def remove(pr: int) -> None:
"""Remove PR from watchlist."""
wl = Watchlist.from_file()
if pr not in wl:
print(f"#{pr} not in watchlist.")
return
wl.remove(pr)
wl.to_file()
print(f"Removed #{pr} from watchlist.")

3
tests/test_cli.py Normal file
View File

@ -0,0 +1,3 @@
import unittest
from nixprstatus.app import app