diff --git a/readme.md b/readme.md index 4705ed4e..b391a8ef 100644 --- a/readme.md +++ b/readme.md @@ -77,7 +77,7 @@ builder.UseSqlServer(connection); builder.EnableRecording(); var data = new SampleDbContext(builder.Options); ``` -snippet source | anchor +snippet source | anchor `EnableRecording` should only be called in the test context. @@ -106,7 +106,7 @@ await data await Verify(); ``` -snippet source | anchor +snippet source | anchor Will result in the following verified file: @@ -157,7 +157,7 @@ await Verify( entries }); ``` -snippet source | anchor +snippet source | anchor @@ -189,7 +189,7 @@ await data2 await Verify(); ``` -snippet source | anchor +snippet source | anchor @@ -251,7 +251,7 @@ await data await Verify(); ``` -snippet source | anchor +snippet source | anchor @@ -298,7 +298,7 @@ public async Task Added() await Verify(data.ChangeTracker); } ``` -snippet source | anchor +snippet source | anchor Will result in the following verified file: @@ -343,7 +343,7 @@ public async Task Deleted() await Verify(data.ChangeTracker); } ``` -snippet source | anchor +snippet source | anchor Will result in the following verified file: @@ -388,7 +388,7 @@ public async Task Modified() await Verify(data.ChangeTracker); } ``` -snippet source | anchor +snippet source | anchor Will result in the following verified file: @@ -423,7 +423,7 @@ var queryable = data.Companies .Where(_ => _.Name == "company name"); await Verify(queryable); ``` -snippet source | anchor +snippet source | anchor Will result in the following verified files: @@ -490,7 +490,7 @@ await Verify(data.AllData()) serializer => serializer.TypeNameHandling = TypeNameHandling.Objects); ``` -snippet source | anchor +snippet source | anchor Will result in the following verified file with all data in the database: @@ -573,7 +573,7 @@ public async Task IgnoreNavigationProperties() .IgnoreNavigationProperties(); } ``` -snippet source | anchor +snippet source | anchor @@ -586,7 +586,7 @@ var options = DbContextOptions(); using var data = new SampleDbContext(options); VerifyEntityFramework.IgnoreNavigationProperties(); ``` -snippet source | anchor +snippet source | anchor @@ -607,7 +607,7 @@ protected override void ConfigureWebHost(IWebHostBuilder webBuilder) _ => dataBuilder.Options)); } ``` -snippet source | anchor +snippet source | anchor Then use the same identifier for recording: @@ -623,7 +623,7 @@ var companies = await httpClient.GetFromJsonAsync("/companies"); var entries = Recording.Stop(testName); ``` -snippet source | anchor +snippet source | anchor The results will not be automatically included in verified file so it will have to be verified manually: @@ -638,7 +638,46 @@ await Verify( sql = entries }); ``` -snippet source | anchor +snippet source | anchor + + + +## ScrubInlineEfDateTimes + +In some scenarios EntityFrmaeowrk does not parameterise DateTimes. For example when querying [temporal tables](https://learn.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables). + +`ScrubInlineEfDateTimes()` is a convenience method that calls `.ScrubInlineDateTimes("yyyy-MM-ddTHH:mm:ss.fffffffZ")`. + + +### Static usage + +``` +VerifyEntityFramework.ScrubInlineEfDateTimes(); +``` + + +### Instance usage + + + +```cs +var settings = new VerifySettings(); +settings.ScrubInlineEfDateTimes(); +await Verify(target, settings); +``` +snippet source | anchor + + + +### Fluent usage + + + +```cs +await Verify(target) + .ScrubInlineEfDateTimes(); +``` +snippet source | anchor diff --git a/src/.editorconfig b/src/.editorconfig index b1aca030..5a527e69 100644 --- a/src/.editorconfig +++ b/src/.editorconfig @@ -309,4 +309,14 @@ resharper_space_before_self_closing = true ij_xml_space_inside_empty_tag = true [*.json] -indent_size = 2 \ No newline at end of file +indent_size = 2 + +# Verify settings +[*.{received,verified}.{txt,xml,json,md,sql,csv,html}] +charset = "utf-8-bom" +end_of_line = lf +indent_size = unset +indent_style = unset +insert_final_newline = false +tab_width = unset +trim_trailing_whitespace = false \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index ac36c52e..763617a5 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649;CS8632;EF1001 - 12.2.1 + 12.3.0 preview 1.0.0 EntityFramework, Verify diff --git a/src/Verify.EntityFramework.Tests/CoreTests.ScrubInlineEfDateTimes.verified.txt b/src/Verify.EntityFramework.Tests/CoreTests.ScrubInlineEfDateTimes.verified.txt new file mode 100644 index 00000000..6114d036 --- /dev/null +++ b/src/Verify.EntityFramework.Tests/CoreTests.ScrubInlineEfDateTimes.verified.txt @@ -0,0 +1 @@ +DateTime_1 \ No newline at end of file diff --git a/src/Verify.EntityFramework.Tests/CoreTests.ScrubInlineEfDateTimesFluent.verified.txt b/src/Verify.EntityFramework.Tests/CoreTests.ScrubInlineEfDateTimesFluent.verified.txt new file mode 100644 index 00000000..6114d036 --- /dev/null +++ b/src/Verify.EntityFramework.Tests/CoreTests.ScrubInlineEfDateTimesFluent.verified.txt @@ -0,0 +1 @@ +DateTime_1 \ No newline at end of file diff --git a/src/Verify.EntityFramework.Tests/CoreTests.cs b/src/Verify.EntityFramework.Tests/CoreTests.cs index af695acb..296e22f9 100644 --- a/src/Verify.EntityFramework.Tests/CoreTests.cs +++ b/src/Verify.EntityFramework.Tests/CoreTests.cs @@ -26,6 +26,33 @@ await ThrowsTask( .IgnoreStackTrace(); } + [Test] + public async Task ScrubInlineEfDateTimes() + { + var target = "2024-09-05T06:59:16.1018211Z"; + + #region ScrubInlineEfDateTimesInstance + + var settings = new VerifySettings(); + settings.ScrubInlineEfDateTimes(); + await Verify(target, settings); + + #endregion + } + + [Test] + public async Task ScrubInlineEfDateTimesFluent() + { + var target = "2024-09-05T06:59:16.1018211Z"; + + #region ScrubInlineEfDateTimesFluent + + await Verify(target) + .ScrubInlineEfDateTimes(); + + #endregion + } + [Test] public async Task WithOrderBy() { diff --git a/src/Verify.EntityFramework/VerifyEntityFramework.cs b/src/Verify.EntityFramework/VerifyEntityFramework.cs index ab9e7710..0ae95248 100644 --- a/src/Verify.EntityFramework/VerifyEntityFramework.cs +++ b/src/Verify.EntityFramework/VerifyEntityFramework.cs @@ -54,6 +54,18 @@ public static void IgnoreNavigationProperties(this VerifySettings settings, IMod } } + public static void ScrubInlineEfDateTimes() => + VerifierSettings.ScrubInlineDateTimes("yyyy-MM-ddTHH:mm:ss.fffffffZ"); + + public static SettingsTask ScrubInlineEfDateTimes(this SettingsTask settings) + { + settings.CurrentSettings.ScrubInlineEfDateTimes(); + return settings; + } + + public static void ScrubInlineEfDateTimes(this VerifySettings settings) => + settings.ScrubInlineDateTimes("yyyy-MM-ddTHH:mm:ss.fffffffZ"); + public static void IgnoreNavigationProperties(IModel? model = null) { foreach (var (type, name) in model.GetNavigationsOrShared())