import responses
from brian_dashboard_manager.inventory_provider.interfaces import \
    get_eumetsat_multicast_subscriptions
from brian_dashboard_manager.templating.eumetsat \
    import generate_eumetsat_multicast


TEST_DATA = [
    {
        'router': 'mx1.ams.nl.geant.net',
        'oid': '1.3.6.1.2.1.83.1.1.2.1.16.232.223.222.1.193.17.9.3.255.255.255.255',  # noqa: E501
        'community': '0pBiFbD',
        'subscription': '232.223.222.1',
        'endpoint': '193.17.9.3'
    },
    {
        'router': 'mx1.ams.nl.geant.net',
        'oid': '1.3.6.1.2.1.83.1.1.2.1.16.232.223.222.2.193.17.9.3.255.255.255.255',  # noqa: E501
        'community': '0pBiFbD',
        'subscription': '232.223.222.2',
        'endpoint': '193.17.9.3'
    },
    {
        'router': 'mx1.lon.uk.geant.net',
        'oid': '1.3.6.1.2.1.83.1.1.2.1.16.232.223.222.1.193.17.9.3.255.255.255.255',  # noqa: E501
        'community': '0pBiFbD',
        'subscription': '232.223.222.1',
        'endpoint': '193.17.9.3'
    },
    {
        'router': 'mx1.lon.uk.geant.net',
        'oid': '1.3.6.1.2.1.83.1.1.2.1.16.232.223.222.2.193.17.9.3.255.255.255.255',  # noqa: E501
        'community': '0pBiFbD',
        'subscription': '232.223.222.2',
        'endpoint': '193.17.9.3'
    },
    {
        'router': 'mx1.fra.de.geant.net',
        'oid': '1.3.6.1.2.1.83.1.1.2.1.16.232.223.222.1.193.17.9.3.255.255.255.255',  # noqa: E501
        'community': '0pBiFbD',
        'subscription': '232.223.222.1',
        'endpoint': '193.17.9.3'
    },
    {
        'router': 'mx1.fra.de.geant.net',
        'oid': '1.3.6.1.2.1.83.1.1.2.1.16.232.223.222.2.193.17.9.3.255.255.255.255',  # noqa: E501
        'community': '0pBiFbD',
        'subscription': '232.223.222.2',
        'endpoint': '193.17.9.3'
    }
]


@responses.activate
def test_eumetsat_subscriptions(data_config, client):

    responses.add(
        method=responses.GET,
        url=f'{data_config["inventory_provider"]}/poller/eumetsat-multicast',
        json=TEST_DATA)

    subscription_data = {}
    for s in TEST_DATA:
        subscription_data.setdefault(s['router'], set()).add(s['subscription'])

    expected_titles = [
        f'{name} subscriptions' for name in subscription_data.keys()]

    subscriptions = get_eumetsat_multicast_subscriptions(
        data_config['inventory_provider'])
    dashboards = list(
        generate_eumetsat_multicast(subscriptions, 'testdatasource'))

    assert len(dashboards) == len(expected_titles)
    assert all(d['title'] in expected_titles for d in dashboards)
    # just use 2, instead of something smart, since the data is above
    assert all(len(d['panels']) == 2 for d in dashboards)