Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions src/location/bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,9 @@ def run(self):

def deposit(self):
while True:
self.userInterface.lotsOfSpace()
self.userInterface.divider()
print(self.currentPrompt.text)
self.userInterface.divider()

try:
amount = float(input("> "))
userInput = self.userInterface.getInput(self.currentPrompt.text)
amount = float(userInput)
except ValueError:
self.currentPrompt.text = "Try again. Money: $%.2f" % self.player.money
continue
Expand All @@ -79,13 +75,9 @@ def deposit(self):

def withdraw(self):
while True:
self.userInterface.lotsOfSpace()
self.userInterface.divider()
print(self.currentPrompt.text)
self.userInterface.divider()

try:
amount = float(input("> "))
userInput = self.userInterface.getInput(self.currentPrompt.text)
amount = float(userInput)
except ValueError:
self.currentPrompt.text = (
"Try again. Money In Bank: $%.2f" % self.player.moneyInBank
Expand Down
2 changes: 1 addition & 1 deletion src/location/home.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,4 @@ def displayStats(self):
print("Times Gotten Drunk: %d" % self.stats.timesGottenDrunk)
print("Money Lost Gambling: %d" % self.stats.moneyLostFromGambling)
print("")
input(" [ CONTINUE ]")
self.userInterface.getInput(" [ CONTINUE ]")
8 changes: 2 additions & 6 deletions src/location/tavern.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,9 @@ def gamble(self):
continue

def changeBet(self, prompt):
self.userInterface.lotsOfSpace()
self.userInterface.divider()
print(prompt)
self.userInterface.divider()

try:
self.amount = int(input("> "))
userInput = self.userInterface.getInput(prompt)
self.amount = int(userInput)
except ValueError:
self.currentPrompt.text = "Try again. Money: $%d" % self.player.money
return
Expand Down
19 changes: 19 additions & 0 deletions src/ui/userInterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,22 @@ def showOptions(
return choice

self.currentPrompt.text = "Try again!"

def getInput(self, prompt):
"""Get text input from the user with a prompt.

This method centralizes all input handling, allowing for future
implementation of alternative UIs (e.g., pygame) without changing
location code.

Args:
prompt: The text to display to the user

Returns:
The user's input as a string
"""
self.lotsOfSpace()
self.divider()
print(prompt)
self.divider()
return input("> ")
42 changes: 12 additions & 30 deletions tests/location/test_bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,112 +104,94 @@ def test_run_go_to_docks_action():
def test_deposit_success():
# prepare
bankInstance = createBank()
bankInstance.userInterface.lotsOfSpace = MagicMock()
bankInstance.userInterface.divider = MagicMock()
bankInstance.userInterface.getInput = MagicMock(return_value="10")
bankInstance.player.money = 100
bankInstance.player.moneyInBank = 0
bank.print = MagicMock()
bank.input = MagicMock(return_value="10")

# call
bankInstance.deposit()

# check
bank.print.assert_called_once()
bankInstance.userInterface.getInput.assert_called_once()
assert bankInstance.player.moneyInBank == 10
assert bankInstance.player.money == 90


def test_deposit_failure_not_enough_money():
# prepare
bankInstance = createBank()
bankInstance.userInterface.lotsOfSpace = MagicMock()
bankInstance.userInterface.divider = MagicMock()
bankInstance.userInterface.getInput = MagicMock(return_value="10")
bankInstance.player.money = 5
bankInstance.player.moneyInBank = 0
bank.print = MagicMock()
bank.input = MagicMock(return_value="10")

# call
bankInstance.deposit()

# check
bank.print.assert_called_once()
bankInstance.userInterface.getInput.assert_called_once()
assert bankInstance.player.moneyInBank == 0
assert bankInstance.player.money == 5


def test_withdraw_success():
# prepare
bankInstance = createBank()
bankInstance.userInterface.lotsOfSpace = MagicMock()
bankInstance.userInterface.divider = MagicMock()
bankInstance.userInterface.getInput = MagicMock(return_value="10")
bankInstance.player.moneyInBank = 100
bankInstance.player.money = 0
bank.print = MagicMock()
bank.input = MagicMock(return_value="10")

# call
bankInstance.withdraw()

# check
bank.print.assert_called_once()
bankInstance.userInterface.getInput.assert_called_once()
assert bankInstance.player.moneyInBank == 90
assert bankInstance.player.money == 10


def test_withdraw_failure_not_enough_money():
# prepare
bankInstance = createBank()
bankInstance.userInterface.lotsOfSpace = MagicMock()
bankInstance.userInterface.divider = MagicMock()
bankInstance.userInterface.getInput = MagicMock(return_value="10")
bankInstance.player.moneyInBank = 5
bankInstance.player.money = 0
bank.print = MagicMock()
bank.input = MagicMock(return_value="10")

# call
bankInstance.withdraw()

# check
bank.print.assert_called_once()
bankInstance.userInterface.getInput.assert_called_once()
assert bankInstance.player.moneyInBank == 5
assert bankInstance.player.money == 0


def test_deposit_with_decimal():
# prepare
bankInstance = createBank()
bankInstance.userInterface.lotsOfSpace = MagicMock()
bankInstance.userInterface.divider = MagicMock()
bankInstance.userInterface.getInput = MagicMock(return_value="10.25")
bankInstance.player.money = 100.50
bankInstance.player.moneyInBank = 0
bank.print = MagicMock()
bank.input = MagicMock(return_value="10.25")

# call
bankInstance.deposit()

# check
bank.print.assert_called_once()
bankInstance.userInterface.getInput.assert_called_once()
assert bankInstance.player.moneyInBank == 10.25
assert bankInstance.player.money == 90.25


def test_withdraw_with_decimal():
# prepare
bankInstance = createBank()
bankInstance.userInterface.lotsOfSpace = MagicMock()
bankInstance.userInterface.divider = MagicMock()
bankInstance.userInterface.getInput = MagicMock(return_value="10.50")
bankInstance.player.moneyInBank = 100.75
bankInstance.player.money = 0
bank.print = MagicMock()
bank.input = MagicMock(return_value="10.50")

# call
bankInstance.withdraw()

# check
bank.print.assert_called_once()
bankInstance.userInterface.getInput.assert_called_once()
assert bankInstance.player.moneyInBank == 90.25
assert bankInstance.player.money == 10.50
4 changes: 2 additions & 2 deletions tests/location/test_home.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,13 @@ def test_displayStats():
# prepare
homeInstance = createHome()
homeInstance.userInterface.lotsOfSpace = MagicMock()
homeInstance.userInterface.getInput = MagicMock()
home.print = MagicMock()
home.input = MagicMock()

# call
homeInstance.displayStats()

# check
assert homeInstance.userInterface.lotsOfSpace.call_count == 1
assert home.print.call_count == 7
assert home.input.call_count == 1
homeInstance.userInterface.getInput.assert_called_once()
19 changes: 19 additions & 0 deletions tests/ui/test_userInterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,22 @@ def test_showOptions():
userInterfaceInstance.lotsOfSpace.assert_called()
assert userInterfaceInstance.divider.call_count == 3
userInterface.input.assert_called_with("\n> ")


def test_getInput():
# setup
userInterfaceInstance = createUserInterface()
userInterface.print = MagicMock()
userInterface.input = MagicMock(return_value="test input")
userInterfaceInstance.lotsOfSpace = MagicMock()
userInterfaceInstance.divider = MagicMock()

# call
result = userInterfaceInstance.getInput("Test prompt")

# check
assert result == "test input"
userInterfaceInstance.lotsOfSpace.assert_called_once()
assert userInterfaceInstance.divider.call_count == 2
userInterface.print.assert_called_with("Test prompt")
userInterface.input.assert_called_with("> ")