| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  | import json | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  | import os | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  | import sys | 
					
						
							|  |  |  |  | from pathlib import Path | 
					
						
							|  |  |  |  | from unittest.mock import patch | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | import pytest | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | DIR_PROJECT_ROOT = Path(__file__).parent.parent | 
					
						
							|  |  |  |  | DIR_TESTDATA = Path(__file__).parent / "testdata" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | def test_openapi_spec_current(config_eos): | 
					
						
							|  |  |  |  |     """Verify the openapi spec hasn´t changed.""" | 
					
						
							|  |  |  |  |     expected_spec_path = DIR_PROJECT_ROOT / "openapi.json" | 
					
						
							|  |  |  |  |     new_spec_path = DIR_TESTDATA / "openapi-new.json" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     with expected_spec_path.open("r", encoding="utf-8", newline=None) as f_expected: | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |         expected_spec = json.load(f_expected) | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 16:54:49 +01:00
										 |  |  |  |     # Patch get_config and import within guard to patch global variables within the eos module. | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |     with patch("akkudoktoreos.config.config.get_config", return_value=config_eos): | 
					
						
							|  |  |  |  |         # Ensure the script works correctly as part of a package | 
					
						
							|  |  |  |  |         root_dir = Path(__file__).resolve().parent.parent | 
					
						
							|  |  |  |  |         sys.path.insert(0, str(root_dir)) | 
					
						
							|  |  |  |  |         from scripts import generate_openapi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         spec = generate_openapi.generate_openapi() | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |         spec_str = json.dumps(spec, indent=4, sort_keys=True) | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     with new_spec_path.open("w", encoding="utf-8", newline="\n") as f_new: | 
					
						
							|  |  |  |  |         f_new.write(spec_str) | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     # Serialize to ensure comparison is consistent | 
					
						
							|  |  |  |  |     expected_spec_str = json.dumps(expected_spec, indent=4, sort_keys=True) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     try: | 
					
						
							|  |  |  |  |         assert spec_str == expected_spec_str | 
					
						
							|  |  |  |  |     except AssertionError as e: | 
					
						
							|  |  |  |  |         pytest.fail( | 
					
						
							|  |  |  |  |             f"Expected {new_spec_path} to equal {expected_spec_path}.\n" | 
					
						
							|  |  |  |  |             + f"If ok: `make gen-docs` or `cp {new_spec_path} {expected_spec_path}`\n" | 
					
						
							|  |  |  |  |         ) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | def test_openapi_md_current(config_eos): | 
					
						
							|  |  |  |  |     """Verify the generated openapi markdown hasn´t changed.""" | 
					
						
							|  |  |  |  |     expected_spec_md_path = DIR_PROJECT_ROOT / "docs" / "_generated" / "openapi.md" | 
					
						
							|  |  |  |  |     new_spec_md_path = DIR_TESTDATA / "openapi-new.md" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     with expected_spec_md_path.open("r", encoding="utf-8", newline=None) as f_expected: | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |         expected_spec_md = f_expected.read() | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 16:54:49 +01:00
										 |  |  |  |     # Patch get_config and import within guard to patch global variables within the eos module. | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |     with patch("akkudoktoreos.config.config.get_config", return_value=config_eos): | 
					
						
							|  |  |  |  |         # Ensure the script works correctly as part of a package | 
					
						
							|  |  |  |  |         root_dir = Path(__file__).resolve().parent.parent | 
					
						
							|  |  |  |  |         sys.path.insert(0, str(root_dir)) | 
					
						
							|  |  |  |  |         from scripts import generate_openapi_md | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         spec_md = generate_openapi_md.generate_openapi_md() | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     with new_spec_md_path.open("w", encoding="utf-8", newline="\n") as f_new: | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |         f_new.write(spec_md) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     try: | 
					
						
							|  |  |  |  |         assert spec_md == expected_spec_md | 
					
						
							|  |  |  |  |     except AssertionError as e: | 
					
						
							|  |  |  |  |         pytest.fail( | 
					
						
							|  |  |  |  |             f"Expected {new_spec_md_path} to equal {expected_spec_md_path}.\n" | 
					
						
							|  |  |  |  |             + f"If ok: `make gen-docs` or `cp {new_spec_md_path} {expected_spec_md_path}`\n" | 
					
						
							|  |  |  |  |         ) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | def test_config_md_current(config_eos): | 
					
						
							|  |  |  |  |     """Verify the generated configuration markdown hasn´t changed.""" | 
					
						
							|  |  |  |  |     expected_config_md_path = DIR_PROJECT_ROOT / "docs" / "_generated" / "config.md" | 
					
						
							|  |  |  |  |     new_config_md_path = DIR_TESTDATA / "config-new.md" | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     with expected_config_md_path.open("r", encoding="utf-8", newline=None) as f_expected: | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |         expected_config_md = f_expected.read() | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 16:54:49 +01:00
										 |  |  |  |     # Patch get_config and import within guard to patch global variables within the eos module. | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |     with patch("akkudoktoreos.config.config.get_config", return_value=config_eos): | 
					
						
							|  |  |  |  |         # Ensure the script works correctly as part of a package | 
					
						
							|  |  |  |  |         root_dir = Path(__file__).resolve().parent.parent | 
					
						
							|  |  |  |  |         sys.path.insert(0, str(root_dir)) | 
					
						
							|  |  |  |  |         from scripts import generate_config_md | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-19 21:47:21 +01:00
										 |  |  |  |         config_md = generate_config_md.generate_config_md(config_eos) | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     if os.name == "nt": | 
					
						
							| 
									
										
										
										
											2025-06-03 08:30:37 +02:00
										 |  |  |  |         config_md = config_md.replace("\\\\", "/") | 
					
						
							| 
									
										
										
										
											2025-02-12 21:35:51 +01:00
										 |  |  |  |     with new_config_md_path.open("w", encoding="utf-8", newline="\n") as f_new: | 
					
						
							| 
									
										
										
										
											2025-01-06 16:27:57 +01:00
										 |  |  |  |         f_new.write(config_md) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     try: | 
					
						
							|  |  |  |  |         assert config_md == expected_config_md | 
					
						
							|  |  |  |  |     except AssertionError as e: | 
					
						
							|  |  |  |  |         pytest.fail( | 
					
						
							|  |  |  |  |             f"Expected {new_config_md_path} to equal {expected_config_md_path}.\n" | 
					
						
							|  |  |  |  |             + f"If ok: `make gen-docs` or `cp {new_config_md_path} {expected_config_md_path}`\n" | 
					
						
							|  |  |  |  |         ) |