diff --git a/tests/test_limitations.py b/tests/test_limitations.py new file mode 100644 index 0000000..30968de --- /dev/null +++ b/tests/test_limitations.py @@ -0,0 +1,10 @@ +from untitled import rules + + +def test_bad_names(): + assert rules.validate_cat_name("a") + assert rules.validate_cat_name("@nope") + assert rules.validate_cat_name("1111") + assert rules.validate_cat_name("a111") is None + assert rules.validate_cat_name("aaaa") is None + assert rules.validate_cat_name("a" * 24) is None diff --git a/untitled/model.py b/untitled/model.py index fe96c07..0725b51 100644 --- a/untitled/model.py +++ b/untitled/model.py @@ -1,13 +1,14 @@ class Cat: - def __init__(self, name): + def __init__(self, name, traits): self.name = name + self.traits = traits def to_dict(self): - return {"name": self.name} + return {"name": self.name, "traits": self.traits} @staticmethod def from_dict(data): - return Cat(data["name"]) + return Cat(data["name"], data["traits"]) class Save: diff --git a/untitled/rules.py b/untitled/rules.py index 2e9ce78..c564a81 100644 --- a/untitled/rules.py +++ b/untitled/rules.py @@ -7,6 +7,6 @@ def validate_cat_name(name): if len(name) < 4 or len(name) > 24: return "Your cat's name must be 4-24 characters long." if not all(c in ALLOWED for c in name): - return "Letters and numbers only." + return "Your cat's name can only have letters and numbers." if not any(c in string.ascii_letters for c in name): return "Your cat's name needs at least 1 letter." diff --git a/untitled/screens.py b/untitled/screens.py index 42cc02d..1a2803a 100644 --- a/untitled/screens.py +++ b/untitled/screens.py @@ -1,10 +1,10 @@ -from untitled import generation, ui +from untitled import generation, ui, rules, model def adoption(): print("Welcome to the shelter!") - name = None - while not name: + + while True: choice = "Reroll" while choice == "Reroll": choices = generation.generate_cat_choices() @@ -12,4 +12,16 @@ def adoption(): "Please choose a cat to adopt:", [ui.Choice(cat[0], cat[1]) for cat in choices] + ["Reroll"], ) - name = ui.text("Please choose a name for your cat:") + + while True: + name = ui.text("Please choose a name for your cat:") + error = rules.validate_cat_name(name) + if not error: + break + print(error) + if ui.confirm( + f"Do you want to adopt {name}, {generation.generate_trait_sentence(choice).lower()}?" + ): + break + + return model.Cat(name, choice) diff --git a/untitled/ui.py b/untitled/ui.py index ea88c47..f602153 100644 --- a/untitled/ui.py +++ b/untitled/ui.py @@ -42,3 +42,7 @@ def select(title, options): def text(title): return questionary.text(title).ask() + + +def confirm(title): + return questionary.confirm(title).ask()