# #region Test.PreviewResponseParser [C:3] [TYPE Module] [SEMANTICS test, translate, response, parser, data, extract] # @BRIEF Tests for preview_response_parser.py — extract_data_rows. # @RELATION BINDS_TO -> [preview_response_parser] import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "src")) import pytest from src.plugins.translate.preview_response_parser import extract_data_rows class TestExtractDataRows: """extract_data_rows — extract data rows from Superset chart data API response.""" def test_result_list_with_data(self): """result is a list with item containing data key.""" response = { "result": [ {"data": [{"col1": "val1"}, {"col1": "val2"}]} ] } result = extract_data_rows(response) assert len(result) == 2 assert result[0]["col1"] == "val1" def test_result_dict_with_data(self): """result is a dict with data key.""" response = { "result": {"data": [{"col1": "val1"}]} } result = extract_data_rows(response) assert len(result) == 1 def test_fallback_to_response_data(self): """Fallback to response.data when result has no data.""" response = { "data": [{"col1": "val1"}] } result = extract_data_rows(response) assert len(result) == 1 def test_result_list_returned_directly(self): """When result is a list with no data key, return it.""" response = { "result": [{"col1": "val1"}, {"col1": "val2"}] } result = extract_data_rows(response) assert len(result) == 2 def test_empty_result_list(self): """Empty result list returns empty list.""" response = {"result": []} result = extract_data_rows(response) assert result == [] def test_empty_data_list(self): """Empty data list falls back to returning result list.""" response = { "result": [{"data": []}] } result = extract_data_rows(response) # Returns the result list as fallback assert result == [{"data": []}] def test_no_result_or_data_key(self): """No result or data key returns empty list.""" response = {"other": "value"} result = extract_data_rows(response) assert result == [] def test_result_not_list_or_dict(self): """Result is neither list nor dict.""" response = {"result": "string_value"} result = extract_data_rows(response) assert result == [] def test_result_list_item_no_data(self): """Result list item has no data key, falls back to result list.""" response = { "result": [{"other": "value"}] } result = extract_data_rows(response) # Returns the result list as fallback assert result == [{"other": "value"}] def test_result_dict_data_empty_list(self): """Result dict data is empty list.""" response = { "result": {"data": []} } result = extract_data_rows(response) assert result == []