public async Task UtcReadWrite_SuccessAsync() { TimestampUtcClass entity; // Save using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { // Create a new datetime value and round it to the precision that the database supports. This // code basically the same as in the implementation but here to guard posible changes. var resolution = session.GetSessionImplementation().Factory.Dialect.TimestampResolutionInTicks; var next = DateTime.UtcNow; next = next.AddTicks(-(next.Ticks % resolution)); entity = new TimestampUtcClass { Id = 1, Value = next }; await(session.SaveAsync(entity)); await(tx.CommitAsync()); session.Close(); } // Retrieve and compare using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { var result = await(session.GetAsync <TimestampUtcClass>(entity.Id)); Assert.IsNotNull(result, "Entity not saved or cannot be retrieved by its key."); // Property: Value Assert.AreEqual(DateTimeKind.Utc, result.Value.Kind, "Kind is NOT Utc"); Assert.AreEqual(entity.Value.Ticks, result.Value.Ticks, "Value should be the same."); // Property: Revision var revision = result.Revision; Assert.AreEqual(DateTimeKind.Utc, revision.Kind, "Kind is NOT Utc"); var differenceInMinutes = Math.Abs((revision - DateTime.UtcNow).TotalMinutes); // Take a wide margin for accounting for sometimes bad build servers performances. Assert.Less(differenceInMinutes, 2, "Difference should be less than 2 minutes."); await(tx.CommitAsync()); session.Close(); } // Delete using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { var result = await(session.GetAsync <TimestampUtcClass>(entity.Id)); await(session.DeleteAsync(result)); await(tx.CommitAsync()); session.Close(); } }
public void UtcReadWrite_Success() { TimestampUtcClass entity; // Save using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { // Create a new datetime value and round it to the precision that the database supports. This // code basically the same as in the implementation but here to guard posible changes. var resolution = session.GetSessionImplementation().Factory.Dialect.TimestampResolutionInTicks; var next = DateTime.UtcNow; next = next.AddTicks(-(next.Ticks % resolution)); entity = new TimestampUtcClass { Id = 1, Value = next }; session.Save(entity); tx.Commit(); session.Close(); } // Retrieve and compare using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { var result = session.Get <TimestampUtcClass>(entity.Id); Assert.IsNotNull(result, "Entity not saved or cannot be retrieved by its key."); // Property: Value Assert.AreEqual(DateTimeKind.Utc, result.Value.Kind, "Kind is NOT Utc"); Assert.AreEqual(entity.Value.Ticks, result.Value.Ticks, "Value should be the same."); // Property: Revision var revision = result.Revision; Assert.AreEqual(DateTimeKind.Utc, revision.Kind, "Kind is NOT Utc"); var differenceInSeconds = Math.Abs((revision - DateTime.UtcNow).TotalSeconds); Assert.IsTrue(differenceInSeconds < 1d, "Difference should be less then 1 second."); tx.Commit(); session.Close(); } // Delete using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { var result = session.Get <TimestampUtcClass>(entity.Id); session.Delete(result); tx.Commit(); session.Close(); } }
public async Task LocalReadWrite_FailAsync(DateTimeKind kind) { var entity = new TimestampUtcClass { Id = 1, Value = DateTime.SpecifyKind(DateTime.Now, kind) }; using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { await(session.SaveAsync(entity)); Assert.That(() => session.FlushAsync(), Throws.TypeOf <PropertyValueException>()); await(tx.RollbackAsync()); } }
public void LocalReadWrite_Fail(DateTimeKind kind) { var entity = new TimestampUtcClass { Id = 1, Value = DateTime.SpecifyKind(DateTime.Now, kind) }; using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { session.Save(entity); Assert.That(() => session.Flush(), Throws.TypeOf <PropertyValueException>()); tx.Rollback(); } }