import pytest
import requests

from tests.live.conftest import assert_rfc5424


@pytest.mark.live
class TestHTTPLive:
    def test_get_request_logged(self, live_service):
        port, drain = live_service("http")
        resp = requests.get(f"http://127.0.0.1:{port}/admin", timeout=5)
        assert resp.status_code == 403
        lines = drain()
        assert_rfc5424(lines, service="http", event_type="request")

    def test_server_header_set(self, live_service):
        port, drain = live_service("http")
        resp = requests.get(f"http://127.0.0.1:{port}/", timeout=5)
        assert "Server" in resp.headers
        assert resp.headers["Server"] != ""

    def test_post_body_logged(self, live_service):
        port, drain = live_service("http")
        requests.post(
            f"http://127.0.0.1:{port}/login",
            data={"username": "admin", "password": "secret"},
            timeout=5,
        )
        lines = drain()
        # body field present in log line
        assert any("body=" in line for line in lines if "request" in line), (
            "Expected 'body=' in request log line. Got:\n" + "\n".join(lines[:10])
        )

    def test_method_and_path_in_log(self, live_service):
        port, drain = live_service("http")
        requests.get(f"http://127.0.0.1:{port}/secret/file.txt", timeout=5)
        lines = drain()
        matched = assert_rfc5424(lines, service="http", event_type="request")
        assert "GET" in matched or 'method="GET"' in matched
        assert "/secret/file.txt" in matched or 'path="/secret/file.txt"' in matched
