Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions src/SIL.Harmony.Core/CommitBase.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Diagnostics.CodeAnalysis;
using System.IO.Hashing;
using System.Text.Json.Serialization;

Expand All @@ -12,7 +11,6 @@ public abstract class CommitBase : IComparable<CommitBase>
{
public const string NullParentHash = "0000";
[JsonConstructor]
[SetsRequiredMembers]
protected internal CommitBase(Guid id, HybridDateTime hybridDateTime)
{
Id = id;
Expand Down Expand Up @@ -71,7 +69,6 @@ public int CompareTo(CommitBase? other)
/// <inheritdoc cref="CommitBase"/>
public abstract class CommitBase<TChange> : CommitBase
{
[SetsRequiredMembers]
internal CommitBase(Guid id, HybridDateTime hybridDateTime) : base(id, hybridDateTime)
{
}
Expand Down
2 changes: 0 additions & 2 deletions src/SIL.Harmony.Core/ServerCommit.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Diagnostics.CodeAnalysis;
using System.Runtime.Serialization;
using System.Text.Json;
using System.Text.Json.Serialization;
Expand All @@ -8,7 +7,6 @@ namespace SIL.Harmony.Core;
public class ServerCommit : CommitBase<ServerJsonChange>
{
[JsonConstructor]
[SetsRequiredMembers]
protected ServerCommit(Guid id, HybridDateTime hybridDateTime) : base(id,
hybridDateTime)
{
Expand Down
51 changes: 51 additions & 0 deletions src/SIL.Harmony.Tests/Core/ServerCommitTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
using System.Text.Json;
using SIL.Harmony.Core;

namespace SIL.Harmony.Tests.Core;

public class ServerCommitTests
{
// ASP.NET Core's defaults, which sync servers use to read uploaded commits
private static readonly JsonSerializerOptions WebOptions = new(JsonSerializerDefaults.Web);

private const string ValidJson = """
{
"id": "11111111-1111-1111-1111-111111111111",
"clientId": "22222222-2222-2222-2222-222222222222",
"hybridDateTime": { "dateTime": "2026-01-01T00:00:00+00:00", "counter": 3 },
"changeEntities": [
{
"index": 0,
"commitId": "11111111-1111-1111-1111-111111111111",
"entityId": "33333333-3333-3333-3333-333333333333",
"change": { "$type": "SomeChange", "text": "hello" }
}
]
}
""";

[Fact]
public void CanRoundTripThroughJson()
{
var commit = JsonSerializer.Deserialize<ServerCommit>(ValidJson, WebOptions)!;
commit.ClientId.Should().Be(Guid.Parse("22222222-2222-2222-2222-222222222222"));
commit.HybridDateTime.Counter.Should().Be(3);

var json = JsonSerializer.Serialize(commit, WebOptions);
var roundTripped = JsonSerializer.Deserialize<ServerCommit>(json, WebOptions);
JsonSerializer.Serialize(roundTripped, WebOptions).Should().Be(json);
}

[Theory]
[InlineData("clientId")]
[InlineData("hybridDateTime")]
public void RejectsMissingRequiredProperty(string property)
{
var json = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(ValidJson)!;
json.Remove(property);

var act = () => JsonSerializer.Deserialize<ServerCommit>(JsonSerializer.Serialize(json), WebOptions);

act.Should().Throw<JsonException>().WithMessage($"*{property}*");
}
}
2 changes: 0 additions & 2 deletions src/SIL.Harmony/Commit.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
using SIL.Harmony.Changes;
using SIL.Harmony.Db;
Expand All @@ -8,7 +7,6 @@ namespace SIL.Harmony;
public class Commit : CommitBase<IChange>
{
[JsonConstructor]
[SetsRequiredMembers]
protected Commit(Guid id, string hash, string parentHash, HybridDateTime hybridDateTime) : base(id,
hybridDateTime)
{
Expand Down
Loading