|
| 1 | +import json |
1 | 2 | from copy import (
|
2 | 3 | copy,
|
3 | 4 | deepcopy,
|
@@ -190,6 +191,37 @@ class CasingTest(betterproto.Message):
|
190 | 191 |
|
191 | 192 | assert test == CasingTest(1, 2, 3, 4)
|
192 | 193 |
|
| 194 | + # Serializing should be strict. |
| 195 | + assert json.loads(test.to_json()) == { |
| 196 | + "pascalCase": 1, |
| 197 | + "camelCase": 2, |
| 198 | + "snakeCase": 3, |
| 199 | + "kabobCase": 4, |
| 200 | + } |
| 201 | + |
| 202 | + assert json.loads(test.to_json(casing=betterproto.Casing.SNAKE)) == { |
| 203 | + "pascal_case": 1, |
| 204 | + "camel_case": 2, |
| 205 | + "snake_case": 3, |
| 206 | + "kabob_case": 4, |
| 207 | + } |
| 208 | + |
| 209 | + |
| 210 | +def test_dict_casing(): |
| 211 | + @dataclass |
| 212 | + class CasingTest(betterproto.Message): |
| 213 | + pascal_case: int = betterproto.int32_field(1) |
| 214 | + camel_case: int = betterproto.int32_field(2) |
| 215 | + snake_case: int = betterproto.int32_field(3) |
| 216 | + kabob_case: int = betterproto.int32_field(4) |
| 217 | + |
| 218 | + # Parsing should accept almost any input |
| 219 | + test = CasingTest().from_dict( |
| 220 | + {"PascalCase": 1, "camelCase": 2, "snake_case": 3, "kabob-case": 4} |
| 221 | + ) |
| 222 | + |
| 223 | + assert test == CasingTest(1, 2, 3, 4) |
| 224 | + |
193 | 225 | # Serializing should be strict.
|
194 | 226 | assert test.to_dict() == {
|
195 | 227 | "pascalCase": 1,
|
@@ -233,6 +265,37 @@ class Request(betterproto.Message):
|
233 | 265 | assert Request().parse(b"\n\x00").flag is False
|
234 | 266 |
|
235 | 267 |
|
| 268 | +def test_to_json_default_values(): |
| 269 | + @dataclass |
| 270 | + class TestMessage(betterproto.Message): |
| 271 | + some_int: int = betterproto.int32_field(1) |
| 272 | + some_double: float = betterproto.double_field(2) |
| 273 | + some_str: str = betterproto.string_field(3) |
| 274 | + some_bool: bool = betterproto.bool_field(4) |
| 275 | + |
| 276 | + # Empty dict |
| 277 | + test = TestMessage().from_dict({}) |
| 278 | + |
| 279 | + assert json.loads(test.to_json(include_default_values=True)) == { |
| 280 | + "someInt": 0, |
| 281 | + "someDouble": 0.0, |
| 282 | + "someStr": "", |
| 283 | + "someBool": False, |
| 284 | + } |
| 285 | + |
| 286 | + # All default values |
| 287 | + test = TestMessage().from_dict( |
| 288 | + {"someInt": 0, "someDouble": 0.0, "someStr": "", "someBool": False} |
| 289 | + ) |
| 290 | + |
| 291 | + assert json.loads(test.to_json(include_default_values=True)) == { |
| 292 | + "someInt": 0, |
| 293 | + "someDouble": 0.0, |
| 294 | + "someStr": "", |
| 295 | + "someBool": False, |
| 296 | + } |
| 297 | + |
| 298 | + |
236 | 299 | def test_to_dict_default_values():
|
237 | 300 | @dataclass
|
238 | 301 | class TestMessage(betterproto.Message):
|
|
0 commit comments