import datetime
import uuid
from decimal import Decimal
import pytest
from sqlalchemy.exc import IntegrityError
from nomy_data_models.models.market_price import MarketPrice
@pytest.fixture
def market_price():
price = MarketPrice()
price.token_symbol = "BTC"
price.price_usd = Decimal("50000.0")
price.source = "coinmarketcap"
return price
class TestMarketPrice:
def test_market_price_creation(self):
price = MarketPrice()
price.token_symbol = "ETH"
price.price_usd = Decimal("3000.0")
price.source = "coingecko"
assert price.token_symbol == "ETH", "Token symbol should be 'ETH'"
assert price.price_usd == Decimal("3000.0"), "Price should be 3000.0"
assert price.source == "coingecko", "Source should be 'coingecko'"
def test_market_price_repr(self, market_price):
repr_str = repr(market_price)
assert "MarketPrice" in repr_str
assert "token_symbol=BTC" in repr_str
def test_market_price_db_integration(self, session):
price = MarketPrice()
price.token_symbol = "ETH"
price.price_usd = Decimal("3000.0")
price.source = "coingecko"
price.market_cap_usd = Decimal("500000000.0")
price.volume_24h_usd = Decimal("25000000.0")
session.add(price)
session.commit()
retrieved = session.query(MarketPrice).filter_by(token_symbol="ETH").first()
assert retrieved is not None, "MarketPrice should be retrievable from database"
assert retrieved.token_symbol == "ETH", "Retrieved token symbol should match"
assert retrieved.price_usd == Decimal("3000.0"), "Retrieved price should match"
assert retrieved.source == "coingecko", "Retrieved source should match"
assert retrieved.market_cap_usd == Decimal(
"500000000.0"
), "Retrieved market cap should match"
assert retrieved.volume_24h_usd == Decimal(
"25000000.0"
), "Retrieved volume should match"
def test_market_price_unique_constraint(self, session):
price1 = MarketPrice()
price1.token_symbol = "SOL"
price1.price_usd = Decimal("100.0")
price1.source = "coinmarketcap"
session.add(price1)
session.commit()
price2 = MarketPrice()
price2.token_symbol = "SOL"
price2.price_usd = Decimal("101.0")
price2.source = "coingecko"
session.add(price2)
with pytest.raises(Exception):
session.commit()
def test_market_price_update(self, session):
price = MarketPrice()
price.token_symbol = "AVAX"
price.price_usd = Decimal("20.0")
price.source = "coinmarketcap"
session.add(price)
session.commit()
price.price_usd = Decimal("25.0")
session.commit()
retrieved = session.query(MarketPrice).filter_by(token_symbol="AVAX").first()
assert retrieved.price_usd == Decimal("25.0"), "Price should be updated to 25.0"