diff --git a/gforms/forms_tools.py b/gforms/forms_tools.py index 9575e4f..059a585 100644 --- a/gforms/forms_tools.py +++ b/gforms/forms_tools.py @@ -17,14 +17,14 @@ from core.utils import handle_http_errors logger = logging.getLogger(__name__) -def _extract_option_values(options: List[Dict[str, Any]]) -> List[str]: - """Extract non-empty option values from Forms choice option objects.""" - values: List[str] = [] - for option in options: - value = option.get("value") - if value: - values.append(value) - return values +def _extract_option_values(options: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + """Extract valid option objects from Forms choice option objects. + + Returns the full option dicts (preserving fields like ``isOther``, + ``image``, ``goToAction``, and ``goToSectionId``) while filtering + out entries that lack a truthy ``value``. + """ + return [option for option in options if option.get("value")] def _get_question_type(question: Dict[str, Any]) -> str: @@ -196,18 +196,18 @@ async def get_form(service, user_google_email: str, form_id: str) -> str: _serialize_form_item(item, i) for i, item in enumerate(items, 1) ] - questions_summary = [] + items_summary = [] for serialized_item in serialized_items: item_index = serialized_item["index"] - item_title = serialized_item.get("title", f"Question {item_index}") + item_title = serialized_item.get("title", f"Item {item_index}") item_type = serialized_item.get("type", "UNKNOWN") required_text = " (Required)" if serialized_item.get("required") else "" - questions_summary.append( + items_summary.append( f" {item_index}. {item_title} [{item_type}]{required_text}" ) - questions_text = ( - "\n".join(questions_summary) if questions_summary else " No questions found" + items_summary_text = ( + "\n".join(items_summary) if items_summary else " No items found" ) items_text = json.dumps(serialized_items, indent=2) if serialized_items else "[]" @@ -218,8 +218,8 @@ async def get_form(service, user_google_email: str, form_id: str) -> str: - Form ID: {form_id} - Edit URL: {edit_url} - Responder URL: {responder_url} -- Questions ({len(items)} total): -{questions_text} +- Items ({len(items)} total): +{items_summary_text} - Items (structured): {items_text}""" diff --git a/tests/gforms/test_forms_tools.py b/tests/gforms/test_forms_tools.py index 9213187..97e5284 100644 --- a/tests/gforms/test_forms_tools.py +++ b/tests/gforms/test_forms_tools.py @@ -255,7 +255,7 @@ def test_serialize_form_item_choice_question_includes_ids_and_options(): assert serialized["type"] == "RADIO" assert serialized["questionId"] == "q_123" assert serialized["required"] is True - assert serialized["options"] == ["Red", "Blue"] + assert serialized["options"] == [{"value": "Red"}, {"value": "Blue"}] def test_serialize_form_item_grid_includes_row_and_column_structure(): @@ -284,7 +284,7 @@ def test_serialize_form_item_grid_includes_row_and_column_structure(): assert serialized["index"] == 2 assert serialized["type"] == "GRID" - assert serialized["grid"]["columns"] == ["Never", "Often"] + assert serialized["grid"]["columns"] == [{"value": "Never"}, {"value": "Often"}] assert serialized["grid"]["rows"] == [ {"title": "Laundry", "questionId": "row_q1", "required": True}, {"title": "Dishes", "questionId": "row_q2", "required": False},