Skip to content

Commit

Permalink
Add unit test for save to file
Browse files Browse the repository at this point in the history
  • Loading branch information
viral32111 committed Jul 23, 2023
1 parent a692f0f commit 1e21c9b
Showing 1 changed file with 69 additions and 1 deletion.
70 changes: 69 additions & 1 deletion JsonExtensions.Tests/Source/FileSystem/SaveToFile.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using Xunit;

Expand All @@ -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<JsonObject>( 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<JsonObject>( 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 );
}

}

0 comments on commit 1e21c9b

Please sign in to comment.