public void UpdateModelViaUpdate_NotAllFieldsAreUpdated() { var ef = _contextFunc(); var obj = new DbSyncObject { Id = Guid.NewGuid().ToString(), Text = "123" }; ef.DbSyncObjects.Add(obj); ef.SaveChanges(); var date = DateTimeOffset.Now.AddMilliseconds(1); Thread.Sleep(3); obj.Text = "456"; ef.SaveChanges(); var result = _controller.Download(new DownloadDataRequest { LastChangeTime = new Dictionary <string, DateTimeOffset> { { "all", date } }, Types = new[] { nameof(DbSyncObject) }, }, _user); result.ChangedObjects.Select(x => x.MobilePrimaryKey).Should().BeEquivalentTo(obj.Id); result.ChangedObjects[0].SerializedObject.Should().NotContainEquivalentOf($"\"{nameof(DbSyncObject.Id)}\""); result.ChangedObjects[0].SerializedObject.Should().NotContainEquivalentOf($"\"{nameof(DbSyncObject.MobilePrimaryKey)}\""); result.ChangedObjects[0].SerializedObject.Should().NotContainEquivalentOf($"\"{nameof(DbSyncObject.Tags)}\""); result.ChangedObjects[0].SerializedObject.Should().ContainEquivalentOf($"\"{nameof(DbSyncObject.Text)}\""); DateTime.UtcNow.Subtract(result.LastChange["all"].DateTime).Should().BeLessThan(TimeSpan.FromSeconds(1)); }
public void SomeData_WithOldNewerTime_DoReturn() { var ef = _contextFunc(); var obj = new DbSyncObject { Id = Guid.NewGuid().ToString(), Text = "123" }; ef.DbSyncObjects.Add(obj); ef.SaveChanges(); var result = _controller.Download(new DownloadDataRequest() { LastChangeTime = new Dictionary <string, DateTimeOffset>() { { "all", new DateTimeOffset(DateTime.Now.AddDays(-2)) } }, Types = new[] { nameof(DbSyncObject) }, }, _user); result.ChangedObjects.Select(x => x.MobilePrimaryKey).Should().BeEquivalentTo(obj.Id); DateTime.UtcNow.Subtract(result.LastChange["all"].DateTime).Should().BeLessThan(TimeSpan.FromSeconds(1)); }
public void UpdateData() { // Arrange _syncContextFunc().SyncStatusServerObjects.Count().Should().Be(0); var db = _contextFunc(); var objectToUpdate = new DbSyncObject { Id = Guid.NewGuid().ToString(), Text = "asd" }; db.DbSyncObjects.Add(objectToUpdate); db.SaveChanges(); // Act Thread.Sleep(1); objectToUpdate.Text = "qwe"; db.SaveChanges(); // Assert _syncContextFunc().SyncStatusServerObjects.Count().Should().Be(1); var syncObject = _syncContextFunc().SyncStatusServerObjects.ToList()[0]; var textChange = syncObject.ColumnChangeDates["Text"]; var idChange = syncObject.ColumnChangeDates["Id"]; var tagsChange = syncObject.ColumnChangeDates["Tags"]; idChange.Should().Be(tagsChange); textChange.Should().BeAfter(idChange); }
public void Delete() { var ef = _contextFunc(); var obj = new DbSyncObject { Id = "2", Text = "123" }; ef.DbSyncObjects.Add(obj); ef.SaveChanges(); Thread.Sleep(2); var time = DateTimeOffset.Now; Thread.Sleep(2); ef.DbSyncObjects.Remove(obj); ef.SaveChanges(); var result = _controller.Download(new DownloadDataRequest { LastChangeTime = new Dictionary <string, DateTimeOffset> { { "all", time } }, Types = new[] { nameof(DbSyncObject) }, }, _user); string.Join(", ", result.ChangedObjects) .Should().BeEquivalentTo("Type: DbSyncObject, Key: 2, Deleted"); }
public void KnownType_Saved1() { _contextFunc().DbSyncObjects.Count().Should().Be(0); var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObject))); var objectToSave = new DbSyncObject() { Text = "123123123", Id = Guid.NewGuid().ToString() }; var result = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = "DbSyncObject", PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = JsonConvert.SerializeObject(objectToSave), } } }, null); result.Results.Count.Should().Be(1); CheckNoError(result); result.Results[0].MobilePrimaryKey.Should().Be(objectToSave.MobilePrimaryKey); _contextFunc().DbSyncObjects.Count().Should().Be(1); }
public void Attach_DeletedObject() { var time = DateTimeOffset.UtcNow; Thread.Sleep(10); var db = _contextFunc(); var obj = new DbSyncObject { Id = "2", Text = "x", Tags = "c" }; db.DbSyncObjects.Add(obj); db.SaveChanges(); db.CreateSyncStatusContext().SyncStatusServerObjects.Count().Should().Be(1); db.EnableSyncTracking = false; db.DbSyncObjects.Remove(obj); db.SaveChanges(); var res = _processor.Download( new DownloadDataRequest { Types = new[] { nameof(DbSyncObject) }, LastChangeTime = new Dictionary <string, DateTimeOffset> { { "all", time } }, }, _user); string.Join(", ", res.ChangedObjects) .Should().BeEquivalentTo("Type: DbSyncObject, Key: 2, SerializedObject: { \"Text\": \"x\", \"Tags\": \"c\", \"Id\": \"2\"}"); db.AttachDeletedObject(nameof(DbSyncObject), "2"); var res2 = _processor.Download( new DownloadDataRequest { Types = new[] { nameof(DbSyncObject) }, LastChangeTime = new Dictionary <string, DateTimeOffset>() { { "all", time } }, }, _user); string.Join(", ", res2.ChangedObjects) .Should().BeEquivalentTo("Type: DbSyncObject, Key: 2, Deleted"); }
public void Attach_UpdatedObject() { var db = _contextFunc(); var obj = new DbSyncObject { Id = "2", Text = "x", Tags = "c", }; db.DbSyncObjects.Add(obj); db.SaveChanges(); Thread.Sleep(10); db.CreateSyncStatusContext().SyncStatusServerObjects.Count().Should().Be(1); db.EnableSyncTracking = false; obj.Text = "qwe"; db.SaveChanges(); var res = _processor.Download( new DownloadDataRequest() { Types = new[] { nameof(DbSyncObject) }, LastChangeTime = DateTimeOffset.MinValue.ToDictionary(), }, _user); string.Join(", ", res.ChangedObjects) .Should().BeEquivalentTo("Type: DbSyncObject, Key: 2, SerializedObject: { \"Text\": \"x\", \"Tags\": \"c\", \"Id\": \"2\"}"); db.AttachObject(nameof(DbSyncObject), "2"); db.CreateSyncStatusContext().SyncStatusServerObjects.Count().Should().Be(1); var syncStatus = db.CreateSyncStatusContext().SyncStatusServerObjects.First(); syncStatus.ColumnChangeDates[nameof(obj.Text)].Should() .BeAfter(syncStatus.ColumnChangeDates[nameof(obj.Tags)]); var res2 = _processor.Download( new DownloadDataRequest() { Types = new[] { nameof(DbSyncObject) } }, _user); string.Join(", ", res2.ChangedObjects) .Should().BeEquivalentTo("Type: DbSyncObject, Key: 2, SerializedObject: { \"Text\": \"qwe\", \"Tags\": \"c\", \"Id\": \"2\"}"); }
public void EF_CheckAndProcessCanRetrieveUnmodifiedEntityFromDatabase() { var db = _contextFunc(); var obj = new DbSyncObject() { Id = "123", Text = "asd" }; db.DbSyncObjects.Add(obj); db.SaveChanges(); var db2 = _contextFunc(); var obj2 = db2.DbSyncObjects.Find("123"); obj2.Text = "zxc"; var obj2Entry = db2.Entry(obj2); var m01 = obj2Entry.Property("Text").IsModified; var m02 = obj2Entry.Property("Tags").IsModified; obj2Entry.State = EntityState.Detached; var obj3 = db2.DbSyncObjects.Find("123"); obj3.Text.Should().Be("asd"); try { obj2Entry.State = EntityState.Modified; } catch (InvalidOperationException) { db2.Entry(obj3).State = EntityState.Detached; obj2Entry.State = EntityState.Modified; } var entry = db2.ChangeTracker.Entries().First(); var m1 = entry.Property("Text").IsModified; var m2 = entry.Property("Tags").IsModified; db2.SaveChanges(); var db3 = _contextFunc(); var obj4 = db3.DbSyncObjects.Find("123"); obj4.Text.Should().Be("zxc"); }
public void Deleted() { _contextFunc().DbSyncObjects.Count().Should().Be(0); var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObject))); var objectToSave = new DbSyncObject() { Text = "123123123", Id = Guid.NewGuid().ToString() }; var db = _contextFunc(); db.DbSyncObjects.Add(objectToSave); db.SaveChanges(); Func <DownloadDataResponse> getDownloaded = () => controller.Download(new DownloadDataRequest() { Types = new[] { nameof(DbSyncObject) }, }, new { }); var downloaded1 = getDownloaded(); downloaded1.ChangedObjects.Count.Should().Be(1); var result = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = "", IsDeleted = true, } } }, null); CheckNoError(result); _contextFunc().DbSyncObjects.Find(objectToSave.Id).Should().BeNull(); var downloaded2 = getDownloaded(); downloaded2.ChangedObjects.Count.Should().Be(0); //deleted items should not be downloaded during initial DB download }
public void Download_AlreadyDownloadedDataIsNotReturned() { var ef = _contextFunc(); var obj = new DbSyncObject { Id = Guid.NewGuid().ToString(), Text = "123" }; ef.DbSyncObjects.Add(obj); ef.SaveChanges(); var result = _controller.Download(new DownloadDataRequest { LastChangeTime = new Dictionary <string, DateTimeOffset> { { "all", new DateTimeOffset(DateTime.Now.AddDays(-2)) } }, Types = new[] { nameof(DbSyncObject) }, }, _user); result.ChangedObjects.Count.Should().Be(1); var result2 = _controller.Download(new DownloadDataRequest() { LastChangeTime = result.LastChange, Types = new[] { nameof(DbSyncObject) }, }, _user); result2.ChangedObjects.Count.Should().Be(0); Thread.Sleep(10); obj.Text = "rty"; ef.SaveChanges(); var result3 = _controller.Download(new DownloadDataRequest() { LastChangeTime = result2.LastChange, Types = new[] { nameof(DbSyncObject) }, }, _user); result3.ChangedObjects.Count.Should().Be(1); }
public void UpdateModelViaAttachToContext_NotAllFieldsAreUpdated() { var ef = _contextFunc(); var obj = new DbSyncObject { Id = Guid.NewGuid().ToString(), Text = "123" }; ef.DbSyncObjects.Add(obj); ef.SaveChanges(); var date = DateTimeOffset.Now.AddMilliseconds(1); Thread.Sleep(3); var ef2 = _contextFunc(); var obj2 = new DbSyncObject { Id = obj.Id, Text = "123456" }; ef2.Entry(obj2).State = EntityState.Modified; ef2.SaveChanges(); var result = _controller.Download(new DownloadDataRequest() { LastChangeTime = new Dictionary <string, DateTimeOffset>() { { "all", date } }, Types = new[] { nameof(DbSyncObject) }, }, _user); result.ChangedObjects.Select(x => x.MobilePrimaryKey).Should().BeEquivalentTo(new[] { obj.Id }); //result.ChangedObjects.Select(x => x.SerializedObject).Should().BeEquivalentTo(""{\r\n \"Text\": \"123456\",\r\n \"Tags\": null,\r\n \"Id\": \"b3586bfb-6e34-4daa-95c1-ddbeb02b4006\"\r\n}""); result.ChangedObjects[0].SerializedObject.Should().NotContainEquivalentOf($"\"{nameof(DbSyncObject.Id)}\""); result.ChangedObjects[0].SerializedObject.Should().NotContainEquivalentOf($"\"{nameof(DbSyncObject.Tags)}\""); result.ChangedObjects[0].SerializedObject.Should().ContainEquivalentOf($"\"{nameof(DbSyncObject.Text)}\""); DateTime.UtcNow.Subtract(result.LastChange["all"].DateTime).Should().BeLessThan(TimeSpan.FromSeconds(1)); }
public void AddData() { // Arrange _syncContextFunc().SyncStatusServerObjects.Count().Should().Be(0); var db = _contextFunc(); var objectToAdd = new DbSyncObject { Id = Guid.NewGuid().ToString(), Text = "TestText" }; // Act db.DbSyncObjects.Add(objectToAdd); db.SaveChanges(); // Assert _syncContextFunc().SyncStatusServerObjects.Count().Should().Be(1); var syncObject = _syncContextFunc().SyncStatusServerObjects.First(); var res = JsonConvert.DeserializeObject <DbSyncObject>(syncObject.FullObjectAsJson); res.MobilePrimaryKey.Should().Be(objectToAdd.Id); res.Text.Should().Be("TestText"); }
public void Upload_Delete_UploadAgain() { var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObject))); Func <DownloadDataResponse> getDownloaded = () => controller.Download(new DownloadDataRequest() { Types = new[] { nameof(DbSyncObject) }, }, new { }); Func <string> dataToCompare = () => { var data = getDownloaded(); return(string.Join(", ", data.ChangedObjects.Select(x => $"{x.IsDeleted}"))); }; var objectToSave = new DbSyncObject() { Text = "123123123", Id = Guid.NewGuid().ToString() }; var result1 = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = JsonConvert.SerializeObject(objectToSave), //IsDeleted = true, } } }, null); dataToCompare().Should().BeEquivalentTo("False"); var result2 = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = "", IsDeleted = true, } } }, null); //dataToCompare().Should().BeEquivalentTo("True"); objectToSave.Text = "zxc"; var result3 = controller.Upload(new UploadDataRequest() { ChangeNotifications = { new UploadRequestItem() { Type = nameof(DbSyncObject), PrimaryKey = objectToSave.MobilePrimaryKey, SerializedObject = JsonConvert.SerializeObject(objectToSave), IsDeleted = false, } } }, null); dataToCompare().Should().BeEquivalentTo("False"); }