mirror of
https://github.com/ihabunek/toot.git
synced 2025-08-22 19:24:07 -04:00
145 lines
4.3 KiB
Python
145 lines
4.3 KiB
Python
import json
|
|
from tests.integration.conftest import Run, assert_error, assert_ok, posted_status_id, strip_ansi
|
|
from toot import App, User, api, cli
|
|
|
|
|
|
def test_show_poll(app: App, user: User, run: Run):
|
|
result = run(
|
|
cli.post.post, "Answer me this",
|
|
"--poll-option", "foo",
|
|
"--poll-option", "bar",
|
|
"--poll-option", "baz",
|
|
)
|
|
assert_ok(result)
|
|
|
|
status_id = posted_status_id(result.stdout)
|
|
status = api.fetch_status(app, user, status_id).json()
|
|
poll_id = status["poll"]["id"]
|
|
|
|
result = run(cli.polls.show, poll_id)
|
|
assert_ok(result)
|
|
|
|
assert "foo" in result.stdout
|
|
assert "bar" in result.stdout
|
|
assert "baz" in result.stdout
|
|
assert f"Poll {poll_id}" in result.stdout
|
|
|
|
|
|
def test_show_poll_json(app: App, user: User, run: Run):
|
|
result = run(
|
|
cli.post.post, "Answer me this",
|
|
"--poll-option", "foo",
|
|
"--poll-option", "bar",
|
|
"--poll-option", "baz",
|
|
)
|
|
assert_ok(result)
|
|
|
|
status_id = posted_status_id(result.stdout)
|
|
status = api.fetch_status(app, user, status_id).json()
|
|
poll_id = status["poll"]["id"]
|
|
|
|
result = run(cli.polls.show, poll_id, "--json")
|
|
assert_ok(result)
|
|
|
|
poll = json.loads(result.stdout)
|
|
assert poll["id"] == poll_id
|
|
assert poll["options"] == [
|
|
{"title": "foo", "votes_count": 0},
|
|
{"title": "bar", "votes_count": 0},
|
|
{"title": "baz", "votes_count": 0},
|
|
]
|
|
assert poll["multiple"] is False
|
|
|
|
|
|
def test_vote_poll(app: App, user: User, friend: User, run: Run, run_as: Run):
|
|
result = run(
|
|
cli.post.post,
|
|
"Answer me this",
|
|
"--poll-option", "foo",
|
|
"--poll-option", "bar",
|
|
"--poll-option", "baz",
|
|
)
|
|
assert_ok(result)
|
|
|
|
status_id = posted_status_id(result.stdout)
|
|
status = api.fetch_status(app, user, status_id).json()
|
|
poll_id = status["poll"]["id"]
|
|
|
|
result = run_as(friend, cli.polls.vote, poll_id, "0")
|
|
assert_ok(result)
|
|
|
|
output_lines = strip_ansi(result.stdout).split("\n")
|
|
assert "foo ✓ Your vote" in output_lines
|
|
assert "bar" in output_lines
|
|
assert "baz" in output_lines
|
|
|
|
# Voting a second time should not succeed
|
|
result = run_as(friend, cli.polls.vote, poll_id, "0")
|
|
assert_error(result, "You have already voted on this poll")
|
|
|
|
|
|
def test_vote_poll_invalid_choice(app: App, user: User, friend: User, run: Run, run_as: Run):
|
|
result = run(
|
|
cli.post.post,
|
|
"Answer me this",
|
|
"--poll-option", "foo",
|
|
"--poll-option", "bar",
|
|
"--poll-option", "baz",
|
|
)
|
|
assert_ok(result)
|
|
|
|
status_id = posted_status_id(result.stdout)
|
|
status = api.fetch_status(app, user, status_id).json()
|
|
poll_id = status["poll"]["id"]
|
|
|
|
result = run_as(friend, cli.polls.vote, poll_id, "5") # invalid index
|
|
assert_error(result, "The chosen vote option does not exist")
|
|
|
|
|
|
def test_vote_not_multiple(app: App, user: User, friend: User, run: Run, run_as: Run):
|
|
result = run(
|
|
cli.post.post,
|
|
"Answer me this",
|
|
"--poll-option", "foo",
|
|
"--poll-option", "bar",
|
|
"--poll-option", "baz",
|
|
)
|
|
assert_ok(result)
|
|
|
|
status_id = posted_status_id(result.stdout)
|
|
status = api.fetch_status(app, user, status_id).json()
|
|
poll_id = status["poll"]["id"]
|
|
|
|
# Voting on multiple choices when poll is not multiple
|
|
result = run_as(friend, cli.polls.vote, poll_id, "0", "2")
|
|
# NB: Mastodon returns the wrong error here
|
|
assert_error(result, "You have already voted on this poll")
|
|
|
|
|
|
def test_vote_poll_multiple(app: App, user: User, friend: User, run: Run, run_as: Run):
|
|
result = run(
|
|
cli.post.post,
|
|
"Answer me this",
|
|
"--poll-option", "foo",
|
|
"--poll-option", "bar",
|
|
"--poll-option", "baz",
|
|
"--poll-multiple"
|
|
)
|
|
assert_ok(result)
|
|
|
|
status_id = posted_status_id(result.stdout)
|
|
status = api.fetch_status(app, user, status_id).json()
|
|
poll_id = status["poll"]["id"]
|
|
|
|
result = run_as(friend, cli.polls.vote, poll_id, "0", "2")
|
|
assert_ok(result)
|
|
|
|
output_lines = strip_ansi(result.stdout).split("\n")
|
|
assert "foo ✓ Your vote" in output_lines
|
|
assert "bar" in output_lines
|
|
assert "baz ✓ Your vote" in output_lines
|
|
|
|
# Voting a second time should not succeed
|
|
result = run_as(friend, cli.polls.vote, poll_id, "0", "2")
|
|
assert_error(result, "You have already voted on this poll")
|