def test_choose_inventory_large_selection(self, mock_stdout): items = [ "Armor", "Shield", "Consumables", "Weapons", "Gear", "Tools", "Wands", "Gold" ] expected_output = 'Error: Not enough elements in list to select.\n' dungeonsanddragons.choose_inventory(items, 12) self.assertEqual(mock_stdout.getvalue(), expected_output)
def test_choose_inventory(self, mock_stdout): items = [ "Armor", "Shield", "Consumables", "Weapons", "Gear", "Tools", "Wands", "Gold" ] expected_output = 'Error: Selection must be a positive integer.\n' dungeonsanddragons.choose_inventory(items, -4) self.assertEqual(mock_stdout.getvalue(), expected_output)
def test_printed_output(self, mock_stdout, mock_input): expected_output = "Welcome to Yolanda's Premium Adventure Shop! For all your dungeon-crawling needs.\n" \ "\nToday there are 14 shop items available. They are:\n" \ "1 - Sword of Sanctimony\n2 - Potion of Python\n3 - Daggers of Deception" \ "\n4 - Staff of Serenity\n5 - Juggling Balls of JavaScript\n6 - Detonator of Divide-by-Zero" \ "\n7 - Gloves of Genius\n8 - Map of Misdirection\n9 - Crossbow of Courage" \ "\n10 - Charm of Chris' Approval\n11 - Cloak of Confusion\n12 - Takashi's Donut Box" \ "\n13 - Bottle of Binary\n14 - Axe of Asking Questions\n\n\n" choose_inventory() self.assertEqual(mock_stdout.getvalue(), expected_output)
def test_choose_inventory_type(self): items = [ "Armor", "Shield", "Consumables", "Weapons", "Gear", "Tools", "Wands", "Gold" ] self.assertEqual(type(dungeonsanddragons.choose_inventory(items, 5)), list)
def test_choose_inventory_error(self, mock_items, mock_output): sample = [ 'Rabadon\'s Deathcap', 'Abyssal Mask', 'Rapidfire Cannon', 'Boots of Lucidity' ] expected = """Welcome to the Olde Tyme Merchant! Here is what we have for sale: --Current Inventory-- 1. Rabadon's Deathcap 2. Abyssal Mask 3. Rapidfire Cannon 4. Boots of Lucidity You must enter a number corresponding to an item in the list. --Current Inventory-- 1. Rabadon's Deathcap 2. Abyssal Mask 3. Rapidfire Cannon 4. Boots of Lucidity --Inventory-- """ inventory = choose_inventory(sample) self.assertEqual(expected, mock_output.getvalue())
def test_choose_inventory_duplicate_return(self, mock_items, mock_output): sample = [ 'Rabadon\'s Deathcap', 'Abyssal Mask', 'Rapidfire Cannon', 'Boots of Lucidity' ] expected = ['Rabadon\'s Deathcap', 'Rabadon\'s Deathcap'] inventory = choose_inventory(sample) self.assertEqual(expected, inventory)
def test_choose_inventory_same_items(self): items = [ "Armor", "Shield", "Consumables", "Weapons", "Gear", "Tools", "Wands", "Gold" ] selected_items = dungeonsanddragons.choose_inventory(items, 4) for gear in selected_items: self.assertTrue(gear in items)
def test_choose_inventory_item_gets_added(self, mock_choice): gear_list = [ "Rapier", "Broadsword", "Vorpal sword", "The constrictor", "A duck!", "giant spoon", "icingdeath", "bag of holding", "boomstick", "stabstick", "greaves", "gambeson", "vambraces", "wand of fire", "Twinkle", "Cucumber salad" ] for gear in gear_list: test_gear = dungeonsanddragons.choose_inventory() self.assertEqual(test_gear[0], gear)
def test_choose_inventory_duplicate_print(self, mock_items, mock_output): sample = [ 'Rabadon\'s Deathcap', 'Abyssal Mask', 'Rapidfire Cannon', 'Boots of Lucidity' ] expected = """Welcome to the Olde Tyme Merchant! Here is what we have for sale: --Current Inventory-- 1. Rabadon's Deathcap 2. Abyssal Mask 3. Rapidfire Cannon 4. Boots of Lucidity --Current Inventory-- Rabadon's Deathcap 1. Rabadon's Deathcap 2. Abyssal Mask 3. Rapidfire Cannon 4. Boots of Lucidity --Current Inventory-- Rabadon's Deathcap Rabadon's Deathcap 1. Rabadon's Deathcap 2. Abyssal Mask 3. Rapidfire Cannon 4. Boots of Lucidity --Inventory-- Rabadon's Deathcap Rabadon's Deathcap """ inventory = choose_inventory(sample) self.assertEqual(expected, mock_output.getvalue())
def test_choose_inventory_selection_equal_to_inventory_length(self): inventory = ['b', 'c', 'd', 'a', 'f', 'e'] self.assertTrue( dungeonsanddragons.choose_inventory(inventory, 6) == ['a', 'b', 'c', 'd', 'e', 'f'])
def test_choose_inventory_selection_greater_than_inventory_length_expected_output( self, mock_stdout): inventory = ['a', 'b', 'c', 1, 2, 3] expected_output = "Selection is greater than the total number of your inventory!\n" dungeonsanddragons.choose_inventory(inventory, 7) self.assertEqual(mock_stdout.getvalue(), expected_output)
def test_choose_inventory_selection_greater_than_inventory_length(self): inventory = ['a', 'b', 'c', 1, 2, 3] self.assertIs(dungeonsanddragons.choose_inventory(inventory, 7), None)
def test_choose_inventory_negative_selection_expected_output( self, mock_stdout): inventory = ['a', 'b', 'c', 1, 2, 3] expected_output = "Selection must be a positive integer!\n" dungeonsanddragons.choose_inventory(inventory, -1) self.assertEqual(mock_stdout.getvalue(), expected_output)
def test_choose_inventory_negative_selection(self): inventory = ['a', 'b', 'c', 1, 2, 3] self.assertIs(dungeonsanddragons.choose_inventory(inventory, -1), None)
def test_expected_return(self, mock_input): self.assertEqual(choose_inventory(), ['Juggling Balls of JavaScript', 'Staff of Serenity'])
def test_choose_inventory_with_empty_str(self): with self.assertRaises(TypeError): dungeonsanddragons.choose_inventory([], "") dungeonsanddragons.choose_inventory("", 6) dungeonsanddragons.choose_inventory("", "")
def test_choose_inventory_no_selection(self): self.assertEqual( dungeonsanddragons.choose_inventory(["Gear", "Tools", "Armor"], 0), [])
def test_correct_length(self): self.assertTrue(len(choose_inventory([1, 2, 3, 4, 5, 6], 5)) == 5)
def test_choose_inventory_no_items(self, mock_choice): test_gear = dungeonsanddragons.choose_inventory() self.assertEqual(len(test_gear), 0)
def test_selection_equals_length(self): self.assertTrue( choose_inventory([5, 7, 3, 9, 2], 5) is not [5, 7, 3, 9, 2]) self.assertEqual(choose_inventory([5, 7, 3, 9, 2], 5), [5, 7, 3, 9, 2])
def test_selection_too_big(self): self.assertIsNone(choose_inventory([1, 2, 3, 4], 7))
def test_empty_list(self): self.assertEqual(choose_inventory([], 0), [])
def test_choose_inventory_selection_normal(self): inventory = ['b', 'c', 'd', 'a', 'f', 'e'] new_list = dungeonsanddragons.choose_inventory(inventory, 3) self.assertIn(new_list[0], inventory) self.assertIn(new_list[1], inventory) self.assertIn(new_list[2], inventory)
def test_choose_inventory_empty_list(self): self.assertEqual(dungeonsanddragons.choose_inventory([], 0), [])
def test_choose_inventory_type(self): inventory = ['a', 'b', 'c', 'd', 'e', 'f'] self.assertIsInstance( dungeonsanddragons.choose_inventory(inventory, 3), list)
def test_choose_inventory_empty_list_selection_0(self): self.assertTrue(dungeonsanddragons.choose_inventory([], 0) == [])
def test_negative_selection(self): self.assertIsNone(choose_inventory([1, 2, 3, 4], -5))
def test_choose_inventory_equivalent(self): inventory_list = ["Armor", "Shield", "Consumables", "Weapons"] self.assertEqual( dungeonsanddragons.choose_inventory(inventory_list, 4), sorted(inventory_list))
def test_choose_inventory_invalid_items(self, mock_output, mock_choice): test_gear = dungeonsanddragons.choose_inventory() expected_output = "Sorry, we don't sell that.\nWhat would you like to purchase?\n" self.assertIn(expected_output, mock_output.getvalue())
def test_choose_inventory_length(self): self.assertTrue(len(choose_inventory(sample_inventory, 4)), 4)