@@ -414,6 +414,147 @@ public void WithContentHeaderNameAndValue_RequestWithMatchinHeader_ReturnsHttpRe
414414 Assert . IsType < HttpRequestMessageAsserter > ( result ) ;
415415 }
416416
417+ #nullable disable
418+ [ Theory ]
419+ [ InlineData ( null ) ]
420+ [ InlineData ( "" ) ]
421+ public void WithHeader_NullOrEmptyHeaderName_ThrowsArgumentNullException ( string headerName )
422+ {
423+ var sut = new HttpRequestMessageAsserter ( Enumerable . Empty < HttpRequestMessage > ( ) ) ;
424+
425+ var exception = Assert . Throws < ArgumentNullException > ( ( ) => sut . WithHeader ( headerName ) ) ;
426+
427+ Assert . Equal ( "headerName" , exception . ParamName ) ;
428+ }
429+ #nullable restore
430+
431+ [ Fact ]
432+ public void WithHeader_NoRequests_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage ( )
433+ {
434+ var sut = new HttpRequestMessageAsserter ( Enumerable . Empty < HttpRequestMessage > ( ) ) ;
435+
436+ var exception = Assert . Throws < HttpRequestMessageAssertionException > ( ( ) => sut . WithHeader ( "Content-Type" ) ) ;
437+
438+ Assert . Equal ( "Expected at least one request to be made with header 'Content-Type', but no requests were made." , exception . Message ) ;
439+ }
440+
441+ [ Fact ]
442+ public void WithHeader_NoMatchingRequests_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage ( )
443+ {
444+ var sut = new HttpRequestMessageAsserter ( new [ ] { new HttpRequestMessage ( ) } ) ;
445+
446+ var exception = Assert . Throws < HttpRequestMessageAssertionException > ( ( ) => sut . WithHeader ( "Content-Type" ) ) ;
447+
448+ Assert . Equal ( "Expected at least one request to be made with header 'Content-Type', but no requests were made." , exception . Message ) ;
449+ }
450+
451+ [ Theory ]
452+ [ InlineData ( "Host" ) ]
453+ [ InlineData ( "Content-Type" ) ]
454+ public void WithHeader_MatchingRequest_ReturnsHttpRequestMessageAsserter ( string headerName )
455+ {
456+ var request = new HttpRequestMessage ( ) ;
457+ request . Headers . Host = "host" ;
458+ request . Content = new StringContent ( "" ) ;
459+ var sut = new HttpRequestMessageAsserter ( new [ ] { request } ) ;
460+
461+ var result = sut . WithHeader ( headerName ) ;
462+
463+ Assert . NotNull ( result ) ;
464+ Assert . IsType < HttpRequestMessageAsserter > ( result ) ;
465+ }
466+
467+ #nullable disable
468+ [ Theory ]
469+ [ InlineData ( null ) ]
470+ [ InlineData ( "" ) ]
471+ public void WithHeaderNameAndValue_NullOrEmptyHeaderName_ThrowsArgumentNullException ( string headerName )
472+ {
473+ var sut = new HttpRequestMessageAsserter ( Enumerable . Empty < HttpRequestMessage > ( ) ) ;
474+
475+ var exception = Assert . Throws < ArgumentNullException > ( ( ) => sut . WithHeader ( headerName , "someValue" ) ) ;
476+
477+ Assert . Equal ( "headerName" , exception . ParamName ) ;
478+ }
479+
480+ [ Theory ]
481+ [ InlineData ( null ) ]
482+ [ InlineData ( "" ) ]
483+ public void WithHeaderNameAndValue_NullOrEmptyValue_ThrowsArgumentNullException ( string headerValue )
484+ {
485+ var sut = new HttpRequestMessageAsserter ( Enumerable . Empty < HttpRequestMessage > ( ) ) ;
486+
487+ var exception = Assert . Throws < ArgumentNullException > ( ( ) => sut . WithHeader ( "someHeader" , headerValue ) ) ;
488+
489+ Assert . Equal ( "headerValue" , exception . ParamName ) ;
490+ }
491+ #nullable restore
492+
493+ [ Fact ]
494+ public void WithHeaderNameAndValue_NoRequests_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage ( )
495+ {
496+ var sut = new HttpRequestMessageAsserter ( Enumerable . Empty < HttpRequestMessage > ( ) ) ;
497+
498+ var exception = Assert . Throws < HttpRequestMessageAssertionException > ( ( ) => sut . WithHeader ( "someHeader" , "someValue" ) ) ;
499+
500+ Assert . Equal ( "Expected at least one request to be made with header 'someHeader' and value 'someValue', but no requests were made." , exception . Message ) ;
501+ }
502+
503+ [ Fact ]
504+ public void WithHeaderNameAndValue_RequestWithoutHeaders_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage ( )
505+ {
506+ var request = new HttpRequestMessage ( ) ;
507+ var sut = new HttpRequestMessageAsserter ( new [ ] { request } ) ;
508+
509+ var exception = Assert . Throws < HttpRequestMessageAssertionException > ( ( ) => sut . WithHeader ( "Content-Type" , "application/json" ) ) ;
510+
511+ Assert . Equal ( "Expected at least one request to be made with header 'Content-Type' and value 'application/json', but no requests were made." , exception . Message ) ;
512+ }
513+
514+ [ Fact ]
515+ public void WithHeaderNameAndValue_RequestWithNotMatchingHeaderName_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage ( )
516+ {
517+ var request = new HttpRequestMessage ( ) ;
518+ request . Headers . Host = "test" ;
519+ request . Content = new StringContent ( "" ) ;
520+ var sut = new HttpRequestMessageAsserter ( new [ ] { request } ) ;
521+
522+ var exception = Assert . Throws < HttpRequestMessageAssertionException > ( ( ) => sut . WithHeader ( "Content-Disposition" , "inline" ) ) ;
523+
524+ Assert . Equal ( "Expected at least one request to be made with header 'Content-Disposition' and value 'inline', but no requests were made." , exception . Message ) ;
525+ }
526+
527+ [ Theory ]
528+ [ InlineData ( "Content-Type" , "application/json" ) ]
529+ [ InlineData ( "Host" , "Test" ) ]
530+ public void WithHeaderNameAndValue_RequestWithNotMatchingHeaderValue_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage ( string name , string value )
531+ {
532+ var request = new HttpRequestMessage ( ) ;
533+ request . Headers . Host = "example" ;
534+ request . Content = new StringContent ( "" ) ;
535+ var sut = new HttpRequestMessageAsserter ( new [ ] { request } ) ;
536+
537+ var exception = Assert . Throws < HttpRequestMessageAssertionException > ( ( ) => sut . WithHeader ( name , value ) ) ;
538+
539+ Assert . Equal ( $ "Expected at least one request to be made with header '{ name } ' and value '{ value } ', but no requests were made.", exception . Message ) ;
540+ }
541+
542+ [ Theory ]
543+ [ InlineData ( "Content-Type" , "application/json" ) ]
544+ [ InlineData ( "Host" , "Test" ) ]
545+ public void WithHeaderNameAndValue_RequestWithMatchinHeader_ReturnsHttpRequestMessageAssert ( string name , string value )
546+ {
547+ var request = new HttpRequestMessage ( ) ;
548+ request . Headers . Host = "Test" ;
549+ request . Content = new StringContent ( "" , Encoding . UTF8 , "application/json" ) ;
550+ var sut = new HttpRequestMessageAsserter ( new [ ] { request } ) ;
551+
552+ var result = sut . WithHeader ( name , value ) ;
553+
554+ Assert . NotNull ( result ) ;
555+ Assert . IsType < HttpRequestMessageAsserter > ( result ) ;
556+ }
557+
417558 [ Fact ]
418559 public void Times_ValueLessThan0_ThrowsArgumentException ( )
419560 {
0 commit comments