moto/tests/test_polly/test_polly.py

261 lines
7.8 KiB
Python
Raw Normal View History

2018-12-21 11:28:56 +00:00
from botocore.exceptions import ClientError
import boto3
2021-10-18 19:44:29 +00:00
import sure # noqa # pylint: disable=unused-import
2018-12-21 11:28:56 +00:00
from moto import mock_polly
# Polly only available in a few regions
DEFAULT_REGION = "eu-west-1"
2018-12-21 11:28:56 +00:00
LEXICON_XML = """<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
2018-12-21 11:28:56 +00:00
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
2018-12-21 11:28:56 +00:00
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa"
2018-12-21 11:28:56 +00:00
xml:lang="en-US">
<lexeme>
<grapheme>W3C</grapheme>
<alias>World Wide Web Consortium</alias>
</lexeme>
</lexicon>"""
@mock_polly
def test_describe_voices():
client = boto3.client("polly", region_name=DEFAULT_REGION)
2018-12-21 11:28:56 +00:00
resp = client.describe_voices()
len(resp["Voices"]).should.be.greater_than(1)
2018-12-21 11:28:56 +00:00
resp = client.describe_voices(LanguageCode="en-GB")
len(resp["Voices"]).should.equal(3)
2018-12-21 11:28:56 +00:00
try:
client.describe_voices(LanguageCode="SOME_LANGUAGE")
2018-12-21 11:28:56 +00:00
except ClientError as err:
err.response["Error"]["Code"].should.equal("400")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised an exception")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_put_list_lexicon():
client = boto3.client("polly", region_name=DEFAULT_REGION)
2018-12-21 11:28:56 +00:00
# Return nothing
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
resp = client.list_lexicons()
len(resp["Lexicons"]).should.equal(1)
2018-12-21 11:28:56 +00:00
@mock_polly
def test_put_get_lexicon():
client = boto3.client("polly", region_name=DEFAULT_REGION)
2018-12-21 11:28:56 +00:00
# Return nothing
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
resp = client.get_lexicon(Name="test")
resp.should.contain("Lexicon")
resp.should.contain("LexiconAttributes")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_put_lexicon_bad_name():
client = boto3.client("polly", region_name=DEFAULT_REGION)
2018-12-21 11:28:56 +00:00
try:
client.put_lexicon(Name="test-invalid", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
except ClientError as err:
err.response["Error"]["Code"].should.equal("InvalidParameterValue")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised an exception")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech():
client = boto3.client("polly", region_name=DEFAULT_REGION)
2018-12-21 11:28:56 +00:00
# Return nothing
client.put_lexicon(Name="test", Content=LEXICON_XML)
tests = (("pcm", "audio/pcm"), ("mp3", "audio/mpeg"), ("ogg_vorbis", "audio/ogg"))
2018-12-21 11:28:56 +00:00
for output_format, content_type in tests:
resp = client.synthesize_speech(
LexiconNames=["test"],
2018-12-21 11:28:56 +00:00
OutputFormat=output_format,
SampleRate="16000",
Text="test1234",
TextType="text",
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
resp["ContentType"].should.equal(content_type)
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_lexicon():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test2"],
OutputFormat="pcm",
SampleRate="16000",
Text="test1234",
TextType="text",
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal("LexiconNotFoundException")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised LexiconNotFoundException")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_output_format():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="invalid",
SampleRate="16000",
Text="test1234",
TextType="text",
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal("InvalidParameterValue")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_sample_rate():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="pcm",
SampleRate="18000",
Text="test1234",
TextType="text",
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal("InvalidSampleRateException")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_text_type():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="pcm",
SampleRate="16000",
Text="test1234",
TextType="invalid",
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal("InvalidParameterValue")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_voice_id():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="pcm",
SampleRate="16000",
Text="test1234",
TextType="text",
VoiceId="Luke",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal("InvalidParameterValue")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_text_too_long():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="pcm",
SampleRate="16000",
Text="test1234" * 376, # = 3008 characters
TextType="text",
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal("TextLengthExceededException")
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_speech_marks1():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="pcm",
SampleRate="16000",
Text="test1234",
TextType="text",
SpeechMarkTypes=["word"],
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal(
"MarksNotSupportedForFormatException"
)
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")
2018-12-21 11:28:56 +00:00
@mock_polly
def test_synthesize_speech_bad_speech_marks2():
client = boto3.client("polly", region_name=DEFAULT_REGION)
client.put_lexicon(Name="test", Content=LEXICON_XML)
2018-12-21 11:28:56 +00:00
try:
client.synthesize_speech(
LexiconNames=["test"],
OutputFormat="pcm",
SampleRate="16000",
Text="test1234",
TextType="ssml",
SpeechMarkTypes=["word"],
VoiceId="Astrid",
2018-12-21 11:28:56 +00:00
)
except ClientError as err:
err.response["Error"]["Code"].should.equal(
"MarksNotSupportedForFormatException"
)
2018-12-21 11:28:56 +00:00
else:
raise RuntimeError("Should of raised ")