@@ -528,6 +528,50 @@ public void parameterizedHeaderExpandApi() throws Exception {
528528 .isEmpty ();
529529 }
530530
531+ @ Headers ("Authorization: {authHdr}" )
532+ interface ParameterizedHeaderBase {
533+ }
534+
535+ interface ParameterizedHeaderExpandInheritedApi extends ParameterizedHeaderBase {
536+ @ RequestLine ("GET /api/{zoneId}" )
537+ @ Headers ("Accept: application/json" )
538+ String getZoneAccept (@ Param ("zoneId" ) String vhost , @ Param ("authHdr" ) String authHdr );
539+
540+ @ RequestLine ("GET /api/{zoneId}" )
541+ String getZone (@ Param ("zoneId" ) String vhost , @ Param ("authHdr" ) String authHdr );
542+ }
543+
544+ @ Test
545+ public void parameterizedHeaderExpandApiBaseClass () throws Exception {
546+ List <MethodMetadata > mds = contract .parseAndValidatateMetadata (ParameterizedHeaderExpandInheritedApi .class );
547+
548+ Map <String , MethodMetadata > byConfigKey = new LinkedHashMap <String , MethodMetadata >();
549+ for (MethodMetadata m : mds ) {
550+ byConfigKey .put (m .configKey (), m );
551+ }
552+
553+ assertThat (byConfigKey )
554+ .containsOnlyKeys ("ParameterizedHeaderExpandInheritedApi#getZoneAccept(String,String)" ,
555+ "ParameterizedHeaderExpandInheritedApi#getZone(String,String)" );
556+
557+ MethodMetadata md = byConfigKey .get ("ParameterizedHeaderExpandInheritedApi#getZoneAccept(String,String)" );
558+ assertThat (md .returnType ())
559+ .isEqualTo (String .class );
560+ assertThat (md .template ())
561+ .hasHeaders (entry ("Authorization" , asList ("{authHdr}" )), entry ("Accept" , asList ("application/json" )));
562+ // Ensure that the authHdr expansion was properly detected and did not create a formParam
563+ assertThat (md .formParams ())
564+ .isEmpty ();
565+
566+ md = byConfigKey .get ("ParameterizedHeaderExpandInheritedApi#getZone(String,String)" );
567+ assertThat (md .returnType ())
568+ .isEqualTo (String .class );
569+ assertThat (md .template ())
570+ .hasHeaders (entry ("Authorization" , asList ("{authHdr}" )));
571+ assertThat (md .formParams ())
572+ .isEmpty ();
573+ }
574+
531575 private MethodMetadata parseAndValidateMetadata (Class <?> targetType , String method ,
532576 Class <?>... parameterTypes )
533577 throws NoSuchMethodException {
0 commit comments