33import json
44
55from lbry .schema .claim import Claim , Stream , Collection
6- from lbry .schema .attrs import StreamExtension
6+ from lbry .schema .attrs import StreamExtension , Struct
77from google .protobuf .struct_pb2 import Struct as StructMessage
88from lbry .schema .types .v2 .extension_pb2 import Extension as ExtensionMessage
99from lbry .error import InputValueIsNoneError
@@ -253,14 +253,17 @@ def setUp(self):
253253
254254 def test_extension_properties (self ):
255255 self .maxDiff = None
256+
256257 # Verify schema.
257258 self .assertEqual (self .ext1 .schema , 'cad' )
258259 self .assertEqual (self .ext2 .schema , 'music' )
259260 self .assertEqual (self .ext3 .schema , 'lit' )
261+
260262 # Verify to_dict().
261263 self .assertEqual (self .ext1 .to_dict (), self .ext1_dict )
262264 self .assertEqual (self .ext2 .to_dict (), self .ext2_dict )
263265 self .assertEqual (self .ext3 .to_dict (), self .ext3_dict )
266+
264267 # Decode from dict.
265268 parsed1 = StreamExtension (None , ExtensionMessage ())
266269 parsed1 .from_value (self .ext1_dict )
@@ -271,6 +274,7 @@ def test_extension_properties(self):
271274 parsed3 = StreamExtension (None , ExtensionMessage ())
272275 parsed3 .from_value (self .ext3_dict )
273276 self .assertEqual (parsed3 .to_dict (), self .ext3_dict )
277+
274278 # Decode from str (JSON).
275279 parsed1 = StreamExtension (None , ExtensionMessage ())
276280 parsed1 .from_value (self .ext1_json )
@@ -282,6 +286,35 @@ def test_extension_properties(self):
282286 parsed3 .from_value (self .ext3_json )
283287 self .assertEqual (parsed3 .to_dict (), self .ext3_dict )
284288
289+ # Verify Mapping functionality.
290+ self .assertEqual (self .ext1 .unpacked ['material' ], ['PLA1' , 'PLA2' ])
291+ self .assertEqual (self .ext1 .unpacked ['cubic_cm' ], 5 )
292+ self .assertEqual (self .ext2 .unpacked ['venue' ], 'studio' )
293+ self .assertEqual (self .ext2 .unpacked ['genre' ], ['metal' ])
294+ self .assertEqual (self .ext2 .unpacked ['instrument' ], ['drum' , 'cymbal' , 'guitar' ])
295+ self .assertEqual (self .ext3 .unpacked ['pages' ], 185 )
296+ self .assertEqual (self .ext3 .unpacked ['genre' ], ['fiction' , 'mystery' ])
297+ self .assertEqual (self .ext3 .unpacked ['format' ], 'epub' )
298+
299+ # Verify Iterable functionality.
300+ self .assertEqual (len (self .ext1 .unpacked ), 2 )
301+ for k , v in self .ext1 .unpacked .items ():
302+ self .assertIn (k , self .ext1 .unpacked )
303+ self .assertTrue (isinstance (v , (str , list , float )), type (v ))
304+ self .assertEqual (v , self .ext1 .unpacked [k ])
305+ self .assertEqual (len (self .ext2 .unpacked ), 3 )
306+ for k , v in self .ext2 .unpacked .items ():
307+ self .assertIn (k , self .ext2 .unpacked )
308+ self .assertTrue (isinstance (v , (str , list , float )), type (v ))
309+ self .assertEqual (v , self .ext2 .unpacked [k ])
310+ self .assertEqual (len (self .ext3 .unpacked ), 3 )
311+ for k , v in self .ext3 .unpacked .items ():
312+ self .assertIn (k , self .ext3 .unpacked )
313+ self .assertTrue (isinstance (v , (str , list , float )), type (v ))
314+ self .assertEqual (v , self .ext3 .unpacked [k ])
315+
316+
317+
285318 def test_extension_clear_field (self ):
286319 self .maxDiff = None
287320 ext = StreamExtension (None , ExtensionMessage ())
0 commit comments