public void DeserializeAsTurns_ShouldReturnValidResult(string json, number expectedTotalSeconds)
        {
            // arrange
            var converter = new DegreeAngleJsonConverter();

            // act
            var result = JsonConvert.DeserializeObject <DegreeAngle>(json, converter);

            // assert
            result.TotalSeconds.Should().Be(expectedTotalSeconds);
        }
        public void Serialize_ShouldReturnValidJson(DegreeAngleJsonSerializationFormat format, number totalSeconds, string expectedJson)
        {
            // arrange
            var angle     = new DegreeAngle(totalSeconds);
            var converter = new DegreeAngleJsonConverter(format);

            // act
            string actualJson = JsonConvert.SerializeObject(angle, converter);

            // assert
            actualJson.Should().Be(expectedJson);
        }
        public void SerializeAndDeserialize_ShouldBeIdempotent()
        {
            // arrange
            var angle     = Fixture.Create <DegreeAngle>();
            var converter = new DegreeAngleJsonConverter();

            // act
            string serializedDegreeAngle1   = JsonConvert.SerializeObject(angle, converter);
            var    deserializedDegreeAngle1 = JsonConvert.DeserializeObject <DegreeAngle>(serializedDegreeAngle1, converter);
            string serializedDegreeAngle2   = JsonConvert.SerializeObject(deserializedDegreeAngle1, converter);
            var    deserializedDegreeAngle2 = JsonConvert.DeserializeObject <DegreeAngle>(serializedDegreeAngle2, converter);

            // assert
            deserializedDegreeAngle1.Should().Be(angle);
            deserializedDegreeAngle2.Should().Be(angle);

            deserializedDegreeAngle2.Should().Be(deserializedDegreeAngle1);
            serializedDegreeAngle2.Should().Be(serializedDegreeAngle1);
        }