import pytest

from octorest import XHRStreamingGenerator

from _common import URL


@pytest.mark.usefixtures('betamax_recorder')
@pytest.fixture
def client(betamax_recorder):
    betamax_recorder.current_cassette.match_options.remove('uri')
    session = betamax_recorder.session
    return XHRStreamingGenerator(url=URL, session=session)


class TestXHRStreamingGenerator:
    @pytest.mark.usefixtures('betamax_session')
    def test_init_works(self, betamax_session):
        XHRStreamingGenerator(url=URL, session=betamax_session)

    def test_info(self, client):
        response = client.info()
        assert response.get("websocket", None) is not None

    @pytest.mark.xfail(reason="OctoPrints tornado server returns 404")
    def test_send(self, client):
        r = client.send({"throttle": 10})
        assert r.status_code in [200, 204]

    def test_readloop(self, client):
        generator = client.read_loop()
        assert next(generator).get("connected", None)