public void When_object_removed_modified_event_should_be_called()
        {
            var subscriber = Substitute.For <IDummySubscriber>();
            var item       = new
            {
                Id  = AutoFixture.Create <string>(),
                Str = AutoFixture.Create <string>(),
                Int = AutoFixture.Create <int>(),
                Obj = new
                {
                    Value = AutoFixture.Create <string>()
                }
            };
            var jObject    = JObject.FromObject(item);
            var collection = new StreamCollection(_name);

            collection.Added(item.Id, jObject);
            collection.Modified += subscriber.React;

            // Act
            collection.Removed(item.Id);

            // Assert
            subscriber.Received()
            .React(Arg.Any <object>(), Arg.Is <StreamCollectionEventArgs>(args =>
                                                                          args.ModificationType == ModificationType.Removed && args.Result == jObject
                                                                          ));
        }
        public void When_object_deleted_remove_from_collection()
        {
            var item = new
            {
                Id  = AutoFixture.Create <string>(),
                Str = AutoFixture.Create <string>(),
                Int = AutoFixture.Create <int>(),
                Obj = new
                {
                    Value = AutoFixture.Create <string>()
                }
            };
            var collection = new StreamCollection(_name);

            // Act
            collection.Added(item.Id, JObject.FromObject(item));
            collection.Removed(item.Id);

            // Assert
            var result = collection.GetAnonymousTypeById(item.Id, item);

            result.Should().BeNull();
        }
        public void When_object_removed_modified_event_should_be_called()
        {
            var subscriber = Substitute.For<IDummySubscriber>();
            var item = new
            {
                Id = AutoFixture.Create<string>(),
                Str = AutoFixture.Create<string>(),
                Int = AutoFixture.Create<int>(),
                Obj = new
                {
                    Value = AutoFixture.Create<string>()
                }
            };
            var jObject = JObject.FromObject(item);
            var collection = new StreamCollection(_name);
            collection.Added(item.Id, jObject);
            collection.Modified += subscriber.React;

            // Act
            collection.Removed(item.Id);

            // Assert
            subscriber.Received()
                      .React(Arg.Any<object>(), Arg.Is<StreamCollectionEventArgs>(args =>
                          args.ModificationType == ModificationType.Removed && args.Result == jObject
                          ));
        }
        public void When_object_deleted_remove_from_collection()
        {
            var item = new
            {
                Id = AutoFixture.Create<string>(),
                Str = AutoFixture.Create<string>(),
                Int = AutoFixture.Create<int>(),
                Obj = new
                {
                    Value = AutoFixture.Create<string>()
                }
            };
            var collection = new StreamCollection(_name);

            // Act
            collection.Added(item.Id, JObject.FromObject(item));
            collection.Removed(item.Id);

            // Assert
            var result = collection.GetAnonymousTypeById(item.Id, item);

            result.Should().BeNull();
        }