public void detect_changes_then_clear_the_changes()
        {
            var a = Target.Random();
            var b = Target.Random();
            var c = Target.Random();
            var d = Target.Random();

            var serializer = new TestsSerializer();

            var map = new DirtyTrackingIdentityMap(serializer, null);


            var a1 = map.Get <Target>(a.Id, serializer.ToJson(a).ToReader(), null);

            a1.Long++;

            var b1 = map.Get <Target>(b.Id, serializer.ToJson(b).ToReader(), null);
            var c1 = map.Get <Target>(c.Id, serializer.ToJson(c).ToReader(), null);

            c1.Long++;

            var d1 = map.Get <Target>(d.Id, serializer.ToJson(d).ToReader(), null);


            var changes = map.DetectChanges();

            changes.Each(x => x.ChangeCommitted());


            map.DetectChanges().Any().ShouldBeFalse();
        }
        public void detect_changes_with_multiple_dirties()
        {
            var a = Target.Random();
            var b = Target.Random();
            var c = Target.Random();
            var d = Target.Random();

            var serializer = new TestsSerializer();

            var map = new DirtyTrackingIdentityMap(serializer, null);


            var a1 = map.Get <Target>(a.Id, serializer.ToJson(a).ToReader(), null);

            a1.Long++;

            var b1 = map.Get <Target>(b.Id, serializer.ToJson(b).ToReader(), null);
            var c1 = map.Get <Target>(c.Id, serializer.ToJson(c).ToReader(), null);

            c1.Long++;

            var d1 = map.Get <Target>(d.Id, serializer.ToJson(d).ToReader(), null);


            var changes = map.DetectChanges();

            changes.Count().ShouldBe(2);
            changes.Any(x => x.Id.As <Guid>() == a1.Id).ShouldBeTrue();
            changes.Any(x => x.Id.As <Guid>() == c1.Id).ShouldBeTrue();
        }
        public void detect_changes_with_no_changes()
        {
            var a = Target.Random();
            var b = Target.Random();
            var c = Target.Random();
            var d = Target.Random();

            var serializer = new TestsSerializer();

            var map = new DirtyTrackingIdentityMap(serializer, null);


            var a1 = map.Get <Target>(a.Id, serializer.ToJson(a).ToReader(), null);
            var b1 = map.Get <Target>(a.Id, serializer.ToJson(b).ToReader(), null);
            var c1 = map.Get <Target>(a.Id, serializer.ToJson(c).ToReader(), null);
            var d1 = map.Get <Target>(a.Id, serializer.ToJson(d).ToReader(), null);

            // no changes

            map.DetectChanges().Any().ShouldBeFalse();
        }
        public void detect_changes_then_clear_the_changes()
        {
            var a = Target.Random();
            var b = Target.Random();
            var c = Target.Random();
            var d = Target.Random();

            var serializer = new JilSerializer();

            var map = new DirtyTrackingIdentityMap(serializer, null);


            var a1 = map.Get<Target>(a.Id, serializer.ToJson(a));
            a1.Long++;

            var b1 = map.Get<Target>(b.Id, serializer.ToJson(b));
            var c1 = map.Get<Target>(c.Id, serializer.ToJson(c));
            c1.Long++;

            var d1 = map.Get<Target>(d.Id, serializer.ToJson(d));


            var changes = map.DetectChanges();

            changes.Each(x => x.ChangeCommitted());


            map.DetectChanges().Any().ShouldBeFalse();
        }
        public void detect_changes_with_multiple_dirties()
        {
            var a = Target.Random();
            var b = Target.Random();
            var c = Target.Random();
            var d = Target.Random();

            var serializer = new JilSerializer();

            var map = new DirtyTrackingIdentityMap(serializer, null);


            var a1 = map.Get<Target>(a.Id, serializer.ToJson(a));
            a1.Long++;

            var b1 = map.Get<Target>(b.Id, serializer.ToJson(b));
            var c1 = map.Get<Target>(c.Id, serializer.ToJson(c));
            c1.Long++;

            var d1 = map.Get<Target>(d.Id, serializer.ToJson(d));


            var changes = map.DetectChanges();
            changes.Count().ShouldBe(2);
            changes.Any(x => x.Id.As<Guid>() == a1.Id).ShouldBeTrue();
            changes.Any(x => x.Id.As<Guid>() == c1.Id).ShouldBeTrue();
        }
        public void detect_changes_with_no_changes()
        {
            var a = Target.Random();
            var b = Target.Random();
            var c = Target.Random();
            var d = Target.Random();

            var serializer = new JilSerializer();

            var map = new DirtyTrackingIdentityMap(serializer, null);


            var a1 = map.Get<Target>(a.Id, serializer.ToJson(a));
            var b1 = map.Get<Target>(a.Id, serializer.ToJson(b));
            var c1 = map.Get<Target>(a.Id, serializer.ToJson(c));
            var d1 = map.Get<Target>(a.Id, serializer.ToJson(d));

            // no changes

            map.DetectChanges().Any().ShouldBeFalse();
        }