5656 */
5757static NSString *const kTestAdditionalHeaderValue = @" 2" ;
5858
59+ /* ! @brief Test key for the @c additionalHeaders property.
60+ */
61+ static NSString *const kTestAdditionalHeaderKey2 = @" C" ;
62+
63+ /* ! @brief Test value for the @c additionalHeaders property.
64+ */
65+ static NSString *const kTestAdditionalHeaderValue2 = @" 3" ;
66+
5967@implementation OIDTokenRequestTests
6068
6169+ (OIDTokenRequest *)testInstance {
@@ -154,6 +162,32 @@ + (OIDTokenRequest *)testInstanceRefresh {
154162 return request;
155163}
156164
165+ + (OIDTokenRequest *)testInstanceAdditionalHeaders {
166+ OIDAuthorizationResponse *authResponse = [OIDAuthorizationResponseTests testInstance ];
167+ NSArray <NSString *> *scopesArray =
168+ [OIDScopeUtilities scopesArrayWithString: authResponse.request.scope];
169+ NSDictionary *additionalParameters =
170+ @{ kTestAdditionalParameterKey : kTestAdditionalParameterValue };
171+ NSDictionary *additionalHeaders = @{
172+ kTestAdditionalHeaderKey : kTestAdditionalHeaderValue ,
173+ kTestAdditionalHeaderKey2 : kTestAdditionalHeaderValue2
174+ };
175+
176+ OIDTokenRequest *request =
177+ [[OIDTokenRequest alloc ] initWithConfiguration: authResponse.request.configuration
178+ grantType: OIDGrantTypeAuthorizationCode
179+ authorizationCode: authResponse.authorizationCode
180+ redirectURL: authResponse.request.redirectURL
181+ clientID: authResponse.request.clientID
182+ clientSecret: authResponse.request.clientSecret
183+ scopes: scopesArray
184+ refreshToken: kRefreshTokenTestValue
185+ codeVerifier: authResponse.request.codeVerifier
186+ additionalParameters: additionalParameters
187+ additionalHeaders: additionalHeaders];
188+ return request;
189+ }
190+
157191/* ! @brief Tests the @c NSCopying implementation by round-tripping an instance through the copying
158192 process and checking to make sure the source and destination instances are equivalent.
159193 */
@@ -239,6 +273,10 @@ - (void)testSecureCoding {
239273 XCTAssertNotNil (request.additionalHeaders , @" " );
240274 XCTAssertEqualObjects (request.additionalHeaders [kTestAdditionalHeaderKey ],
241275 kTestAdditionalHeaderValue , @" " );
276+
277+ NSURLRequest *urlRequest = [request URLRequest ];
278+ XCTAssertEqualObjects ([urlRequest.allHTTPHeaderFields objectForKey: kTestAdditionalHeaderKey ],
279+ kTestAdditionalHeaderValue );
242280
243281 NSData *data = [NSKeyedArchiver archivedDataWithRootObject: request];
244282 OIDTokenRequest *requestCopy = [NSKeyedUnarchiver unarchiveObjectWithData: data];
@@ -263,6 +301,10 @@ - (void)testSecureCoding {
263301 XCTAssertNotNil (requestCopy.additionalHeaders , @" " );
264302 XCTAssertEqualObjects (requestCopy.additionalHeaders [kTestAdditionalHeaderKey ],
265303 kTestAdditionalHeaderValue , @" " );
304+
305+ NSURLRequest *urlrequestCopy = [requestCopy URLRequest ];
306+ XCTAssertEqualObjects ([urlrequestCopy.allHTTPHeaderFields objectForKey: kTestAdditionalHeaderKey ],
307+ kTestAdditionalHeaderValue );
266308}
267309
268310- (void )testURLRequestNoClientAuth {
@@ -302,6 +344,17 @@ - (void)testAuthorizationCodeNullRedirectURL {
302344 additionalHeaders: additionalHeaders], @" " );
303345}
304346
347+ - (void )testThatAdditionalHeadersAreInTokenRequest {
348+ OIDTokenRequest *request = [[self class ] testInstanceAdditionalHeaders ];
349+ NSURLRequest * urlRequest = [request URLRequest ];
350+
351+ XCTAssertEqualObjects ([urlRequest.allHTTPHeaderFields objectForKey: kTestAdditionalHeaderKey ],
352+ kTestAdditionalHeaderValue );
353+
354+ XCTAssertEqualObjects ([urlRequest.allHTTPHeaderFields objectForKey: kTestAdditionalHeaderKey2 ],
355+ kTestAdditionalHeaderValue2 );
356+ }
357+
305358@end
306359
307360#pragma GCC diagnostic pop
0 commit comments