# -*- coding: utf-8 -*- import os import unittest from lib.options.options_underly_lib import ( inst_underly_not_allowed_msg, parse_options_underlyings, resolve_default_underly, underly_not_allowed_msg, ) class OptionsUnderlyLibTests(unittest.TestCase): def setUp(self): self._old_u = os.environ.get("OKX_OPTIONS_UNDERLYINGS") self._old_d = os.environ.get("OKX_OPTIONS_DEFAULT_UNDERLY") def tearDown(self): self._restore("OKX_OPTIONS_UNDERLYINGS", self._old_u) self._restore("OKX_OPTIONS_DEFAULT_UNDERLY", self._old_d) @staticmethod def _restore(key: str, val: str | None) -> None: if val is None: os.environ.pop(key, None) else: os.environ[key] = val def test_default_both(self): os.environ.pop("OKX_OPTIONS_UNDERLYINGS", None) self.assertEqual(parse_options_underlyings(), ["ETH", "BTC"]) def test_eth_only(self): os.environ["OKX_OPTIONS_UNDERLYINGS"] = "ETH" self.assertEqual(parse_options_underlyings(), ["ETH"]) self.assertIsNone(underly_not_allowed_msg("ETH")) self.assertIsNotNone(underly_not_allowed_msg("BTC")) self.assertIsNotNone(inst_underly_not_allowed_msg("BTC-USD-260328-100000-C")) def test_default_clamped_to_whitelist(self): os.environ["OKX_OPTIONS_UNDERLYINGS"] = "BTC" os.environ["OKX_OPTIONS_DEFAULT_UNDERLY"] = "ETH" self.assertEqual(resolve_default_underly(), "BTC") def test_ignores_junk(self): os.environ["OKX_OPTIONS_UNDERLYINGS"] = "ETH, DOGE ,btc" self.assertEqual(parse_options_underlyings(), ["ETH", "BTC"]) if __name__ == "__main__": unittest.main()