public void SnapshotContainsIdentifier()
        {
            var domainObject = new DefaultDomainObject();

            var snapshot = domainObject.CreateSnapshot();

            Assert.False(string.IsNullOrWhiteSpace(snapshot.Identifier), "string.IsNullOrWhiteSpace(snapshot.Identifier)");
        }
        public void SnapshotContainsJson()
        {
            var domainObject = new DefaultDomainObject();

            var snapshot = domainObject.CreateSnapshot();

            Assert.False(string.IsNullOrWhiteSpace(snapshot.JsonData), "string.IsNullOrWhiteSpace(snapshot.JsonData)");
        }
        public void SnapshotIncludesSubProperties()
        {
            var domainObject = new DefaultDomainObject();

            var snapshot = domainObject.CreateSnapshot();

            Assert.Contains($"\"{nameof(DefaultDomainObject.FooBarSubProperty1)}\":{domainObject.FooBarSubProperty1}",
                            snapshot.JsonData,
                            StringComparison.OrdinalIgnoreCase);
        }
        public void SnapshotContainsVersion()
        {
            var domainObject = new DefaultDomainObject();

            domainObject.SetVersion(42, 4711);

            var snapshot = domainObject.CreateSnapshot();

            Assert.Equal(42, snapshot.Version);
            Assert.Equal(4711, snapshot.MetaVersion);
        }
        public void SnapshotAppliedInternally()
        {
            var domainObject = new DefaultDomainObject {
                FooBarSubProperty1 = 4242
            };

            domainObject.SetVersion(42, 42);

            var snapshot = domainObject.CreateSnapshot();

            Assert.RaisesAny <EventArgs>(e => domainObject.SnapshotAppliedInternally += e,
                                         e => domainObject.SnapshotAppliedInternally -= e,
                                         () => { domainObject.ApplySnapshot(snapshot); });

            Assert.Equal(42, domainObject.MetaVersion);
            Assert.Equal(42, domainObject.CurrentVersion);
        }