# -*- coding; utf-8 -*-
"""
test_head_request
~~~~~~~~~~~~~~~~~
"""
import jh2.connection
import pytest


class TestHeadRequest(object):
    example_request_headers = [
        (b':authority', b'example.com'),
        (b':path', b'/'),
        (b':scheme', b'https'),
        (b':method', b'HEAD'),
    ]

    example_response_headers = [
        (b':status', b'200'),
        (b'server', b'fake-serv/0.1.0'),
        (b'content_length', b'1'),
    ]

    def test_non_zero_content_and_no_body(self, frame_factory):

        c = jh2.connection.H2Connection()
        c.initiate_connection()
        c.send_headers(1, self.example_request_headers, end_stream=True)

        f = frame_factory.build_headers_frame(
            self.example_response_headers,
            flags=['END_STREAM']
        )
        events = c.receive_data(f.serialize())

        assert len(events) == 2
        event = events[0]

        assert isinstance(event, jh2.events.ResponseReceived)
        assert event.stream_id == 1
        assert event.headers == self.example_response_headers

    def test_reject_non_zero_content_and_body(self, frame_factory):
        c = jh2.connection.H2Connection()
        c.initiate_connection()
        c.send_headers(1, self.example_request_headers)

        headers = frame_factory.build_headers_frame(
            self.example_response_headers
        )
        data = frame_factory.build_data_frame(data=b'\x01')

        c.receive_data(headers.serialize())
        with pytest.raises(jh2.exceptions.InvalidBodyLengthError):
            c.receive_data(data.serialize())
