def test_process_clear_action_response(sm: SubscriptionManager):
    category = Category.MARKET
    events = [MarketEvents.ORDERS, MarketEvents.CANCELS]
    topics = ['ETH_AURA', 'ETH_ZRX']
    payload = dict(events=events, topics=topics)

    sm._process_subscribe_action_response(category, payload)

    assert len(sm.subscriptions[category].topics) == len(topics)

    sm._process_clear_action_response(category, payload)

    assert len(sm.subscriptions[category].topics) == 0
def test_process_unsubscribe_action_response(sm: SubscriptionManager):
    category = Category.MARKET
    events = [MarketEvents.ORDERS, MarketEvents.CANCELS]
    topics = ['ETH_AURA', 'ETH_ZRX']
    payload = dict(events=events, topics=topics)

    sm._process_subscribe_action_response(category, payload)

    old_topics = sm.subscriptions[category].topics
    sm._process_unsubscribe_action_response(Category.CHAIN, payload)
    assert old_topics == sm.subscriptions[category].topics

    topics = ['ETH_AURA']
    payload = dict(events=events, topics=topics)
    sm._process_unsubscribe_action_response(category, payload)
    assert sm.subscriptions[category].topics == ('ETH_AURA', )
def test_process_get_action_response(sm: SubscriptionManager):
    category = Category.MARKET
    events = [MarketEvents.ORDERS, MarketEvents.CANCELS]
    topics = ['ETH_AURA', 'ETH_ZRX']
    payload = dict(events=events, topics=topics)

    assert sm.subscriptions == {}

    sm._process_get_action_response(category, payload)

    assert sm.subscriptions == {}

    sm._process_subscribe_action_response(category, payload)

    payload['topics'] = ['ETH_SAN']
    old_events = sm.subscriptions[category].events
    sm._process_get_action_response(category, payload)

    assert sm.subscriptions[category].events == old_events
    assert sm.subscriptions[category].topics == ('ETH_SAN', )
def test_process_subscribe_action_response(sm: SubscriptionManager):
    category = Category.MARKET
    events = [MarketEvents.ORDERS, MarketEvents.CANCELS]
    topics = ['ETH_AURA', 'ETH_ZRX']
    payload = dict(events=events, topics=topics)

    assert sm.subscriptions == {}

    sm._process_subscribe_action_response(category, payload)

    assert category in sm.subscriptions
    sub = sm.subscriptions[category]
    assert sub.category == category

    assert len(sub.events) == len(events)
    assert sub.events == (MarketEvents.CANCELS.value,
                          MarketEvents.ORDERS.value)

    assert len(sub.topics) == len(topics)
    assert sub.topics == ('ETH_AURA', 'ETH_ZRX')