diff --git a/pyrit/converter/puzzled/puzzled_converter.py b/pyrit/converter/puzzled/puzzled_converter.py index c66c557147..302a5a2278 100644 --- a/pyrit/converter/puzzled/puzzled_converter.py +++ b/pyrit/converter/puzzled/puzzled_converter.py @@ -5,6 +5,7 @@ import json import pathlib import uuid +from typing import assert_never from pyrit.common.path import CONVERTER_SEED_PROMPT_PATH from pyrit.converter.converter import Converter, ConverterResult @@ -197,8 +198,10 @@ async def convert_async(self, *, prompt: str, input_type: PromptDataType = "text puzzle_body = build_word_search(words, rng) elif puzzle_type is PuzzleType.ANAGRAM: puzzle_body = build_anagram(words, rng) - else: + elif puzzle_type is PuzzleType.CROSSWORD: puzzle_body = build_crossword(words) + else: + assert_never(puzzle_type) semantics = await self._semantic_clues_async(words) clues = "\n".join(self._clue_line(masked, semantics) for masked in mask_result.masked_words) diff --git a/tests/unit/converter/test_puzzled_converter.py b/tests/unit/converter/test_puzzled_converter.py index bf8b24295b..f1dca4e744 100644 --- a/tests/unit/converter/test_puzzled_converter.py +++ b/tests/unit/converter/test_puzzled_converter.py @@ -98,6 +98,13 @@ async def test_unsupported_input_type_raises(): await PuzzledConverter().convert_async(prompt=_PROMPT, input_type="image_path") +async def test_unhandled_puzzle_type_raises_async() -> None: + converter = PuzzledConverter(num_to_mask=2, seed=1) + with patch.object(converter, "_puzzle_type", "sudoku"): + with pytest.raises(AssertionError, match="Expected code to be unreachable, but got: 'sudoku'"): + await converter.convert_async(prompt=_PROMPT) + + @pytest.mark.parametrize( "puzzle_type, label", [("word_search", "word search"), ("anagram", "anagram"), ("crossword", "crossword")],