public void Notify_Document_When_A_New_Data_Added() { var bsonvalue = new BsonValue(); var id = Guid.NewGuid(); using var db = new RealtimeLiteDatabase(new MemoryStream()); Item receivedItem = new Item(); db.Realtime.Collection <Item>("items").Id(new BsonValue(id)).Subscribe(item => receivedItem = item); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItem.Should().BeNull(); var item = new Item { Id = id, Name = "Mouse", Price = 10m }; db.GetCollection <Item>("items").Insert(item); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItem.Id.Should().Be(item.Id); receivedItem.Name.Should().Be(item.Name); receivedItem.Price.Should().Be(item.Price); }
public void Notify_Collection_Subscription_When_A_New_Data_Added() { using var db = new RealtimeLiteDatabase(new MemoryStream()); List <Item> receivedItems = null; // collection subscription db.Realtime.Collection <Item>("items").Subscribe(items => receivedItems = items); //waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItems.Should().BeEmpty(); var newItem = new Item { Name = "Keyboard", Price = 100m }; var newId = db.GetCollection <Item>("items").Insert(newItem); newId.IsGuid.Should().BeTrue(); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newId.AsGuid); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price); }
public void Notify_Document_And_Collection_Subscription_When_Broadcasting() { using var db = new RealtimeLiteDatabase(new MemoryStream()); Item receivedItem = null; List <Item> receivedItems = null; var newItem = new Item { Name = "Keyboard", Price = 100m }; var newId = db.GetCollection <Item>("items").Insert(newItem); newItem.Id = newId.AsGuid; // docuement subscription db.Realtime.Collection <Item>("items").Id(newId).Subscribe(item => receivedItem = item); // collection subscription db.Realtime.Collection <Item>("items").Subscribe(items => receivedItems = items); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); // document subscription received receivedItem.Should().NotBeNull(); receivedItem.Id.Should().Be(newItem.Id); receivedItem.Name.Should().Be(newItem.Name); receivedItem.Price.Should().Be(newItem.Price); // collection subscription received receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newItem.Id); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price); // update with expression (will broadcast) int updatedNum = db.GetCollection <Item>("items").UpdateMany(item => new Item { Id = item.Id, Name = item.Name, Price = item.Price * 2 }, i => i.Price > 0); updatedNum.Should().Be(1); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); // document subscription received receivedItem.Should().NotBeNull(); receivedItem.Id.Should().Be(newId.AsGuid); receivedItem.Name.Should().Be(newItem.Name); receivedItem.Price.Should().Be(newItem.Price * 2); // collection subscription received receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newId.AsGuid); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price * 2); }
public void Notify_Docuemnt_And_Collection_Subscription_When_The_Document_Modified() { using var db = new RealtimeLiteDatabase(new MemoryStream()); Item receivedItem = null; List <Item> receivedItems = null; var newItem = new Item { Name = "Keyboard", Price = 100m }; var newId = db.GetCollection <Item>("items").Insert(newItem); newItem.Id = newId.AsGuid; // docuement subscription db.Realtime.Collection <Item>("items").Id(newId).Subscribe(item => receivedItem = item); // collection subscription db.Realtime.Collection <Item>("items").Subscribe(items => receivedItems = items); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); // document subscription received receivedItem.Should().NotBeNull(); receivedItem.Id.Should().Be(newItem.Id); receivedItem.Name.Should().Be(newItem.Name); receivedItem.Price.Should().Be(newItem.Price); // collection subscription received receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newItem.Id); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price); // updating newItem newItem.Price = 99m; db.GetCollection <Item>("items").Update(newItem); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); // document subscription received receivedItem.Should().NotBeNull(); receivedItem.Id.Should().Be(newItem.Id); receivedItem.Name.Should().Be(newItem.Name); receivedItem.Price.Should().Be(newItem.Price); // collection subscription received receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newItem.Id); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price); }
public void Notify_Null_Document_If_Id_Does_Not_Exist_When_Subscribing() { using var db = new RealtimeLiteDatabase(new MemoryStream()); bool isNull = false; db.Realtime.Collection <Item>("items").Id(new BsonValue(Guid.NewGuid())).Subscribe(item => isNull = item is null); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); isNull.Should().BeTrue(); }
public void Notify_Collection_Subscription_When_A_Data_Upserted() { using var db = new RealtimeLiteDatabase(new MemoryStream()); List <Item> receivedItems = null; int rawOnNextCount = 0; // collection subscription using var colSub = db.Realtime.Collection <Item>("items").Subscribe(items => receivedItems = items); // collection raw subscription using var rawColSub = db.Realtime.Collection <Item>("items").Raw.Subscribe(liteCollection => rawOnNextCount++); //waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItems.Should().BeEmpty(); rawOnNextCount.Should().Be(1); var newItem = new Item { Id = Guid.NewGuid(), Name = "Keyboard", Price = 100m }; bool isInsert = db.GetCollection <Item>("items").Upsert(newItem); isInsert.Should().BeTrue(); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newItem.Id); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price); rawOnNextCount.Should().Be(2); // update item newItem.Price = 99m; isInsert = db.GetCollection <Item>("items").Upsert(newItem); isInsert.Should().BeFalse(); // waiting for notification Thread.Sleep(TimeSpan.FromSeconds(1)); receivedItems.Should().NotBeNull(); receivedItems.Should().HaveCount(1); receivedItems[0].Id.Should().Be(newItem.Id); receivedItems[0].Name.Should().Be(newItem.Name); receivedItems[0].Price.Should().Be(newItem.Price); rawOnNextCount.Should().Be(3); }
public static IRealtimeStateOperationBuilder <T> StateStore <T>(this RealtimeLiteDatabase db, string id) { if (db is null) { throw new ArgumentNullException(nameof(db)); } var collection = db.GetCollection <KVEntity <T> >(KVEntity <T> .DefaultCollection); var observable = db.Realtime.Collection <KVEntity <T> >(KVEntity <T> .DefaultCollection) .Id(id) .Select(e => e is null ? default : e.Value); return(new RealtimeStateOperationBuilder <T>(collection, id, observable)); }
public void TrajectoryObservable() { Trajectory[] res; using (var db = new RealtimeLiteDatabase(new MemoryStream())) //using(var _ = db.Realtime.Collection<Trajectory>("trajectories").Subscribe(x => res = x)) using (var _ = db.Realtime.Collection <Well>("wells") .Select(x => x.SelectMany(w => w.Trajectories)) .Subscribe(x => res = x.ToArray())) { var well = new Well(Guid.NewGuid(), "MainWell"); well.Add(new Trajectory(Guid.NewGuid(), "Traj1")); var wells = db.GetCollection <Well>("wells"); wells.Insert(well); well.Add(new Trajectory(Guid.NewGuid(), "Traj2")); wells.Update(well); } }
public void WellObservable() { List <Well> res; using (var db = new RealtimeLiteDatabase(new MemoryStream())) using (var _ = db.Realtime.Collection <Well>("wells") .Subscribe(x => res = x)) { var well = new Well(Guid.NewGuid(), "MainWell"); well.Add(new Trajectory(Guid.NewGuid(), "Traj1")); var wells = db.GetCollection <Well>("wells"); wells.Insert(well); well.Add(new Trajectory(Guid.NewGuid(), "Traj2")); wells.Update(well); } }
public void QueryWithoutRefs() { using (var db = new RealtimeLiteDatabase(new MemoryStream())) { var main = new Well(Guid.NewGuid(), "MainWell"); main.Add(new Trajectory(Guid.NewGuid(), "MainTraj")); var pilot = new Well(Guid.NewGuid(), "PilotWell"); pilot.Add(new Trajectory(Guid.NewGuid(), "PilotTraj")); var wells = db.GetCollection <Well>("wells"); wells.Insert(main); wells.Insert(pilot); var one = wells.FindById(main.Key); var all = wells.FindAll().ToArray(); var names = wells.Query().Select(x => x.Name).ToArray(); var firstTraj = wells.Query().Select(x => x.Trajectories.First()).ToArray(); var children1 = wells.Query().Select(x => x.Trajectories).ToArray(); var children2 = wells.Query().Select("Trajectories").ToDocuments(); } }
public void Be_Created_By_Constructors() { var fileName = Path.GetTempPath() + Path.GetRandomFileName(); { using var db1 = new RealtimeLiteDatabase(fileName); } { using var db2 = new RealtimeLiteDatabase(new ConnectionString { Filename = fileName }); } { using var db3 = new RealtimeLiteDatabase(new MemoryStream { }); } { using var db4 = new RealtimeLiteDatabase(new RealtimeLiteEngine(new LiteEngine())); } }
public SubscriptionBuilderTestBase() { _db = new RealtimeLiteDatabase(new MemoryStream()); }
static App() { DB = new RealtimeLiteDatabase(Constants.DatabasePath); }