1
0
mirror of https://github.com/ihabunek/toot.git synced 2024-06-23 06:25:26 +00:00

Migrate update_account command

This commit is contained in:
Ivan Habunek 2023-11-28 16:56:53 +01:00
parent 3dc5d35751
commit c0eb76751f
No known key found for this signature in database
GPG Key ID: F5F0623FF5EBCB3D
2 changed files with 154 additions and 40 deletions

View File

@ -1,56 +1,60 @@
import pytest from uuid import uuid4
from tests.integration.conftest import TRUMPET from tests.integration.conftest import TRUMPET
from toot import api from toot import api, cli
from toot.entities import Account, from_dict from toot.entities import Account, from_dict
from toot.utils import get_text from toot.utils import get_text
pytest.skip("TODO", allow_module_level=True)
def test_update_account_no_options(run): def test_update_account_no_options(run):
out = run("update_account") result = run(cli.update_account)
assert out == "Please specify at least one option to update the account" assert result.exit_code == 1
assert result.stderr.strip() == "Error: Please specify at least one option to update the account"
def test_update_account_display_name(run, app, user): def test_update_account_display_name(run, app, user):
out = run("update_account", "--display-name", "elwood") name = str(uuid4())[:10]
assert out == "✓ Account updated"
result = run(cli.update_account, "--display-name", name)
assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["display_name"] == "elwood" assert account["display_name"] == name
def test_update_account_json(run_json, app, user): def test_update_account_json(run_json, app, user):
out = run_json("update_account", "--display-name", "elwood", "--json") name = str(uuid4())[:10]
out = run_json(cli.update_account, "--display-name", name, "--json")
account = from_dict(Account, out) account = from_dict(Account, out)
assert account.acct == user.username assert account.acct == user.username
assert account.display_name == "elwood" assert account.display_name == name
def test_update_account_note(run, app, user): def test_update_account_note(run, app, user):
note = ("It's 106 miles to Chicago, we got a full tank of gas, half a pack " note = ("It's 106 miles to Chicago, we got a full tank of gas, half a pack "
"of cigarettes, it's dark... and we're wearing sunglasses.") "of cigarettes, it's dark... and we're wearing sunglasses.")
out = run("update_account", "--note", note) result = run(cli.update_account, "--note", note)
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert get_text(account["note"]) == note assert get_text(account["note"]) == note
def test_update_account_language(run, app, user): def test_update_account_language(run, app, user):
out = run("update_account", "--language", "hr") result = run(cli.update_account, "--language", "hr")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["source"]["language"] == "hr" assert account["source"]["language"] == "hr"
def test_update_account_privacy(run, app, user): def test_update_account_privacy(run, app, user):
out = run("update_account", "--privacy", "private") result = run(cli.update_account, "--privacy", "private")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["source"]["privacy"] == "private" assert account["source"]["privacy"] == "private"
@ -60,8 +64,9 @@ def test_update_account_avatar(run, app, user):
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
old_value = account["avatar"] old_value = account["avatar"]
out = run("update_account", "--avatar", TRUMPET) result = run(cli.update_account, "--avatar", TRUMPET)
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["avatar"] != old_value assert account["avatar"] != old_value
@ -71,64 +76,74 @@ def test_update_account_header(run, app, user):
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
old_value = account["header"] old_value = account["header"]
out = run("update_account", "--header", TRUMPET) result = run(cli.update_account, "--header", TRUMPET)
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["header"] != old_value assert account["header"] != old_value
def test_update_account_locked(run, app, user): def test_update_account_locked(run, app, user):
out = run("update_account", "--locked") result = run(cli.update_account, "--locked")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["locked"] is True assert account["locked"] is True
out = run("update_account", "--no-locked") result = run(cli.update_account, "--no-locked")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["locked"] is False assert account["locked"] is False
def test_update_account_bot(run, app, user): def test_update_account_bot(run, app, user):
out = run("update_account", "--bot") result = run(cli.update_account, "--bot")
assert out == "✓ Account updated"
assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["bot"] is True assert account["bot"] is True
out = run("update_account", "--no-bot") result = run(cli.update_account, "--no-bot")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["bot"] is False assert account["bot"] is False
def test_update_account_discoverable(run, app, user): def test_update_account_discoverable(run, app, user):
out = run("update_account", "--discoverable") result = run(cli.update_account, "--discoverable")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["discoverable"] is True assert account["discoverable"] is True
out = run("update_account", "--no-discoverable") result = run(cli.update_account, "--no-discoverable")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["discoverable"] is False assert account["discoverable"] is False
def test_update_account_sensitive(run, app, user): def test_update_account_sensitive(run, app, user):
out = run("update_account", "--sensitive") result = run(cli.update_account, "--sensitive")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["source"]["sensitive"] is True assert account["source"]["sensitive"] is True
out = run("update_account", "--no-sensitive") result = run(cli.update_account, "--no-sensitive")
assert out == "✓ Account updated" assert result.exit_code == 0
assert result.stdout.strip() == "✓ Account updated"
account = api.verify_credentials(app, user).json() account = api.verify_credentials(app, user).json()
assert account["source"]["sensitive"] is False assert account["source"]["sensitive"] is False

View File

@ -1,13 +1,112 @@
import click import click
import json as pyjson import json as pyjson
from typing import Optional from typing import BinaryIO, Optional
from toot import api from toot import api
from toot.cli.base import cli, json_option, Context, pass_context from toot.cli.base import cli, json_option, Context, pass_context
from toot.cli.validators import validate_language
from toot.console import PRIVACY_CHOICES
from toot.output import print_acct_list from toot.output import print_acct_list
@cli.command(name="update_account")
@click.option("--display-name", help="The display name to use for the profile.")
@click.option("--note", help="The account bio.")
@click.option(
"--avatar",
type=click.File(mode="rb"),
help="Path to the avatar image to set.",
)
@click.option(
"--header",
type=click.File(mode="rb"),
help="Path to the header image to set.",
)
@click.option(
"--bot/--no-bot",
default=None,
help="Whether the account has a bot flag.",
)
@click.option(
"--discoverable/--no-discoverable",
default=None,
help="Whether the account should be shown in the profile directory.",
)
@click.option(
"--locked/--no-locked",
default=None,
help="Whether manual approval of follow requests is required.",
)
@click.option(
"--privacy",
type=click.Choice(PRIVACY_CHOICES),
help="Default post privacy for authored statuses.",
)
@click.option(
"--sensitive/--no-sensitive",
default=None,
help="Whether to mark authored statuses as sensitive by default.",
)
@click.option(
"--language",
callback=validate_language,
help="Default language to use for authored statuses (ISO 639-1).",
)
@json_option
@pass_context
def update_account(
ctx: Context,
display_name: Optional[str],
note: Optional[str],
avatar: Optional[BinaryIO],
header: Optional[BinaryIO],
bot: Optional[bool],
discoverable: Optional[bool],
locked: Optional[bool],
privacy: Optional[bool],
sensitive: Optional[bool],
language: Optional[bool],
json: bool,
):
"""Update your account details"""
options = [
avatar,
bot,
discoverable,
display_name,
header,
language,
locked,
note,
privacy,
sensitive,
]
if all(option is None for option in options):
raise click.ClickException("Please specify at least one option to update the account")
response = api.update_account(
ctx.app,
ctx.user,
avatar=avatar,
bot=bot,
discoverable=discoverable,
display_name=display_name,
header=header,
language=language,
locked=locked,
note=note,
privacy=privacy,
sensitive=sensitive,
)
if json:
click.echo(response.text)
else:
click.secho("✓ Account updated", fg="green")
@cli.command() @cli.command()
@click.argument("account") @click.argument("account")
@json_option @json_option