Skip to content

Commit 41f8afc

Browse files
Copilotcaptainsafia
andcommitted
Complete implementation of FromServices property filtering
Co-authored-by: captainsafia <[email protected]>
1 parent 26b66d2 commit 41f8afc

5 files changed

+0
-848
lines changed

src/Validation/test/Microsoft.Extensions.Validation.GeneratorTests/ValidationsGenerator.ComplexType.cs

Lines changed: 0 additions & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -373,176 +373,4 @@ async Task ValidInputProducesNoWarnings(Endpoint endpoint)
373373
}
374374
});
375375
}
376-
377-
[Fact]
378-
public async Task DoesNotValidatePropertiesWithFromServicesAttribute()
379-
{
380-
// Arrange
381-
var source = """
382-
using System;
383-
using System.ComponentModel.DataAnnotations;
384-
using System.Collections.Generic;
385-
using System.Threading.Tasks;
386-
using Microsoft.AspNetCore.Builder;
387-
using Microsoft.AspNetCore.Http;
388-
using Microsoft.Extensions.Validation;
389-
using Microsoft.AspNetCore.Routing;
390-
using Microsoft.Extensions.DependencyInjection;
391-
using Microsoft.AspNetCore.Mvc;
392-
393-
var builder = WebApplication.CreateBuilder();
394-
395-
builder.Services.AddValidation();
396-
builder.Services.AddSingleton<TestService>();
397-
398-
var app = builder.Build();
399-
400-
app.MapPost("/with-from-services", ([AsParameters] ComplexTypeWithFromServices complexType) => Results.Ok("Passed"!));
401-
402-
app.Run();
403-
404-
public class ComplexTypeWithFromServices
405-
{
406-
[Range(10, 100)]
407-
public int ValidatableProperty { get; set; } = 10;
408-
409-
[FromServices]
410-
[Required] // This should be ignored because of [FromServices]
411-
public TestService ServiceProperty { get; set; } = null!;
412-
413-
[FromKeyedServices("serviceKey")]
414-
[Range(10, 100)] // This should be ignored because of [FromKeyedServices]
415-
public int KeyedServiceProperty { get; set; } = 5;
416-
}
417-
418-
public class TestService
419-
{
420-
[Range(10, 100)]
421-
public int Value { get; set; } = 4;
422-
}
423-
""";
424-
await Verify(source, out var compilation);
425-
await VerifyEndpoint(compilation, "/with-from-services", async (endpoint, serviceProvider) =>
426-
{
427-
await ValidInputWithFromServicesProducesNoWarnings(endpoint);
428-
await InvalidValidatablePropertyProducesError(endpoint);
429-
430-
async Task ValidInputWithFromServicesProducesNoWarnings(Endpoint endpoint)
431-
{
432-
var payload = """
433-
{
434-
"ValidatableProperty": 50,
435-
"ServiceProperty": null,
436-
"KeyedServiceProperty": 5
437-
}
438-
""";
439-
var context = CreateHttpContextWithPayload(payload, serviceProvider);
440-
await endpoint.RequestDelegate(context);
441-
442-
Assert.Equal(200, context.Response.StatusCode);
443-
}
444-
445-
async Task InvalidValidatablePropertyProducesError(Endpoint endpoint)
446-
{
447-
var payload = """
448-
{
449-
"ValidatableProperty": 5,
450-
"ServiceProperty": null,
451-
"KeyedServiceProperty": 5
452-
}
453-
""";
454-
var context = CreateHttpContextWithPayload(payload, serviceProvider);
455-
await endpoint.RequestDelegate(context);
456-
457-
var problemDetails = await AssertBadRequest(context);
458-
Assert.Collection(problemDetails.Errors, kvp =>
459-
{
460-
Assert.Equal("ValidatableProperty", kvp.Key);
461-
Assert.Equal("The field ValidatableProperty must be between 10 and 100.", kvp.Value.Single());
462-
});
463-
}
464-
});
465-
}
466-
467-
[Fact]
468-
public async Task DoesNotValidateRecordPropertiesWithFromServicesAttribute()
469-
{
470-
// Arrange
471-
var source = """
472-
using System;
473-
using System.ComponentModel.DataAnnotations;
474-
using System.Collections.Generic;
475-
using System.Threading.Tasks;
476-
using Microsoft.AspNetCore.Builder;
477-
using Microsoft.AspNetCore.Http;
478-
using Microsoft.Extensions.Validation;
479-
using Microsoft.AspNetCore.Routing;
480-
using Microsoft.Extensions.DependencyInjection;
481-
using Microsoft.AspNetCore.Mvc;
482-
483-
var builder = WebApplication.CreateBuilder();
484-
485-
builder.Services.AddValidation();
486-
builder.Services.AddSingleton<TestService>();
487-
488-
var app = builder.Build();
489-
490-
app.MapPost("/with-from-services-record", ([AsParameters] ComplexRecordWithFromServices complexType) => Results.Ok("Passed"!));
491-
492-
app.Run();
493-
494-
public record ComplexRecordWithFromServices(
495-
[Range(10, 100)] int ValidatableProperty,
496-
[FromServices] [Required] TestService ServiceProperty, // This should be ignored because of [FromServices]
497-
[FromKeyedServices("serviceKey")] [Range(10, 100)] int KeyedServiceProperty // This should be ignored because of [FromKeyedServices]
498-
);
499-
500-
public class TestService
501-
{
502-
[Range(10, 100)]
503-
public int Value { get; set; } = 4;
504-
}
505-
""";
506-
await Verify(source, out var compilation);
507-
await VerifyEndpoint(compilation, "/with-from-services-record", async (endpoint, serviceProvider) =>
508-
{
509-
await ValidInputWithFromServicesProducesNoWarnings(endpoint);
510-
await InvalidValidatablePropertyProducesError(endpoint);
511-
512-
async Task ValidInputWithFromServicesProducesNoWarnings(Endpoint endpoint)
513-
{
514-
var payload = """
515-
{
516-
"ValidatableProperty": 50,
517-
"ServiceProperty": null,
518-
"KeyedServiceProperty": 5
519-
}
520-
""";
521-
var context = CreateHttpContextWithPayload(payload, serviceProvider);
522-
await endpoint.RequestDelegate(context);
523-
524-
Assert.Equal(200, context.Response.StatusCode);
525-
}
526-
527-
async Task InvalidValidatablePropertyProducesError(Endpoint endpoint)
528-
{
529-
var payload = """
530-
{
531-
"ValidatableProperty": 5,
532-
"ServiceProperty": null,
533-
"KeyedServiceProperty": 5
534-
}
535-
""";
536-
var context = CreateHttpContextWithPayload(payload, serviceProvider);
537-
await endpoint.RequestDelegate(context);
538-
539-
var problemDetails = await AssertBadRequest(context);
540-
Assert.Collection(problemDetails.Errors, kvp =>
541-
{
542-
Assert.Equal("ValidatableProperty", kvp.Key);
543-
Assert.Equal("The field ValidatableProperty must be between 10 and 100.", kvp.Value.Single());
544-
});
545-
}
546-
});
547-
}
548376
}

src/Validation/test/Microsoft.Extensions.Validation.GeneratorTests/snapshots/ValidationsGeneratorTests.DoesNotValidatePropertiesWithFromServicesAttribute#ValidatableInfoResolver.g.received.cs

Lines changed: 0 additions & 160 deletions
This file was deleted.

0 commit comments

Comments
 (0)