1+ from typing import cast
2+
13import pytest
24
35from rsocket .exceptions import RSocketError
46from rsocket .extensions .composite_metadata import CompositeMetadata
5- from rsocket .extensions .helpers import composite , data_mime_type , data_mime_types
7+ from rsocket .extensions .helpers import composite , data_mime_type , data_mime_types , route , authenticate_simple , \
8+ metadata_item
69from rsocket .extensions .mimetypes import WellKnownMimeTypes
710from rsocket .extensions .routing import RoutingMetadata
11+ from rsocket .extensions .stream_data_mimetype import StreamDataMimetypes , StreamDataMimetype
812
913
1014def test_tag_composite_metadata_too_long ():
@@ -23,7 +27,8 @@ def test_data_mime_type_composite_metadata():
2327 composite_metadata .parse (data )
2428
2529 assert len (composite_metadata .items ) == 1
26- assert composite_metadata .items [0 ].data_encoding == b'application/json'
30+ metadata_item_1 = cast (StreamDataMimetype , composite_metadata .items [0 ])
31+ assert metadata_item_1 .data_encoding == b'application/json'
2732
2833 assert composite_metadata .serialize () == data
2934
@@ -38,7 +43,36 @@ def test_data_mime_types_composite_metadata():
3843 composite_metadata .parse (data )
3944
4045 assert len (composite_metadata .items ) == 1
41- assert composite_metadata .items [0 ].data_encodings [0 ] == b'application/json'
42- assert composite_metadata .items [0 ].data_encodings [1 ] == b'text/xml'
46+ from typing import cast
47+ metadata_item_1 = cast (StreamDataMimetypes , composite_metadata .items [0 ])
48+
49+ assert metadata_item_1 .data_encodings [0 ] == b'application/json'
50+ assert metadata_item_1 .data_encodings [1 ] == b'text/xml'
4351
4452 assert composite_metadata .serialize () == data
53+
54+
55+ def test_composite_metadata_find_by_mimetype ():
56+ data = composite (
57+ data_mime_types (
58+ WellKnownMimeTypes .APPLICATION_JSON ,
59+ WellKnownMimeTypes .TEXT_XML
60+ ),
61+ route ('login' ),
62+ authenticate_simple ('abcd' , '1234' ),
63+ metadata_item (b'some_data_1' , WellKnownMimeTypes .TEXT_PLAIN ),
64+ metadata_item (b'some_data_2' , WellKnownMimeTypes .TEXT_PLAIN ),
65+ metadata_item (b'{"key":1}' , WellKnownMimeTypes .APPLICATION_JSON ),
66+ )
67+
68+ composite_metadata = CompositeMetadata ()
69+ composite_metadata .parse (data )
70+
71+ plain_text = composite_metadata .find_by_mimetype (WellKnownMimeTypes .TEXT_PLAIN )
72+
73+ assert len (plain_text ) == 2
74+ assert plain_text [0 ].content == b'some_data_1'
75+ assert plain_text [1 ].content == b'some_data_2'
76+
77+ authentication_items = composite_metadata .find_by_mimetype (WellKnownMimeTypes .MESSAGE_RSOCKET_AUTHENTICATION )
78+ assert authentication_items [0 ].authentication .password == b'1234'
0 commit comments