|
| 1 | +namespace Octokit.Webhooks.Test.Converter; |
| 2 | + |
| 3 | +using System; |
| 4 | +using System.Text.Json; |
| 5 | +using System.Text.Json.Serialization; |
| 6 | +using AwesomeAssertions; |
| 7 | +using Octokit.Webhooks.Models.ProjectsV2ItemEvent; |
| 8 | +using Xunit; |
| 9 | + |
| 10 | +public class ChangesFieldValueChangeConverterTests(ITestOutputHelper output) |
| 11 | +{ |
| 12 | + private readonly JsonSerializerOptions options = new() |
| 13 | + { |
| 14 | + WriteIndented = true, |
| 15 | + Converters = |
| 16 | + { |
| 17 | + new ChangesFieldValueChangeConverter(), |
| 18 | + }, |
| 19 | + }; |
| 20 | + |
| 21 | + [Fact] |
| 22 | + public void Roundtrip() |
| 23 | + { |
| 24 | + var test = new TestObject |
| 25 | + { |
| 26 | + AsString = new ChangesFieldValueScalarChange { StringValue = "Hello world" }, |
| 27 | + AsNumber = new ChangesFieldValueScalarChange { NumericValue = 3.1415926m }, |
| 28 | + AsObject = new ChangesFieldValueChange |
| 29 | + { |
| 30 | + Color = "color", |
| 31 | + Description = "description", |
| 32 | + Id = "12345", |
| 33 | + Name = "Name", |
| 34 | + }, |
| 35 | + }; |
| 36 | + |
| 37 | + var serialized = JsonSerializer.Serialize(test, this.options); |
| 38 | + output.WriteLine(serialized); |
| 39 | + |
| 40 | + var deserialized = JsonSerializer.Deserialize<TestObject>(serialized, this.options); |
| 41 | + |
| 42 | + deserialized.Should().NotBeNull(); |
| 43 | + deserialized.AsString.Should().NotBeNull().And.BeOfType<ChangesFieldValueScalarChange>(); |
| 44 | + deserialized.AsNumber.Should().NotBeNull().And.BeOfType<ChangesFieldValueScalarChange>(); |
| 45 | + |
| 46 | + (deserialized.AsString as ChangesFieldValueScalarChange)?.StringValue.Should().Be("Hello world"); |
| 47 | + (deserialized.AsString as ChangesFieldValueScalarChange)?.NumericValue.Should().BeNull(); |
| 48 | + |
| 49 | + (deserialized.AsNumber as ChangesFieldValueScalarChange)?.StringValue.Should().BeNull(); |
| 50 | + (deserialized.AsNumber as ChangesFieldValueScalarChange)?.NumericValue.Should().Be(3.1415926m); |
| 51 | + |
| 52 | + deserialized.AsObject.Should().NotBeNull().And.BeOfType<ChangesFieldValueChange>(); |
| 53 | + var changeObject = deserialized.AsObject.As<ChangesFieldValueChange>(); |
| 54 | + |
| 55 | + changeObject.Color.Should().Be("color"); |
| 56 | + changeObject.Description.Should().Be("description"); |
| 57 | + changeObject.Id.Should().Be("12345"); |
| 58 | + changeObject.Name.Should().Be("Name"); |
| 59 | + } |
| 60 | + |
| 61 | + internal sealed class TestObject |
| 62 | + { |
| 63 | + [JsonPropertyName("as_string")] |
| 64 | + public ChangesFieldValueChangeBase AsString { get; init; } = null!; |
| 65 | + |
| 66 | + [JsonPropertyName("as_number")] |
| 67 | + public ChangesFieldValueChangeBase AsNumber { get; init; } = null!; |
| 68 | + |
| 69 | + [JsonPropertyName("as_object")] |
| 70 | + public ChangesFieldValueChangeBase AsObject { get; init; } = null!; |
| 71 | + } |
| 72 | +} |
0 commit comments