Jirat Jaturanpinyo
Upload voicevox_engine
edc06cb verified
from os import remove
from pathlib import Path
from shutil import copyfile
import pytest
from voicevox_engine.preset.model import Preset
from voicevox_engine.preset.preset_manager import (
PresetInputError,
PresetInternalError,
PresetManager,
)
presets_test_1_yaml_path = Path("test/unit/preset/presets-test-1.yaml")
presets_test_2_yaml_path = Path("test/unit/preset/presets-test-2.yaml")
presets_test_3_yaml_path = Path("test/unit/preset/presets-test-3.yaml")
presets_test_4_yaml_path = Path("test/unit/preset/presets-test-4.yaml")
def test_validation() -> None:
preset_manager = PresetManager(preset_path=presets_test_1_yaml_path)
presets = preset_manager.load_presets()
assert presets is not None
def test_validation_same() -> None:
preset_manager = PresetManager(preset_path=presets_test_1_yaml_path)
presets = preset_manager.load_presets()
presets2 = preset_manager.load_presets()
assert presets is not None
assert presets == presets2
def test_validation_2() -> None:
preset_manager = PresetManager(preset_path=presets_test_2_yaml_path)
true_msg = "プリセットの設定ファイルにミスがあります"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.load_presets()
def test_preset_id() -> None:
preset_manager = PresetManager(preset_path=presets_test_3_yaml_path)
true_msg = "プリセットのidに重複があります"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.load_presets()
def test_empty_file() -> None:
preset_manager = PresetManager(preset_path=presets_test_4_yaml_path)
true_msg = "プリセットの設定ファイルが空の内容です"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.load_presets()
def test_not_exist_file() -> None:
preset_manager = PresetManager(preset_path=Path("test/presets-dummy.yaml"))
true_msg = "プリセットの設定ファイルが見つかりません"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.load_presets()
def test_add_preset(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": 10,
"name": "test10",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
id = preset_manager.add_preset(preset)
assert id == 10
assert len(preset_manager.presets) == 3
for _preset in preset_manager.presets:
if _preset.id == id:
assert _preset == preset
remove(preset_path)
def test_add_preset_load_failure() -> None:
preset_manager = PresetManager(preset_path=presets_test_2_yaml_path)
true_msg = "プリセットの設定ファイルにミスがあります"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.add_preset(
Preset(
**{
"id": 1,
"name": "",
"speaker_uuid": "",
"style_id": 0,
"speedScale": 0,
"pitchScale": 0,
"intonationScale": 0,
"volumeScale": 0,
"prePhonemeLength": 0,
"postPhonemeLength": 0,
"pauseLength": 0,
"pauseLengthScale": 0,
}
)
)
def test_add_preset_conflict_id(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": 2,
"name": "test3",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
id = preset_manager.add_preset(preset)
assert id == 3
assert len(preset_manager.presets) == 3
for _preset in preset_manager.presets:
if _preset.id == id:
assert _preset == preset
remove(preset_path)
def test_add_preset_conflict_id2(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": -1,
"name": "test3",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
id = preset_manager.add_preset(preset)
assert id == 3
assert len(preset_manager.presets) == 3
for _preset in preset_manager.presets:
if _preset.id == id:
assert _preset == preset
remove(preset_path)
def test_add_preset_write_failure(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": 10,
"name": "test10",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
preset_manager.load_presets()
preset_manager._refresh_cache = lambda: None # type:ignore[method-assign]
preset_manager.preset_path = "" # type: ignore[assignment]
true_msg = "プリセットの設定ファイルが見つかりません"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.add_preset(preset)
assert len(preset_manager.presets) == 2
remove(preset_path)
def test_update_preset(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": 1,
"name": "test1 new",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
id = preset_manager.update_preset(preset)
assert id == 1
assert len(preset_manager.presets) == 2
for _preset in preset_manager.presets:
if _preset.id == id:
assert _preset == preset
remove(preset_path)
def test_update_preset_load_failure() -> None:
preset_manager = PresetManager(preset_path=presets_test_2_yaml_path)
true_msg = "プリセットの設定ファイルにミスがあります"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.update_preset(
Preset(
**{
"id": 1,
"name": "",
"speaker_uuid": "",
"style_id": 0,
"speedScale": 0,
"pitchScale": 0,
"intonationScale": 0,
"volumeScale": 0,
"prePhonemeLength": 0,
"postPhonemeLength": 0,
"pauseLength": 0,
"pauseLengthScale": 0,
}
)
)
def test_update_preset_not_found(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": 10,
"name": "test1 new",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
true_msg = "更新先のプリセットが存在しません"
with pytest.raises(PresetInputError, match=true_msg):
preset_manager.update_preset(preset)
assert len(preset_manager.presets) == 2
remove(preset_path)
def test_update_preset_write_failure(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset = Preset(
**{
"id": 1,
"name": "test1 new",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 2,
"speedScale": 1,
"pitchScale": 1,
"intonationScale": 0.5,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1.0,
}
)
preset_manager.load_presets()
preset_manager._refresh_cache = lambda: None # type:ignore[method-assign]
preset_manager.preset_path = "" # type: ignore[assignment]
true_msg = "プリセットの設定ファイルが見つかりません"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.update_preset(preset)
assert len(preset_manager.presets) == 2
assert preset_manager.presets[0].name == "test"
remove(preset_path)
def test_delete_preset(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
id = preset_manager.delete_preset(1)
assert id == 1
assert len(preset_manager.presets) == 1
remove(preset_path)
def test_delete_preset_load_failure() -> None:
preset_manager = PresetManager(preset_path=presets_test_2_yaml_path)
true_msg = "プリセットの設定ファイルにミスがあります"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.delete_preset(10)
def test_delete_preset_not_found(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
true_msg = "削除対象のプリセットが存在しません"
with pytest.raises(PresetInputError, match=true_msg):
preset_manager.delete_preset(10)
assert len(preset_manager.presets) == 2
remove(preset_path)
def test_delete_preset_write_failure(tmp_path: Path) -> None:
preset_path = tmp_path / "presets.yaml"
copyfile(presets_test_1_yaml_path, preset_path)
preset_manager = PresetManager(preset_path=preset_path)
preset_manager.load_presets()
preset_manager._refresh_cache = lambda: None # type:ignore[method-assign]
preset_manager.preset_path = "" # type: ignore[assignment]
true_msg = "プリセットの設定ファイルが見つかりません"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.delete_preset(1)
assert len(preset_manager.presets) == 2
remove(preset_path)