Turn position/margin/sizing/direction env fields into dropdown selects.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -59,6 +59,39 @@ class TestEnvSchema(unittest.TestCase):
|
||||
clean, errors = validate_env_updates(groups, {"B": "1"})
|
||||
self.assertTrue(errors)
|
||||
|
||||
def test_select_fields_and_validate(self):
|
||||
from lib.env.env_schema import SELECT_OPTIONS, normalize_select_value, select_options_for
|
||||
from lib.env.env_ui_manifest import build_env_ui_payload
|
||||
|
||||
self.assertEqual(normalize_select_value("BINANCE_MARGIN_MODE", "cross_margin"), "cross")
|
||||
opts = select_options_for("TRADE_DIRECTION")
|
||||
self.assertEqual({o["value"] for o in opts}, {"both", "long_only", "short_only"})
|
||||
for key in (
|
||||
"OKX_TD_MODE",
|
||||
"OKX_POS_MODE",
|
||||
"POSITION_SIZING_MODE",
|
||||
"TRADE_DIRECTION",
|
||||
):
|
||||
self.assertIn(key, SELECT_OPTIONS)
|
||||
|
||||
root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
example = os.path.join(root, "crypto_monitor_okx", ".env.example")
|
||||
env_path = os.path.join(root, "crypto_monitor_okx", ".env")
|
||||
if not os.path.isfile(example):
|
||||
self.skipTest("missing okx .env.example")
|
||||
groups = build_env_ui_payload("okx", example, env_path if os.path.isfile(env_path) else example)
|
||||
by_key = {f["key"]: f for g in groups for f in g["fields"]}
|
||||
for key in ("OKX_TD_MODE", "OKX_POS_MODE", "POSITION_SIZING_MODE", "TRADE_DIRECTION"):
|
||||
self.assertEqual(by_key[key]["type"], "select")
|
||||
self.assertTrue(by_key[key]["options"])
|
||||
|
||||
groups_v = [{"title": "t", "fields": [by_key["TRADE_DIRECTION"]]}]
|
||||
clean, errors = validate_env_updates(groups_v, {"TRADE_DIRECTION": "long_only"})
|
||||
self.assertEqual(errors, [])
|
||||
self.assertEqual(clean["TRADE_DIRECTION"], "long_only")
|
||||
_, bad = validate_env_updates(groups_v, {"TRADE_DIRECTION": "sideways"})
|
||||
self.assertTrue(bad)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user