Spaces:
Paused
Paused
| """ | |
| High-quality tests for api_utils/utils.py pure functions (zero mocking). | |
| Focus: Test real business logic with no mocks, only pure function testing. | |
| """ | |
| import json | |
| def test_extract_json_from_text_valid_json(): | |
| """ | |
| Test scenario: Extract valid JSON from text | |
| Strategy: Pure function test, no mocking needed | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = 'Some text before {"key": "value", "num": 42} and text after' | |
| result = _extract_json_from_text(text) | |
| assert result is not None | |
| parsed = json.loads(result) | |
| assert parsed["key"] == "value" | |
| assert parsed["num"] == 42 | |
| def test_extract_json_from_text_nested_json(): | |
| """ | |
| Test scenario: Extract nested JSON object | |
| Verify: Able to handle complex structures | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = '{"outer": {"inner": {"deep": "value"}}, "array": [1, 2, 3]}' | |
| result = _extract_json_from_text(text) | |
| assert result is not None | |
| parsed = json.loads(result) | |
| assert parsed["outer"]["inner"]["deep"] == "value" | |
| assert parsed["array"] == [1, 2, 3] | |
| def test_extract_json_from_text_invalid_json(): | |
| """ | |
| Test scenario: Invalid JSON string | |
| Expected: Return None | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = "{invalid json syntax" | |
| result = _extract_json_from_text(text) | |
| assert result is None | |
| def test_extract_json_from_text_empty_string(): | |
| """ | |
| Test scenario: Empty string | |
| Expected: Return None | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| result = _extract_json_from_text("") | |
| assert result is None | |
| def test_extract_json_from_text_no_braces(): | |
| """ | |
| Test scenario: Text without braces | |
| Expected: Return None | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = "just plain text without any braces" | |
| result = _extract_json_from_text(text) | |
| assert result is None | |
| def test_extract_json_from_text_multiple_json_objects(): | |
| """ | |
| Test scenario: Text containing multiple JSON objects (invalid case) | |
| Verify: Function handles invalid multi-object text | |
| Description: Function extracts from the first '{' to the last '}', | |
| so for '{"first": "obj"} text {"second": "obj"}' it gets the whole string, | |
| which is not valid JSON, thus returns None. | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = '{"first": "obj"} some text {"second": "obj"}' | |
| result = _extract_json_from_text(text) | |
| # Expected to return None because extracted string is not valid JSON | |
| assert result is None | |
| def test_extract_json_from_text_json_with_unicode(): | |
| """ | |
| Test scenario: JSON with Unicode characters | |
| Verify: Correctly handle non-ASCII characters | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = '{"message": "hello world", "emoji": "smile"}' | |
| result = _extract_json_from_text(text) | |
| assert result is not None | |
| parsed = json.loads(result) | |
| assert parsed["message"] == "hello world" | |
| assert parsed["emoji"] == "smile" | |
| def test_extract_json_from_text_json_with_escaped_quotes(): | |
| """ | |
| Test scenario: JSON with escaped quotes | |
| Verify: Correctly handle escape characters | |
| """ | |
| from api_utils.utils import _extract_json_from_text | |
| text = '{"quote": "He said \\"hello\\""}' | |
| result = _extract_json_from_text(text) | |
| assert result is not None | |
| parsed = json.loads(result) | |
| assert parsed["quote"] == 'He said "hello"' | |
| def test_generate_sse_stop_chunk_with_usage_basic(): | |
| """ | |
| Test scenario: Generate basic SSE stop chunk | |
| Strategy: Pure function test, verify output format | |
| """ | |
| from api_utils.utils import generate_sse_stop_chunk_with_usage | |
| usage_stats = {"prompt_tokens": 100, "completion_tokens": 50, "total_tokens": 150} | |
| result = generate_sse_stop_chunk_with_usage( | |
| req_id="test123", model="gemini-1.5-pro", usage_stats=usage_stats, reason="stop" | |
| ) | |
| # Verify output is in SSE format | |
| assert isinstance(result, str) | |
| assert "data:" in result | |
| # Extract JSON part to verify | |
| # SSE format: data: {json}\n\n | |
| lines = result.strip().split("\n") | |
| data_line = None | |
| for line in lines: | |
| if line.startswith("data:"): | |
| data_line = line[5:].strip() # Remove "data:" prefix | |
| break | |
| if data_line and data_line != "[DONE]": | |
| try: | |
| chunk_data = json.loads(data_line) | |
| assert "choices" in chunk_data or "usage" in chunk_data | |
| except json.JSONDecodeError: | |
| # Some SSE chunks might not be JSON | |
| pass | |
| def test_generate_sse_stop_chunk_with_usage_custom_reason(): | |
| """ | |
| Test scenario: Use custom stop reason | |
| Verify: reason parameter passed correctly | |
| """ | |
| from api_utils.utils import generate_sse_stop_chunk_with_usage | |
| usage_stats = {"prompt_tokens": 10, "completion_tokens": 5, "total_tokens": 15} | |
| result = generate_sse_stop_chunk_with_usage( | |
| req_id="test456", | |
| model="gemini-2.0-flash-exp", | |
| usage_stats=usage_stats, | |
| reason="length", # Custom reason | |
| ) | |
| assert isinstance(result, str) | |
| assert "data:" in result | |
| # Verify contains stop info | |
| assert result # non-empty | |
| def test_generate_sse_stop_chunk_with_usage_empty_usage(): | |
| """ | |
| Test scenario: Empty usage statistics | |
| Verify: Able to handle empty dict | |
| """ | |
| from api_utils.utils import generate_sse_stop_chunk_with_usage | |
| result = generate_sse_stop_chunk_with_usage( | |
| req_id="test789", model="test-model", usage_stats={}, reason="stop" | |
| ) | |
| assert isinstance(result, str) | |
| assert "data:" in result | |