adoption flow

This commit is contained in:
2026-06-24 15:46:44 -04:00
parent 13b8cd4b5e
commit b644ce5216
5 changed files with 35 additions and 8 deletions

10
tests/test_limitations.py Normal file
View File

@@ -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

View File

@@ -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:

View File

@@ -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."

View File

@@ -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"],
)
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)

View File

@@ -42,3 +42,7 @@ def select(title, options):
def text(title):
return questionary.text(title).ask()
def confirm(title):
return questionary.confirm(title).ask()