public void EventsComponent() { var x = new FromNhibMetadata { Id = 3, StrValue = "12345", DateNotNull = DateTime.Today, Dec = 123.45M, EnumV = En1.v1, Cmp = new Cmp1 { CEnumV = (En1)66, CStrValue = "1234" } }; x.Cmps2.Add(new Cmp2 { CEnumV1 = (En1)66, CStrValue1 = "12345XXXX" }); using (var s = OpenSession()) using (var tx = s.BeginTransaction()) { Assert.That( () => { s.Save(x); tx.Commit(); }, Throws.InstanceOf <InvalidStateException>() .And.Property(nameof(InvalidStateException.InvalidValues)).Length.EqualTo(4), "Saved entity should have raised 4 validation errors"); } x.Cmps2.Clear(); x.Cmp.CEnumV = En1.v1; x.Cmp.CStrValue = "123"; x.Cmps2.Add(new Cmp2 { CEnumV1 = En1.v2, CStrValue1 = "12345" }); using (var s = OpenSession()) using (var t = s.BeginTransaction()) { Assert.That( () => { s.Save(x); t.Commit(); }, Throws.Nothing, "Valid entity caused exception on save"); } }
public void Events() { var x = new FromNhibMetadata { Id = 1, StrValue = "123456", DateNotNull = DateTime.Today, Dec = 1234.567M, EnumV = (En1)42 }; //x.DateNotNull = null; //!! NHib check not-null itself before integrated validators and throw exception // Why it does not check at the same place Length, Precision And scale and so on, if all this known from it configuration? using (var s = OpenSession()) using (var tx = s.BeginTransaction()) { Assert.That( () => { s.Save(x); tx.Commit(); }, Throws.InstanceOf <InvalidStateException>() .And.Property(nameof(InvalidStateException.InvalidValues)).Length.EqualTo(3), "Saved entity should have raised 3 validation errors"); } x.DateNotNull = null; //But if we will call validators before SavingToNHib Null will be checked var ve = Cfg.Environment.SharedEngineProvider.GetEngine(); var ivals = ve.Validate(x); Assert.That(ivals, Has.Length.EqualTo(4), "Unexpected validation error count for first entity with null date"); // Don't throw exception if it is valid x = new FromNhibMetadata { Id = 2, StrValue = "12345", DateNotNull = DateTime.Today, Dec = 123.45M, EnumV = En1.v1 }; using (var s = OpenSession()) using (var t = s.BeginTransaction()) { Assert.That( () => { s.Save(x); t.Commit(); }, Throws.Nothing, "Valid entity caused exception on save"); } // Update check using (var s = OpenSession()) using (var t = s.BeginTransaction()) { var saved = s.Get <FromNhibMetadata>(2); saved.StrValue = "123456"; //saved.DateNotNull = null; saved.DateNotNull = DateTime.Now; saved.Dec = 5678.900M; saved.EnumV = (En1)66; Assert.That( () => t.Commit(), Throws.InstanceOf <InvalidStateException>() .And.Property(nameof(InvalidStateException.InvalidValues)).Length.EqualTo(3), "Updated entity should have raised 3 validation errors"); } using (var s = OpenSession()) using (var t = s.BeginTransaction()) { var saved = s.Get <FromNhibMetadata>(2); saved.StrValue = "123"; saved.DateNotNull = DateTime.Now; saved.Dec = 876.54M; saved.EnumV = En1.v2; Assert.That( () => t.Commit(), Throws.Nothing, "Valid entity caused exception on update"); } }