import unittest

from lib.hub.price_snapshot_lib import resolve_order_snapshot_price


class TestPriceSnapshotLib(unittest.TestCase):
    def test_resolve_from_cached_prices(self):
        px = resolve_order_snapshot_price("ETH/USDT", {"ETH/USDT": 1750.5})
        self.assertEqual(px, 1750.5)

    def test_resolve_from_position_mark(self):
        prow = {"info": {"mark_price": 1760.0}, "contracts": 1}
        px = resolve_order_snapshot_price("ETH/USDT", {}, position_row=prow)
        self.assertEqual(px, 1760.0)

    def test_resolve_mark_fn_before_entry(self):
        px = resolve_order_snapshot_price(
            "ETH/USDT",
            {},
            get_mark_price_fn=lambda s: 1755.0,
            fallback_entry=1700.0,
        )
        self.assertEqual(px, 1755.0)

    def test_resolve_fallback_entry(self):
        px = resolve_order_snapshot_price(
            "ETH/USDT",
            {},
            fallback_entry=1700.0,
        )
        self.assertEqual(px, 1700.0)


if __name__ == "__main__":
    unittest.main()
