public void Can_Write_And_Read_ZonedDateTimeNullable_Stored_As_DateTimeOffset()
        {
            var           timeZone           = DateTimeZoneProviders.Tzdb.GetSystemDefault();
            Instant       now                = TestClock.Now;
            ZonedDateTime startZonedDateTime = now.InZone(timeZone);

            var testEvent = new ZonedDateTimeTestEntity
            {
                Description         = "Can_Write_And_Read_ZonedDateTimeNullable_Stored_As_DateTimeOffset",
                StartZonedDateTime  = startZonedDateTime,
                FinishZonedDateTime = null
            };

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            ZonedDateTimeTestEntity retrievedEvent;

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    retrievedEvent = session.Get <ZonedDateTimeTestEntity>(testEvent.Id);
                    transaction.Commit();
                }

            Assert.That(retrievedEvent.StartZonedDateTime, Is.EqualTo(testEvent.StartZonedDateTime));
            Assert.That(retrievedEvent.FinishZonedDateTime, Is.EqualTo(null));
            Assert.That(retrievedEvent, Is.EqualTo(testEvent));
        }
        public void Can_Query_By_Equals_ZonedDateTime_Stored_As_DateTimeOffset()
        {
            var           timeZone            = DateTimeZoneProviders.Tzdb.GetSystemDefault();
            Instant       now                 = TestClock.Now;
            ZonedDateTime startZonedDateTime  = now.InZone(timeZone);
            ZonedDateTime finishZonedDateTime = startZonedDateTime.Plus(Duration.FromHours(1));

            var testEvent = new ZonedDateTimeTestEntity
            {
                Description         = "Can_Query_By_Equals_ZonedDateTime_Stored_As_DateTimeOffset",
                StartZonedDateTime  = startZonedDateTime,
                FinishZonedDateTime = finishZonedDateTime
            };


            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            var searchTime = new ZonedDateTime(finishZonedDateTime.ToInstant(), finishZonedDateTime.Zone);

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var query          = session.Query <ZonedDateTimeTestEntity>().Where(x => x.FinishZonedDateTime == searchTime);
                    var retrievedEvent = query.SingleOrDefault();
                    transaction.Commit();
                    Assert.That(testEvent, Is.Not.Null);
                    Assert.That(testEvent, Is.EqualTo(retrievedEvent));
                }
        }
        public void Can_Query_By_MoreThan_ZonedDateTime_Stored_As_DateTimeOffset()
        {
            var           timeZone            = DateTimeZoneProviders.Tzdb.GetSystemDefault();
            Instant       startInstant        = TestClock.Now.Plus(Duration.FromHours(24));
            ZonedDateTime startZonedDateTime  = startInstant.InZone(timeZone);
            ZonedDateTime finishZonedDateTime = startZonedDateTime.Plus(Duration.FromHours(1));

            var testEvent = new ZonedDateTimeTestEntity
            {
                Description         = "Can_Query_By_LessThan_ZonedDateTime_Stored_As_DateTimeOffset",
                StartZonedDateTime  = startZonedDateTime,
                FinishZonedDateTime = finishZonedDateTime
            };

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            ZonedDateTime beforeStart = startZonedDateTime.Minus(Duration.FromMinutes(1));

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var query = session.Query <ZonedDateTimeTestEntity>()
                                .Where(x => x.Id == testEvent.Id && x.StartZonedDateTime.ToDateTimeOffset() > beforeStart.ToDateTimeOffset());
                    var retrievedEvent = query.SingleOrDefault();
                    transaction.Commit();
                    Assert.That(testEvent, Is.Not.Null);
                    Assert.That(testEvent, Is.EqualTo(retrievedEvent));
                }

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var query = session.Query <ZonedDateTimeTestEntity>()
                                .Where(x => x.Id == testEvent.Id &&
                                       x.StartZonedDateTime.ToDateTimeOffset() > beforeStart.ToDateTimeOffset() &&
                                       x.FinishZonedDateTime.Value.ToDateTimeOffset() >= finishZonedDateTime.ToDateTimeOffset());
                    var retrievedEvent = query.SingleOrDefault();
                    transaction.Commit();
                    Assert.That(testEvent, Is.Not.Null);
                    Assert.That(testEvent, Is.EqualTo(retrievedEvent));
                }
        }
        public void Can_Write_ZonedDateTime_Stored_As_DateTimeOffset()
        {
            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var           timeZone           = DateTimeZoneProviders.Tzdb.GetSystemDefault();
                    Instant       now                = TestClock.Now;
                    ZonedDateTime startZonedDateTime = now.InZone(timeZone);

                    var testEvent = new ZonedDateTimeTestEntity
                    {
                        Description        = "Can_Write_ZonedDateTime_Stored_As_DateTimeOffset",
                        StartZonedDateTime = startZonedDateTime
                    };
                    session.Save(testEvent);
                    transaction.Commit();

                    Assert.That(testEvent.Id, Is.Not.Null);
                }
        }