Files
galaxy/test/unit/tool_util/util.py
T
2024-09-30 13:25:02 -04:00

51 lines
1.4 KiB
Python

import json
from contextlib import contextmanager
from os import environ
from typing import (
Any,
List,
)
import pytest
external_dependency_management = pytest.mark.external_dependency_management
def dict_verify_each(target_dict: dict, expectations: List[Any]):
assert_json_encodable(target_dict)
for path, expectation in expectations:
exception = target_dict.get("exception")
assert not exception, f"Test failed to generate with exception {exception}"
dict_verify(target_dict, path, expectation)
def dict_verify(target_dict: dict, expectation_path: List[Any], expectation: Any):
rest = target_dict
for path_part in expectation_path:
rest = rest[path_part]
assert rest == expectation, f"{rest} != {expectation} for {expectation_path}"
def assert_json_encodable(as_dict: dict):
json.dumps(as_dict)
@contextmanager
def modify_environ(values, keys_to_remove=None):
"""
Modify the environment for a test, adding/updating values in dict `values` and
removing any environment variables mentioned in list `keys_to_remove`.
"""
old_environ = environ.copy()
try:
if values:
environ.update(values)
if keys_to_remove:
for key in keys_to_remove:
if key in environ:
del environ[key]
yield
finally:
environ.clear()
environ.update(old_environ)