public void Date_With_Year_Precision_With_No_Circa_Returns_Half_a_Year_Corrected_Search_Dates()
        {
            // Arrange
            var startDateStd  = "+1950";
            var startDate     = new DateTime(1950, 01, 01);
            var startIsApprox = false;
            var endDateStd    = "+1960";
            var endDate       = new DateTime(1960, 12, 31);
            var endIsApprox   = false;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate.AddDays(-180));
            result.ToDate.Should().Be(endDate.AddDays(180));
        }
        public void Exact_Date_With_Circa_Returns_Same_Search_Dates()
        {
            // Arrange
            var startDateStd  = "+19500101";
            var startDate     = new DateTime(1950, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+19601231";
            var endDate       = new DateTime(1960, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate);
            result.ToDate.Should().Be(endDate);
        }
        public void Date_Resulting_In_Max_Date_Overflow_Returns_Max_Date()
        {
            // Arrange
            var startDateStd  = "+1900";
            var startDate     = new DateTime(1900, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+9999";
            var endDate       = new DateTime(9999, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate.AddDays(-180 * 4));
            result.ToDate.Should().Be(DateTime.MaxValue.Date);
        }
        public void Date_Resulting_In_Min_Date_Underrun_Returns_Min_Date()
        {
            // Arrange
            var startDateStd  = "+0001";
            var startDate     = new DateTime(0001, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+1900";
            var endDate       = new DateTime(1900, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(DateTime.MinValue.Date);
            result.ToDate.Should().Be(endDate.AddDays(180 * 4));
        }
        public void Date_With_Century_Precision_With_Circa_Returns_Half_a_Century_Times_2_Corrected_Search_Dates()
        {
            // Arrange
            var startDateStd  = "+19";
            var startDate     = new DateTime(1801, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+19";
            var endDate       = new DateTime(1900, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate.AddDays(-365 * 50 * 2));
            result.ToDate.Should().Be(endDate.AddDays(365 * 50 * 2));
        }