#!/usr/bin/env python3
# coding=UTF-8
# Copyright (c) Huawei Technologies Co., Ltd. 2026. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from ar_cli.sse import stream_sse


class FakeResponse:
    """Minimal stand-in exposing iter_lines() like requests.Response."""

    def __init__(self, lines):
        self._lines = lines

    def iter_lines(self, decode_unicode=False):
        yield from self._lines


def test_parses_data_payloads_and_skips_blanks():
    resp = FakeResponse(
        [
            'data: {"func": "hello"}',
            "",
            "data: {}",
            "",
            'data: "OK"',
            "data: [DONE]",
            'data: "after done"',  # must not be yielded
        ]
    )
    assert list(stream_sse(resp)) == ['{"func": "hello"}', "{}", '"OK"']


def test_stops_at_done():
    resp = FakeResponse(["data: a", "data: [DONE]"])
    assert list(stream_sse(resp)) == ["a"]


def test_ignores_non_data_lines():
    resp = FakeResponse(["event: message", "data: x", ": keep-alive comment"])
    assert list(stream_sse(resp)) == ["x"]