"""Spec: ruch sieciowy generowany przez ingest pipeline na relayach.

Asercje wyłącznie na ramkach przyjętych przez ``MockRelay`` — żadnych
zaglądnięć do bazy ani do wewnętrznych struktur daemona. Kontrakt: ile
i jakich REQ-ów dostaje publiczny relay w odpowiedzi na akcje usera.
"""

from __future__ import annotations

from ._helpers import new_pub


def test_single_primary_subscribe_asks_relay_for_authors_and_p_tag(
    running_core, mock_relay,
):
    """Subskrypcja jednego primary → relay dostaje REQ
    ``{"authors":[pub], "limit":10}`` oraz ``{"#p":[pub], "limit":10}``."""
    pub = new_pub()

    running_core.subscribe_to_pubkey(pub, limit=10)

    mock_relay.expect_req({"authors": [pub], "limit": 10}, timeout=5.0)
    mock_relay.expect_req({"#p":      [pub], "limit": 10}, timeout=5.0)


def test_multiple_primaries_share_one_batched_authors_req_per_relay(
    running_core, mock_relay,
):
    """Po subskrybowaniu trzech primary, relay dostaje jeden REQ
    ``authors`` z wszystkimi hexami oraz jeden REQ ``#p`` z tym samym
    setem — nie trzy osobne pary."""
    pub1, pub2, pub3 = new_pub(), new_pub(), new_pub()

    running_core.subscribe_to_pubkey(pub1, limit=10)
    running_core.subscribe_to_pubkey(pub2, limit=10)
    running_core.subscribe_to_pubkey(pub3, limit=10)

    mock_relay.expect_req(
        {"authors": [pub1, pub2, pub3], "limit": 10}, timeout=5.0,
    )
    mock_relay.expect_req(
        {"#p":      [pub1, pub2, pub3], "limit": 10}, timeout=5.0,
    )
