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

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

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

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

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

            // act
            string serializedTime1   = JsonConvert.SerializeObject(angle, converter);
            var    deserializedTime1 = JsonConvert.DeserializeObject <Time>(serializedTime1, converter);
            string serializedTime2   = JsonConvert.SerializeObject(deserializedTime1, converter);
            var    deserializedTime2 = JsonConvert.DeserializeObject <Time>(serializedTime2, converter);

            // assert
            deserializedTime1.Should().Be(angle);
            deserializedTime2.Should().Be(angle);

            deserializedTime2.Should().Be(deserializedTime1);
            serializedTime2.Should().Be(serializedTime1);
        }