74 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import zipfile | ||
|  | from io import BytesIO | ||
|  | 
 | ||
|  | from flask import url_for | ||
|  | 
 | ||
|  | from . import TestBase | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestGenerate(TestBase): | ||
|  |     def test_valid_yaml(self) -> None: | ||
|  |         """
 | ||
|  |         Verify that posting a valid yaml will start generating a game. | ||
|  |         """
 | ||
|  |         with self.app.app_context(), self.app.test_request_context(): | ||
|  |             yaml_data = """
 | ||
|  |             name: Player1 | ||
|  |             game: Archipelago | ||
|  |             Archipelago: {} | ||
|  |             """
 | ||
|  |             response = self.client.post(url_for("generate"), | ||
|  |                                         data={"file": (BytesIO(yaml_data.encode("utf-8")), "test.yaml")}, | ||
|  |                                         follow_redirects=True) | ||
|  |             self.assertEqual(response.status_code, 200) | ||
|  |             self.assertTrue("/seed/" in response.request.path or | ||
|  |                             "/wait/" in response.request.path, | ||
|  |                             f"Response did not properly redirect ({response.request.path})") | ||
|  | 
 | ||
|  |     def test_empty_zip(self) -> None: | ||
|  |         """
 | ||
|  |         Verify that posting an empty zip will give an error. | ||
|  |         """
 | ||
|  |         with self.app.app_context(), self.app.test_request_context(): | ||
|  |             zip_data = BytesIO() | ||
|  |             zipfile.ZipFile(zip_data, "w").close() | ||
|  |             zip_data.seek(0) | ||
|  |             self.assertGreater(len(zip_data.read()), 0) | ||
|  |             zip_data.seek(0) | ||
|  |             response = self.client.post(url_for("generate"), | ||
|  |                                         data={"file": (zip_data, "test.zip")}, | ||
|  |                                         follow_redirects=True) | ||
|  |             self.assertIn("user-message", response.text, | ||
|  |                           "Request did not call flash()") | ||
|  |             self.assertIn("not find any valid files", response.text, | ||
|  |                           "Response shows unexpected error") | ||
|  |             self.assertIn("generate-game-form", response.text, | ||
|  |                           "Response did not get user back to the form") | ||
|  | 
 | ||
|  |     def test_too_many_players(self) -> None: | ||
|  |         """
 | ||
|  |         Verify that posting too many players will give an error. | ||
|  |         """
 | ||
|  |         max_roll = self.app.config["MAX_ROLL"] | ||
|  |         # validate that max roll has a sensible value, otherwise we probably changed how it works | ||
|  |         self.assertIsInstance(max_roll, int) | ||
|  |         self.assertGreater(max_roll, 1) | ||
|  |         self.assertLess(max_roll, 100) | ||
|  |         # create a yaml with max_roll+1 players and watch it fail | ||
|  |         with self.app.app_context(), self.app.test_request_context(): | ||
|  |             yaml_data = "---\n".join([ | ||
|  |                 f"name: Player{n}\n" | ||
|  |                 "game: Archipelago\n" | ||
|  |                 "Archipelago: {}\n" | ||
|  |                 for n in range(1, max_roll + 2) | ||
|  |             ]) | ||
|  |             response = self.client.post(url_for("generate"), | ||
|  |                                         data={"file": (BytesIO(yaml_data.encode("utf-8")), "test.yaml")}, | ||
|  |                                         follow_redirects=True) | ||
|  |             self.assertIn("user-message", response.text, | ||
|  |                           "Request did not call flash()") | ||
|  |             self.assertIn("limited to", response.text, | ||
|  |                           "Response shows unexpected error") | ||
|  |             self.assertIn("generate-game-form", response.text, | ||
|  |                           "Response did not get user back to the form") |