RasicN / random-test-values

Removes the need to think about what the value is when unit testing.
MIT License
19 stars 10 forks source link

Support Utc DateTime random value. #57

Open bard83 opened 1 year ago

bard83 commented 1 year ago

Currently I've wrote the code but I cannot submit it.

        /// <summary>
        /// Use for getting a random UTC DateTimes for your unit tests. Always returns a date in the past. 
        /// </summary>
        /// <returns>A random UTC DateTime</returns>
        public static DateTime DateTimeUtc(DateTime? minDateTime = null, DateTime? maxDateTime = null)
        {
            //discovery of galilean moons. Using system.DateTime.Min just made weird looking dates.
            var myMinDateTime = minDateTime.HasValue ? minDateTime.Value.ToUniversalTime() : new DateTime(1610, 1, 7).ToUniversalTime();

            var myMaxDateTime = maxDateTime.HasValue ? myMinDateTime.ToUniversalTime() : System.DateTime.UtcNow;

            var timeSinceStartOfDateTime = myMaxDateTime - myMinDateTime;
            var timeInHoursSinceStartOfDateTime = (int)timeSinceStartOfDateTime.TotalHours;
            var hoursToSubtract = Int(timeInHoursSinceStartOfDateTime) * -1;
            var timeToReturn = myMaxDateTime.AddHours(hoursToSubtract);

            if (timeToReturn > myMinDateTime && timeToReturn < myMaxDateTime)
            {
                return timeToReturn;
            }

            return System.DateTime.UtcNow;
        }