public void GreaterThanOperator()
        {
            var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, TimeSpan.Zero));
            var b = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 9, 0, 0, TimeSpan.Zero));

            Assert.IsTrue(b > a);
        }
Beispiel #2
0
        public static DateTimeOffset GetCorrectedDate(this DATETIMETYPE date, TimeZoneInfo quickBooksTimeZone)
        {
            var dateTime        = date.ToDateTime();
            var correctedOffset = quickBooksTimeZone.GetUtcOffset(dateTime);

            return(new DateTimeOffset(dateTime, correctedOffset));
        }
        public void EqualsOperatorBothNull()
        {
            DATETIMETYPE a = null;
            DATETIMETYPE b = null;

            Assert.IsTrue(a == b);
        }
        public void EqualsOperatorRightNull()
        {
            DATETIMETYPE a = new DATETIMETYPE(2019, 1, 1);
            DATETIMETYPE b = null;

            Assert.IsFalse(a == b);
        }
        public void EqualsOperatorSameValue()
        {
            var a = new DATETIMETYPE(2019, 1, 1);
            var b = new DATETIMETYPE(2019, 1, 1);

            Assert.IsTrue(a == b);
        }
        public void EqualsOperatorSameValueDifferentConstruction()
        {
            var a = new DATETIMETYPE(2019, 1, 1);
            var b = new DATETIMETYPE(new DateTime(2019, 1, 1));

            Assert.IsTrue(a == b);
        }
        public void ToStringDoesIncludesOffsetWhenConstructedFromUtcDateTime()
        {
            var date = new DateTime(2019, 2, 6, 17, 24, 0, DateTimeKind.Utc);
            var dt   = new DATETIMETYPE(date);

            Assert.AreEqual("2019-02-06T17:24:00+00:00", dt.ToString(true));
        }
        public void CompareIgnoresOffsetWhenOneDoNotHaveOffset()
        {
            var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, 0, TimeSpan.FromHours(-10)));
            var b = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Unspecified));

            Assert.AreEqual(0, a.CompareTo(b));
        }
        public void ToStringDoesNotIncludeOffsetWhenConstructedFromUnspecifiedDateTime()
        {
            var date = new DateTime(2019, 2, 6, 17, 24, 0, DateTimeKind.Unspecified);
            var dt   = new DATETIMETYPE(date);

            Assert.AreEqual("2019-02-06T17:24:00", dt.ToString());
        }
 public void ThrowsWhenConstructedWithDateTimeAfterEpoch()
 {
     Assert.Throws <ArgumentOutOfRangeException>(() =>
     {
         var date = new DATETIMETYPE(new DateTime(2038, 2, 1, 0, 0, 0));
     });
 }
        public void ToDateTimeEqualsInputWhenConstructedFromLocalDateTime()
        {
            var input  = new DateTime(2018, 8, 1, 0, 0, 0, DateTimeKind.Local);
            var dt     = new DATETIMETYPE(input);
            var output = dt.ToDateTime();

            Assert.AreEqual(input, output);
        }
        public void DateTimeWithDSTIsNotHandledByQuickBooks()
        {
            // This should read 2015-04-03T10:06:17-07:00
            // But QuickBooks does not handle DST. So we need to handle it ourself.
            var dt = new DATETIMETYPE("2015-04-03T10:06:17-08:00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo());

            Assert.AreEqual(17, dt.ToDateTime().ToUniversalTime().Hour);
        }
        public void DateTimeWithDSTIsNotHandledByQuickBooks()
        {
            // This should read 2015-04-03T10:06:17-07:00
            // But QuickBooks does not handle DST. So we need to handle it ourself.
            var dt = new DATETIMETYPE("2015-04-03T10:06:17-08:00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo());

            Assert.AreEqual(17, dt.ToDateTime().ToUniversalTime().Hour);
        }
        public void MidnightIsAssumedIfTimeComponentMissing()
        {
            var dt   = DATETIMETYPE.Parse("2019-02-06");
            var date = dt.ToDateTime();

            Assert.AreEqual("2019-02-06T00:00:00", dt.ToString());
            Assert.AreEqual(new DateTime(2019, 2, 6, 0, 0, 0), date);
        }
Beispiel #15
0
        public static DATETIMETYPE GetQueryFromModifiedDate(this DATETIMETYPE dateTimeType)
        {
            if (dateTimeType == null)
            {
                return(DATETIMETYPE.MinValue);
            }

            return(dateTimeType.Add(TimeSpan.FromSeconds(1)));
        }
        public void ToDateTimeIsLocalKindWhenConstructedFromLocalDateTime()
        {
            // This situation only covers when a consumer of this library is converting back to DateTime after initializing from DateTime
            // No QuickBooks parsed DATETIMETYPE will ever have a Local kind

            var dt = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Local));

            Assert.AreEqual(DateTimeKind.Local, dt.ToDateTime().Kind);
        }
Beispiel #17
0
            protected override async Task <bool> ExecuteRequestAsync(IAuthenticatedTicket authenticatedTicket, CustomerQueryRqType request)
            {
                // Let's see if we had a previous saved time so we don't re-query the entire QuickBooks every time.
                var previouslySavedFromModified = (await dbContext.QbSettings
                                                   .FirstOrDefaultAsync(m => m.Name == LAST_MODIFIED_CUSTOMER))?.Value;

                request.FromModifiedDate = DATETIMETYPE.ParseOrDefault(previouslySavedFromModified, DATETIMETYPE.MinValue).GetQueryFromModifiedDate();
                return(await base.ExecuteRequestAsync(authenticatedTicket, request));
            }
        public void CompareAccountsForOffset()
        {
            // A's instant (moment in time globally) is later, but its DateTime is earlier
            var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 6, 0, 0, 0, TimeSpan.FromHours(-3)));

            // B's instant is earlier, but its DateTime is later
            var b = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, 0, TimeSpan.Zero));

            Assert.AreEqual(1, a.CompareTo(b));
        }
        public void EqualsOperatorSameInstantDifferentOffsets()
        {
            // Even though these are two different offsets, they represent the same moment in time and both have offsets supplied, so should be equal

            var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 12, 0, 0, TimeSpan.FromHours(-1)));
            var b = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 11, 0, 0, TimeSpan.FromHours(-2)));

            Assert.AreEqual(0, a.CompareTo(b));
            Assert.IsTrue(a == b);
        }
 private static DATETIMETYPE[] ToDateTimeIsUtcForZeroOffsetsInput()
 {
     return(new[]
     {
         DATETIMETYPE.Parse("2019-02-06T17:24:00Z"),
         DATETIMETYPE.Parse("2019-02-06T17:24:00+00:00"),
         new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Utc)),
         DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 2, 6, 17, 24, 0, TimeSpan.Zero)),
     });
 }
 private static DATETIMETYPE[] ToDateTimeIsUnspecifiedForNonZeroAndEmptyOffsetsInputs()
 {
     return(new[]
     {
         DATETIMETYPE.Parse("2019-02-06T17:24:00"),
         DATETIMETYPE.Parse("2019-02-07T17:24:00-08:00"),
         new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Unspecified)),
         DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 2, 9, 17, 24, 0, TimeSpan.FromHours(-8)))
     });
 }
        public void OffsetMatchesLocalMachineZoneWhenConstructedFromLocalDateTime()
        {
            var localDate = new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Local);
            var zone      = TimeZoneInfo.Local;
            var offset    = zone.GetUtcOffset(localDate);

            var dt = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Local));

            Assert.AreEqual(offset, dt.UncorrectedDate.Value.Offset);
        }
        public void EqualsOperatorSameTimeOneMissingOffset()
        {
            // While these will compare the same, they should not be considered equal

            var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, 0, TimeSpan.Zero));
            var b = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Unspecified));

            Assert.AreEqual(0, a.CompareTo(b));
            Assert.IsFalse(a == b);
        }
        public void ToStringIncludesOffsetWhenConstructedFromLocalDateTime()
        {
            var date = new DateTime(2019, 2, 6, 17, 24, 0, DateTimeKind.Local);

            // Note, this will be +00:00, not Z on a UTC machine, because of DateTimeKind.Local
            var offset = date.ToString(" K").Trim();

            var dt = new DATETIMETYPE(date);

            Assert.AreEqual($"2019-02-06T17:24:00{offset}", dt.ToString(true));
        }
Beispiel #25
0
        public static async Task SaveIfNewerAsync(this ApplicationDbContext applicationDbContext, string setting, QbSync.QbXml.Objects.DATETIMETYPE moment)
        {
            if (moment != null)
            {
                var savedSetting = await applicationDbContext.QbSettings.FirstOrDefaultAsync(m => m.Name == setting);

                var existingDateTimeType = DATETIMETYPE.ParseOrDefault(savedSetting?.Value, DATETIMETYPE.MinValue);
                if (moment > existingDateTimeType)
                {
                    if (savedSetting == null)
                    {
                        savedSetting = new QbSetting
                        {
                            Name = setting
                        };
                        applicationDbContext.QbSettings.Add(savedSetting);
                    }

                    savedSetting.Value = moment.ToString();
                    await applicationDbContext.SaveChangesAsync();
                }
            }
        }
        public void RoundTripsAsExpectedWithoutOffset()
        {
            // Simulated value returned from QuickBooks, that we want to be sent the exact same way to future queries
            var str  = "2019-02-20T10:36:51";
            var date = DATETIMETYPE.Parse(str);

            // DATETIMETYPE > string
            Assert.AreEqual(str, date.ToString());

            // DATETIMETYPE > string > DATETIMETYPE > string
            Assert.AreEqual(str, DATETIMETYPE.Parse(date.ToString()).ToString());

            // DATETIMETYPE > DateTime > DATETIMETYPE > string
            Assert.AreEqual(str, new DATETIMETYPE(date.ToDateTime()).ToString());

            // DATETIMETYPE > DateTime > string > DATETIMETYPE > string
            Assert.AreEqual(str, DATETIMETYPE.Parse(date.ToDateTime().ToString()).ToString());

            // DATETIMETYPE > DateTime > string > DateTime > DATETIMETYPE > string
            Assert.AreEqual(str, new DATETIMETYPE(DateTime.Parse(date.ToDateTime().ToString())).ToString());

            // DATETIMETYPE > DateTime > Ticks > DateTime > DATETIMETYPE > string
            Assert.AreEqual(str, new DATETIMETYPE(new DateTime(date.ToDateTime().Ticks)).ToString());
        }
        public void DateTimeInvalidSentByQuickBooks()
        {
            var dt = new DATETIMETYPE("0000-00-00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo());

            Assert.AreEqual(DateTime.MinValue, dt.ToDateTime());
        }
        public void DateTimeWithDSTNothingHappensWhenNoTimzoneSupplied()
        {
            var dt = new DATETIMETYPE("2015-04-03T10:06:17-08:00");

            Assert.AreEqual(18, dt.ToDateTime().ToUniversalTime().Hour);
        }
 public string ToStringOffsetExistenceMatchesInputWhenParsingFromStringWithOffset(string input)
 {
     return(DATETIMETYPE.Parse(input).ToString(true));
 }
        public void DateTimeWithNoDSTIsNotHandledByQuickBooks()
        {
            var dt = new DATETIMETYPE("2015-03-01T10:06:17-08:00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo());

            Assert.AreEqual(18, dt.ToDateTime().ToUniversalTime().Hour);
        }
 public void ToDateTimeIsUnspecifiedForNonZeroAndEmptyOffsets(DATETIMETYPE input)
 {
     Assert.AreEqual(DateTimeKind.Unspecified, input.ToDateTime().Kind);
 }
        public void UsesOffsetAsSuppliedWhenConstructedFromDateTimeOffset()
        {
            var dt = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 2, 6, 17, 24, 0, TimeSpan.FromHours(-8)));

            Assert.AreEqual("2019-02-06T17:24:00-08:00", dt.ToString(true));
        }
 public void ToDateTimeIsUtcForZeroOffsets(DATETIMETYPE input)
 {
     Assert.AreEqual(DateTimeKind.Utc, input.ToDateTime().Kind);
 }
        public void UsesNoOffsetWhenConstructedFromDateComponentsWithoutOffset()
        {
            var dt = new DATETIMETYPE(2019, 2, 6, 17, 24, 0);

            Assert.AreEqual("2019-02-06T17:24:00", dt.ToString());
        }