# test_with_pytest.py import pytest import os from mock import patch from cnf.config import Config from cnf.config_read_toml import ConfigReadToml from cnf.config_read_env import ConfigReadEnv def patch_getenv(): def new_getenv(key: str, defval=None): """Get an environment variable, return None if it doesn't exist. The optional second argument can specify an alternate default. key, default and the result are str.""" if key == 'MQTT_PASSWORD': return 'passwd' elif key == 'MQTT_PORT': return 1234 elif key == 'MQTT_HOST': return "" return defval with patch.object(os, 'getenv', new_getenv) as conn: yield conn def test_extend_key(): cnf_rd = ConfigReadEnv() conf = {} cnf_rd._extend_key(conf, "mqtt.user", "testuser") assert conf == { 'mqtt': { 'user': 'testuser', }, } conf = {} cnf_rd._extend_key(conf, "mqtt", "testuser") assert conf == { 'mqtt': 'testuser', } conf = {} cnf_rd._extend_key(conf, "", "testuser") assert conf == {'': 'testuser'} def test_read_env_config(): Config.init(ConfigReadToml("app/src/cnf/default_config.toml")) assert Config.get('mqtt') == {'host': 'mqtt', 'port': 1883, 'user': None, 'passwd': None} for _ in patch_getenv(): ConfigReadEnv() assert Config.get_error() == None assert Config.get('mqtt') == {'host': 'mqtt', 'port': 1234, 'user': None, 'passwd': 'passwd'}