Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions tests/test_agi_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
_Action,
quote,
)
from pystrix.agi.core import GetData


class _FakeReader:
Expand Down Expand Up @@ -160,3 +161,36 @@ def readline(self):

with pytest.raises(UnicodeDecodeError):
_agi_with_reader(_BadBytesReader())._get_result()


def test_getdata_timeout_result_parses_without_error():
# Regression for #9 (fixed in 12c4bd7, 2014): a GetData timeout replies
# "result= (timeout)" with an empty value before the parenthetical. It must
# parse as value '' / data 'timeout', not raise AGINoResultError.
response = _agi("200 result= (timeout)\n")._get_result()
assert response.items["result"].value == ""
assert response.items["result"].data == "timeout"


def test_getdata_process_response_flags_timeout():
response = _agi("200 result= (timeout)\n")._get_result()
keys, timed_out = GetData("prompt").process_response(response)
assert keys == ""
assert timed_out is True


def test_getdata_process_response_returns_digits():
response = _agi("200 result=1234\n")._get_result()
keys, timed_out = GetData("prompt").process_response(response)
assert keys == "1234"
assert timed_out is False


def test_getdata_process_response_keeps_partial_digits_on_timeout():
# The common real-world timeout: a caller enters some digits, then the
# inter-digit timer expires. Asterisk replies "result=12 (timeout)", so the
# collected digits and the timeout flag must both survive process_response.
response = _agi("200 result=12 (timeout)\n")._get_result()
keys, timed_out = GetData("prompt").process_response(response)
assert keys == "12"
assert timed_out is True
Loading