From 7669fec5210b89abf9e0e6d913e4437db817093b Mon Sep 17 00:00:00 2001 From: Shubham Padkonde Date: Sun, 4 Oct 2026 13:26:56 +0530 Subject: [PATCH] fix(json): distinguish null from the none enum member --- .../json_parse_node.py | 2 ++ .../json/tests/unit/test_nullable_enum.py | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 packages/serialization/json/tests/unit/test_nullable_enum.py diff --git a/packages/serialization/json/kiota_serialization_json/json_parse_node.py b/packages/serialization/json/kiota_serialization_json/json_parse_node.py index 67ecbd4b..b212d204 100644 --- a/packages/serialization/json/kiota_serialization_json/json_parse_node.py +++ b/packages/serialization/json/kiota_serialization_json/json_parse_node.py @@ -185,6 +185,8 @@ def get_enum_value(self, enum_class: K) -> Optional[K]: Returns: Optional[K]: The enum value of the node """ + if self._json_node is None: + return None raw_key = str(self._json_node) if not raw_key: return None diff --git a/packages/serialization/json/tests/unit/test_nullable_enum.py b/packages/serialization/json/tests/unit/test_nullable_enum.py new file mode 100644 index 00000000..0f795ebd --- /dev/null +++ b/packages/serialization/json/tests/unit/test_nullable_enum.py @@ -0,0 +1,28 @@ +import json +from enum import Enum + +import pytest + +from kiota_serialization_json.json_parse_node import JsonParseNode + + +class RiskLevel(Enum): + None_ = 'none' + Low = 'low' + + +@pytest.mark.parametrize( + 'payload, expected', [ + ('null', None), + ('"none"', RiskLevel.None_), + ('"low"', RiskLevel.Low), + ] +) +def test_nullable_enum_distinguishes_null_from_none_member(payload, expected): + node = JsonParseNode(json.loads(payload)) + assert node.get_enum_value(RiskLevel) is expected + + +def test_nullable_enum_collection_preserves_null_entries(): + node = JsonParseNode(json.loads('["none", null, "low"]')) + assert node.get_collection_of_enum_values(RiskLevel) == [RiskLevel.None_, None, RiskLevel.Low]