1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
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")
|