@@ -567,47 +567,123 @@ public async Task CorsRequest_SetsResponseHeader_IfExceptionHandlerClearsRespons
567567 }
568568
569569 [ Fact ]
570- public void ResolveCorsPolicyName_NoEndpoint_UseDefaultPolicyName ( )
570+ public async Task Invoke_HasEndpointWithNoMetadata_RunsCors ( )
571571 {
572572 // Arrange
573- var middleware = new CorsMiddleware ( c => Task . CompletedTask , Mock . Of < ICorsService > ( ) , Mock . Of < ILoggerFactory > ( ) , "DefaultPolicyName" ) ;
574- var context = new DefaultHttpContext ( ) ;
573+ var corsService = Mock . Of < ICorsService > ( ) ;
574+ var mockProvider = new Mock < ICorsPolicyProvider > ( ) ;
575+ var loggerFactory = NullLoggerFactory . Instance ;
576+ mockProvider . Setup ( o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , It . IsAny < string > ( ) ) )
577+ . Returns ( Task . FromResult < CorsPolicy > ( null ) )
578+ . Verifiable ( ) ;
579+
580+ var middleware = new CorsMiddleware (
581+ Mock . Of < RequestDelegate > ( ) ,
582+ corsService ,
583+ loggerFactory ,
584+ "DefaultPolicyName" ) ;
585+
586+ var httpContext = new DefaultHttpContext ( ) ;
587+ httpContext . SetEndpoint ( new Endpoint ( c => Task . CompletedTask , EndpointMetadataCollection . Empty , "Test endpoint" ) ) ;
588+ httpContext . Request . Headers . Add ( CorsConstants . Origin , new [ ] { "http://example.com" } ) ;
575589
576590 // Act
577- var resolvedPolicyName = middleware . ResolveCorsPolicyName ( context ) ;
591+ await middleware . Invoke ( httpContext , mockProvider . Object ) ;
578592
579593 // Assert
580- Assert . Equal ( "DefaultPolicyName" , resolvedPolicyName ) ;
594+ mockProvider . Verify (
595+ o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , "DefaultPolicyName" ) ,
596+ Times . Once ) ;
581597 }
582598
583599 [ Fact ]
584- public void ResolveCorsPolicyName_EndpointWithoutMetadata_UseDefaultPolicyName ( )
600+ public async Task Invoke_HasEndpointWithEnableMetadata_RunsCorsWithPolicyName ( )
585601 {
586602 // Arrange
587- var middleware = new CorsMiddleware ( c => Task . CompletedTask , Mock . Of < ICorsService > ( ) , Mock . Of < ILoggerFactory > ( ) , "DefaultPolicyName" ) ;
588- var context = new DefaultHttpContext ( ) ;
589- context . SetEndpoint ( new Endpoint ( c => Task . CompletedTask , EndpointMetadataCollection . Empty , "Test endpoint" ) ) ;
603+ var corsService = Mock . Of < ICorsService > ( ) ;
604+ var mockProvider = new Mock < ICorsPolicyProvider > ( ) ;
605+ var loggerFactory = NullLoggerFactory . Instance ;
606+ mockProvider . Setup ( o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , It . IsAny < string > ( ) ) )
607+ . Returns ( Task . FromResult < CorsPolicy > ( null ) )
608+ . Verifiable ( ) ;
609+
610+ var middleware = new CorsMiddleware (
611+ Mock . Of < RequestDelegate > ( ) ,
612+ corsService ,
613+ loggerFactory ,
614+ "DefaultPolicyName" ) ;
615+
616+ var httpContext = new DefaultHttpContext ( ) ;
617+ httpContext . SetEndpoint ( new Endpoint ( c => Task . CompletedTask , new EndpointMetadataCollection ( new EnableCorsAttribute ( "MetadataPolicyName" ) ) , "Test endpoint" ) ) ;
618+ httpContext . Request . Headers . Add ( CorsConstants . Origin , new [ ] { "http://example.com" } ) ;
590619
591620 // Act
592- var resolvedPolicyName = middleware . ResolveCorsPolicyName ( context ) ;
621+ await middleware . Invoke ( httpContext , mockProvider . Object ) ;
593622
594623 // Assert
595- Assert . Equal ( "DefaultPolicyName" , resolvedPolicyName ) ;
624+ mockProvider . Verify (
625+ o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , "MetadataPolicyName" ) ,
626+ Times . Once ) ;
596627 }
597628
598629 [ Fact ]
599- public void ResolveCorsPolicyName_EndpointWithMetadata_UseDefaultPolicyName ( )
630+ public async Task Invoke_HasEndpointWithDisableMetadata_SkipCors ( )
600631 {
601632 // Arrange
602- var middleware = new CorsMiddleware ( c => Task . CompletedTask , Mock . Of < ICorsService > ( ) , Mock . Of < ILoggerFactory > ( ) , "DefaultPolicyName" ) ;
603- var context = new DefaultHttpContext ( ) ;
604- context . SetEndpoint ( new Endpoint ( c => Task . CompletedTask , new EndpointMetadataCollection ( new EnableCorsAttribute ( "MetadataPolicyName" ) ) , "Test endpoint" ) ) ;
633+ var corsService = Mock . Of < ICorsService > ( ) ;
634+ var mockProvider = new Mock < ICorsPolicyProvider > ( ) ;
635+ var loggerFactory = NullLoggerFactory . Instance ;
636+ mockProvider . Setup ( o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , It . IsAny < string > ( ) ) )
637+ . Returns ( Task . FromResult < CorsPolicy > ( null ) )
638+ . Verifiable ( ) ;
639+
640+ var middleware = new CorsMiddleware (
641+ Mock . Of < RequestDelegate > ( ) ,
642+ corsService ,
643+ loggerFactory ,
644+ "DefaultPolicyName" ) ;
645+
646+ var httpContext = new DefaultHttpContext ( ) ;
647+ httpContext . SetEndpoint ( new Endpoint ( c => Task . CompletedTask , new EndpointMetadataCollection ( new DisableCorsAttribute ( ) ) , "Test endpoint" ) ) ;
648+ httpContext . Request . Headers . Add ( CorsConstants . Origin , new [ ] { "http://example.com" } ) ;
649+
650+ // Act
651+ await middleware . Invoke ( httpContext , mockProvider . Object ) ;
652+
653+ // Assert
654+ mockProvider . Verify (
655+ o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , It . IsAny < string > ( ) ) ,
656+ Times . Never ) ;
657+ }
658+
659+ [ Fact ]
660+ public async Task Invoke_HasEndpointWithMutlipleMetadata_SkipCorsBecauseOfMetadataOrder ( )
661+ {
662+ // Arrange
663+ var corsService = Mock . Of < ICorsService > ( ) ;
664+ var mockProvider = new Mock < ICorsPolicyProvider > ( ) ;
665+ var loggerFactory = NullLoggerFactory . Instance ;
666+ mockProvider . Setup ( o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , It . IsAny < string > ( ) ) )
667+ . Returns ( Task . FromResult < CorsPolicy > ( null ) )
668+ . Verifiable ( ) ;
669+
670+ var middleware = new CorsMiddleware (
671+ Mock . Of < RequestDelegate > ( ) ,
672+ corsService ,
673+ loggerFactory ,
674+ "DefaultPolicyName" ) ;
675+
676+ var httpContext = new DefaultHttpContext ( ) ;
677+ httpContext . SetEndpoint ( new Endpoint ( c => Task . CompletedTask , new EndpointMetadataCollection ( new EnableCorsAttribute ( "MetadataPolicyName" ) , new DisableCorsAttribute ( ) ) , "Test endpoint" ) ) ;
678+ httpContext . Request . Headers . Add ( CorsConstants . Origin , new [ ] { "http://example.com" } ) ;
605679
606680 // Act
607- var resolvedPolicyName = middleware . ResolveCorsPolicyName ( context ) ;
681+ await middleware . Invoke ( httpContext , mockProvider . Object ) ;
608682
609683 // Assert
610- Assert . Equal ( "MetadataPolicyName" , resolvedPolicyName ) ;
684+ mockProvider . Verify (
685+ o => o . GetPolicyAsync ( It . IsAny < HttpContext > ( ) , It . IsAny < string > ( ) ) ,
686+ Times . Never ) ;
611687 }
612688 }
613689}
0 commit comments