| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  | from typing import Dict | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from . import MessengerTestBase | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  | from ..shop import SHOP_ITEMS, FIGURINES | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ShopCostTest(MessengerTestBase): | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |         "shop_price": "random", | 
					
						
							|  |  |  |         "shuffle_shards": "true", | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_shop_rules(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         for loc in SHOP_ITEMS: | 
					
						
							|  |  |  |             loc = f"The Shop - {loc}" | 
					
						
							|  |  |  |             with self.subTest("has cost", loc=loc): | 
					
						
							|  |  |  |                 self.assertFalse(self.can_reach_location(loc)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_shop_prices(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         prices: Dict[str, int] = self.multiworld.worlds[self.player].shop_prices | 
					
						
							|  |  |  |         for loc, price in prices.items(): | 
					
						
							|  |  |  |             with self.subTest("prices", loc=loc): | 
					
						
							| 
									
										
										
										
											2023-07-24 19:41:20 -05:00
										 |  |  |                 self.assertLessEqual(price, self.multiworld.get_location(f"The Shop - {loc}", self.player).cost) | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |                 self.assertTrue(loc in SHOP_ITEMS) | 
					
						
							|  |  |  |         self.assertEqual(len(prices), len(SHOP_ITEMS)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_dboost(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         locations = [ | 
					
						
							|  |  |  |             "Riviere Turquoise Seal - Bounces and Balls", | 
					
						
							|  |  |  |             "Forlorn Temple - Demon King", "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset", | 
					
						
							|  |  |  |             "Sunny Day Mega Shard", "Down Under Mega Shard", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         items = [["Path of Resilience", "Meditation", "Second Wind"]] | 
					
						
							|  |  |  |         self.assertAccessDependency(locations, items) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_currents(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         self.assertAccessDependency(["Elemental Skylands Seal - Water"], [["Currents Master"]]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_strike(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         locations = [ | 
					
						
							|  |  |  |             "Glacial Peak Seal - Projectile Spike Pit", "Elemental Skylands Seal - Fire", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         items = [["Strike of the Ninja"]] | 
					
						
							|  |  |  |         self.assertAccessDependency(locations, items) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ShopCostMinTest(ShopCostTest): | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |         "shop_price": "random", | 
					
						
							|  |  |  |         "shuffle_seals": "false", | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-07-24 19:41:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_shop_rules(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-29 07:33:37 -05:00
										 |  |  |         if self.multiworld.worlds[self.player].total_shards: | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |             super().test_shop_rules() | 
					
						
							| 
									
										
										
										
											2023-06-29 07:33:37 -05:00
										 |  |  |         else: | 
					
						
							|  |  |  |             for loc in SHOP_ITEMS: | 
					
						
							|  |  |  |                 loc = f"The Shop - {loc}" | 
					
						
							|  |  |  |                 with self.subTest("has cost", loc=loc): | 
					
						
							|  |  |  |                     self.assertTrue(self.can_reach_location(loc)) | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_dboost(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_currents(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_strike(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PlandoTest(MessengerTestBase): | 
					
						
							|  |  |  |     options = { | 
					
						
							|  |  |  |         "shop_price_plan": { | 
					
						
							|  |  |  |             "Karuta Plates": 50, | 
					
						
							|  |  |  |             "Serendipitous Bodies": {100: 1, 200: 1, 300: 1}, | 
					
						
							|  |  |  |             "Barmath'azel Figurine": 500, | 
					
						
							|  |  |  |             "Demon Hive Figurine": {100: 1, 200: 2, 300: 1}, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-08 07:33:39 -05:00
										 |  |  |     def test_costs(self) -> None: | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |         for loc in SHOP_ITEMS: | 
					
						
							|  |  |  |             loc = f"The Shop - {loc}" | 
					
						
							|  |  |  |             with self.subTest("has cost", loc=loc): | 
					
						
							|  |  |  |                 self.assertFalse(self.can_reach_location(loc)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         prices = self.multiworld.worlds[self.player].shop_prices | 
					
						
							|  |  |  |         for loc, price in prices.items(): | 
					
						
							|  |  |  |             with self.subTest("prices", loc=loc): | 
					
						
							|  |  |  |                 if loc == "Karuta Plates": | 
					
						
							|  |  |  |                     self.assertEqual(self.options["shop_price_plan"]["Karuta Plates"], price) | 
					
						
							|  |  |  |                 elif loc == "Serendipitous Bodies": | 
					
						
							|  |  |  |                     self.assertIn(price, self.options["shop_price_plan"]["Serendipitous Bodies"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 loc = f"The Shop - {loc}" | 
					
						
							| 
									
										
										
										
											2023-07-24 19:41:20 -05:00
										 |  |  |                 self.assertLessEqual(price, self.multiworld.get_location(loc, self.player).cost) | 
					
						
							| 
									
										
										
										
											2023-06-27 18:39:52 -05:00
										 |  |  |                 self.assertTrue(loc.replace("The Shop - ", "") in SHOP_ITEMS) | 
					
						
							|  |  |  |         self.assertEqual(len(prices), len(SHOP_ITEMS)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         figures = self.multiworld.worlds[self.player].figurine_prices | 
					
						
							|  |  |  |         for loc, price in figures.items(): | 
					
						
							|  |  |  |             with self.subTest("figure prices", loc=loc): | 
					
						
							|  |  |  |                 if loc == "Barmath'azel Figurine": | 
					
						
							|  |  |  |                     self.assertEqual(self.options["shop_price_plan"]["Barmath'azel Figurine"], price) | 
					
						
							|  |  |  |                 elif loc == "Demon Hive Figurine": | 
					
						
							|  |  |  |                     self.assertIn(price, self.options["shop_price_plan"]["Demon Hive Figurine"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 self.assertTrue(loc in FIGURINES) | 
					
						
							|  |  |  |         self.assertEqual(len(figures), len(FIGURINES)) |