From 1e21c9b2180c422d9c199e605cbdbd5e1403fdfe Mon Sep 17 00:00:00 2001 From: viral32111 <19510403+viral32111@users.noreply.github.com> Date: Sun, 23 Jul 2023 19:54:19 +0100 Subject: [PATCH] Add unit test for save to file --- .../Source/FileSystem/SaveToFile.cs | 70 ++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/JsonExtensions.Tests/Source/FileSystem/SaveToFile.cs b/JsonExtensions.Tests/Source/FileSystem/SaveToFile.cs index 82f3a27..4f5323e 100644 --- a/JsonExtensions.Tests/Source/FileSystem/SaveToFile.cs +++ b/JsonExtensions.Tests/Source/FileSystem/SaveToFile.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Nodes; using Xunit; @@ -6,8 +7,75 @@ namespace viral32111.JsonExtensions.Tests.FileSystem; public class SaveToFileTests { [ Fact ] - public void SaveToFile() { + public void SaveToFileEmptyObject() { + string temporaryFilePath = Path.GetTempFileName(); // Creates the file, but our method overwrites anyway + JsonObject jsonObject = new(); + + jsonObject.SaveToFile( temporaryFilePath ); + + Assert.True( File.Exists( temporaryFilePath ) ); + Assert.NotEmpty( File.ReadAllText( temporaryFilePath ) ); + + Assert.Equal( "{}", File.ReadAllText( temporaryFilePath ) ); + Assert.Equal( JsonSerializer.Serialize( jsonObject ), File.ReadAllText( temporaryFilePath ) ); + + File.Delete( temporaryFilePath ); + } + + [ Fact ] + public void SaveToFileFullObject() { + string temporaryFilePath = Path.GetTempFileName(); // Creates the file, but our method overwrites anyway + + JsonObject originalJsonObject = new() { + [ "one" ] = "hello", + [ "two" ] = "world" + }; + + originalJsonObject.SaveToFile( temporaryFilePath ); + + Assert.True( File.Exists( temporaryFilePath ) ); + Assert.NotEmpty( File.ReadAllText( temporaryFilePath ) ); + + JsonObject fileJsonObject = JsonSerializer.Deserialize( File.ReadAllText( temporaryFilePath ) )!; + + Assert.Equal( JsonSerializer.Serialize( originalJsonObject ), JsonSerializer.Serialize( fileJsonObject ) ); // Alternative to deep equal + Assert.NotSame( originalJsonObject, fileJsonObject ); + Assert.NotStrictEqual( originalJsonObject, fileJsonObject ); + + Assert.Equal( "hello", ( string? ) fileJsonObject[ "one" ] ); + Assert.Equal( "world", ( string? ) fileJsonObject[ "two" ] ); + + File.Delete( temporaryFilePath ); + } + + [ Fact ] + public void ReadFromFileSaveToSameFile() { + string temporaryFilePath = Path.GetTempFileName(); // Creates the file, but our method overwrites anyway + + JsonObject originalJsonObject = new() { + [ "one" ] = "hello", + [ "two" ] = "world" + }; + + File.WriteAllText( temporaryFilePath, JsonSerializer.Serialize( originalJsonObject ) ); + + JsonObject fileJsonObject = JsonExtensions.ReadFromFile( temporaryFilePath ); + fileJsonObject[ "one" ] = "goodbye"; + fileJsonObject.SaveToFile( temporaryFilePath ); + + Assert.True( File.Exists( temporaryFilePath ) ); + Assert.NotEmpty( File.ReadAllText( temporaryFilePath ) ); + + JsonObject newFileJsonObject = JsonSerializer.Deserialize( File.ReadAllText( temporaryFilePath ) )!; + + Assert.Equal( JsonSerializer.Serialize( fileJsonObject ), JsonSerializer.Serialize( newFileJsonObject ) ); // Alternative to deep equal + Assert.NotSame( fileJsonObject, newFileJsonObject ); + Assert.NotStrictEqual( fileJsonObject, newFileJsonObject ); + + Assert.Equal( "goodbye", ( string? ) newFileJsonObject[ "one" ] ); + + File.Delete( temporaryFilePath ); } }