@@ -37,13 +37,20 @@ def build_jwt_with_duplicate_header(duplicate_header_json, payload_json = '{"sub
3737 end
3838
3939 context 'with raise_on_duplicate_keys!' do
40- it 'raises DuplicateKeyError' do
40+ it 'raises DuplicateKeyError' , if : JWT :: JSON . supports_duplicate_key_detection? do
4141 token = JWT ::EncodedToken . new ( duplicate_payload_jwt )
4242 token . raise_on_duplicate_keys!
4343 expect do
4444 token . unverified_payload
4545 end . to raise_error ( JWT ::DuplicateKeyError , /duplicate key/ )
4646 end
47+
48+ it 'raises UnsupportedError' , unless : JWT ::JSON . supports_duplicate_key_detection? do
49+ token = JWT ::EncodedToken . new ( duplicate_payload_jwt )
50+ expect do
51+ token . raise_on_duplicate_keys!
52+ end . to raise_error ( JWT ::UnsupportedError , /JSON gem >= 2\. 13\. 0/ )
53+ end
4754 end
4855 end
4956
@@ -58,17 +65,24 @@ def build_jwt_with_duplicate_header(duplicate_header_json, payload_json = '{"sub
5865 end
5966
6067 context 'with raise_on_duplicate_keys!' do
61- it 'raises DuplicateKeyError for header' do
68+ it 'raises DuplicateKeyError for header' , if : JWT :: JSON . supports_duplicate_key_detection? do
6269 token = JWT ::EncodedToken . new ( duplicate_header_jwt )
6370 token . raise_on_duplicate_keys!
6471 expect do
6572 token . header
6673 end . to raise_error ( JWT ::DuplicateKeyError , /duplicate key/ )
6774 end
75+
76+ it 'raises UnsupportedError' , unless : JWT ::JSON . supports_duplicate_key_detection? do
77+ token = JWT ::EncodedToken . new ( duplicate_header_jwt )
78+ expect do
79+ token . raise_on_duplicate_keys!
80+ end . to raise_error ( JWT ::UnsupportedError , /JSON gem >= 2\. 13\. 0/ )
81+ end
6882 end
6983 end
7084
71- describe 'chaining' do
85+ describe 'chaining' , if : JWT :: JSON . supports_duplicate_key_detection? do
7286 let ( :valid_jwt ) { build_jwt_with_duplicate_payload ( '{"sub":"user"}' ) }
7387
7488 it 'returns self for method chaining' do
@@ -77,7 +91,7 @@ def build_jwt_with_duplicate_header(duplicate_header_json, payload_json = '{"sub
7791 end
7892 end
7993
80- describe 'valid tokens' do
94+ describe 'valid tokens' , if : JWT :: JSON . supports_duplicate_key_detection? do
8195 let ( :valid_jwt ) { build_jwt_with_duplicate_payload ( '{"sub":"user","name":"John"}' ) }
8296
8397 it 'parses valid JSON without duplicates' do
@@ -92,13 +106,20 @@ def build_jwt_with_duplicate_header(duplicate_header_json, payload_json = '{"sub
92106 let ( :multiple_duplicates_jwt ) { build_jwt_with_duplicate_payload ( '{"a":1,"b":2,"a":3,"b":4}' ) }
93107
94108 context 'with raise_on_duplicate_keys!' do
95- it 'raises DuplicateKeyError for the first duplicate found' do
109+ it 'raises DuplicateKeyError for the first duplicate found' , if : JWT :: JSON . supports_duplicate_key_detection? do
96110 token = JWT ::EncodedToken . new ( multiple_duplicates_jwt )
97111 token . raise_on_duplicate_keys!
98112 expect do
99113 token . unverified_payload
100114 end . to raise_error ( JWT ::DuplicateKeyError , /duplicate key/ )
101115 end
116+
117+ it 'raises UnsupportedError' , unless : JWT ::JSON . supports_duplicate_key_detection? do
118+ token = JWT ::EncodedToken . new ( multiple_duplicates_jwt )
119+ expect do
120+ token . raise_on_duplicate_keys!
121+ end . to raise_error ( JWT ::UnsupportedError , /JSON gem >= 2\. 13\. 0/ )
122+ end
102123 end
103124 end
104125end
0 commit comments