public void ShouldCorrectPassMinimumAndMaximumAsTicks()
        {
            // Arrange
            var sut = new DateTimeRangedRequestRelay();

            var request = new RangedRequest(typeof(DateTime), typeof(DateTime), "2020-01-01 00:00:00", "2020-12-31 23:59:59");
            RangedNumberRequest capturedNumericRequest = null;

            var context = new DelegatingSpecimenContext
            {
                OnResolve = r =>
                {
                    capturedNumericRequest = (RangedNumberRequest)r;
                    return(new NoSpecimen());
                }
            };

            // Act
            sut.Create(request, context);

            // Assert
            Assert.NotNull(capturedNumericRequest);
            Assert.Equal(new DateTime(2020, 1, 1, 0, 0, 0).Ticks, capturedNumericRequest.Minimum);
            Assert.Equal(new DateTime(2020, 12, 31, 23, 59, 59).Ticks, capturedNumericRequest.Maximum);
        }
        public void SutShouldBeASpecimenBuilder()
        {
            // Arrange
            var sut = new DateTimeRangedRequestRelay();

            // Act & Assert
            Assert.IsAssignableFrom <ISpecimenBuilder>(sut);
        }
        public void ShouldFailForNullContext()
        {
            // Arrange
            var sut     = new DateTimeRangedRequestRelay();
            var request = new object();

            // Act & Assert
            Assert.ThrowsAny <ArgumentNullException>(() =>
                                                     sut.Create(request, null));
        }
        public void ShouldNotHandleRequestIfMemberTypeIsNotDateTime()
        {
            // Arrange
            var sut     = new DateTimeRangedRequestRelay();
            var request =
                new RangedRequest(memberType: typeof(object), operandType: typeof(object), minimum: 0, maximum: 1);
            var context = new DelegatingSpecimenContext();

            // Act
            var result = sut.Create(request, context);

            // Assert
            Assert.Equal(new NoSpecimen(), result);
        }
        public void ShouldReturnNoSpecimenIfUnableToSatisfyRangedRequest()
        {
            // Arrange
            var sut     = new DateTimeRangedRequestRelay();
            var request =
                new RangedRequest(memberType: typeof(DateTime), operandType: typeof(DateTime), minimum: "2020-01-01 00:00:00",
                                  maximum: "2020-12-31 23:59:59");

            var context = new DelegatingSpecimenContext
            {
                OnResolve = _ => new NoSpecimen()
            };

            // Act
            var actualResult = sut.Create(request, context);

            // Assert
            Assert.Equal(new NoSpecimen(), actualResult);
        }
        public void ShouldHandleRequestOfDateTimeType()
        {
            // Arrange
            var sut     = new DateTimeRangedRequestRelay();
            var request =
                new RangedRequest(memberType: typeof(DateTime), operandType: typeof(DateTime), minimum: "2020-01-01 00:00:00",
                                  maximum: "2020-12-31 23:59:59");

            var context = new DelegatingSpecimenContext
            {
                OnResolve = _ => new DateTime(2020, 06, 15, 12, 30, 30).Ticks
            };

            // Act
            var actualResult = sut.Create(request, context);

            // Assert
            Assert.Equal(new DateTime(2020, 06, 15, 12, 30, 30), actualResult);
        }