public void DeleteEntityOnCLientAndInsertRelatedOnRemote_DeleteRelatedOnRemote() { var entity = new EntitySync { UniqueIdentifier = "AA" }; Desktop.Repository <EntitySync, IEntitySync>().Save(entity); SyncRemote(); //INsert related on remote var related = new EntityRelated { RelatedId = entity.Id }; FirstRemote.Repository <EntityRelated, IEntityRelated>().Save(related); //Delete foreign key reference on desktop Desktop.Repository <EntitySync, IEntitySync>().Delete(entity); SyncRemote(); AssertSyncRepository(Desktop.Repository <EntityRelated, IEntityRelated>(), FirstRemote.Repository <EntityRelated, IEntityRelated>()); AssertSyncRepository(Desktop.Repository <EntitySync, IEntitySync>(), FirstRemote.Repository <EntitySync, IEntitySync>()); }
public void DeleteEntityOnClientAndInsertNotRelatedRemote_InsertOnRemote() { var entity = new EntitySync { UniqueIdentifier = "AA" }; var entityToDelete = new EntitySync { UniqueIdentifier = "AB" }; Desktop.Repository <EntitySync, IEntitySync>().Save(entity); Desktop.Repository <EntitySync, IEntitySync>().Save(entityToDelete); SyncRemote(); //INsert related on remote var related = new EntityRelated { RelatedId = entity.Id }; FirstRemote.Repository <EntityRelated, IEntityRelated>().Save(related); //Delete foreign key reference on desktop Desktop.Repository <EntitySync, IEntitySync>().Delete(entityToDelete); SyncRemote(); Assert.AreEqual(Desktop.Repository <EntitySync, IEntitySync>().Count(), 1); Assert.AreEqual(Desktop.Repository <EntityRelated, IEntityRelated>().Count(), 1); AssertSyncRepository(Desktop.Repository <EntityRelated, IEntityRelated>(), FirstRemote.Repository <EntityRelated, IEntityRelated>()); AssertSyncRepository(Desktop.Repository <EntitySync, IEntitySync>(), FirstRemote.Repository <EntitySync, IEntitySync>()); }
public void TwiceInsertNotInSameOrderWithUnicityConstraint_RelationShouldBeUpdated() { var entityDesktopA = new EntitySync { UniqueIdentifier = "A" }; var entityDesktopB = new EntitySync { UniqueIdentifier = "B" }; Desktop.Repository <EntitySync, IEntitySync>().Save(entityDesktopA); Desktop.Repository <EntitySync, IEntitySync>().Save(entityDesktopB); var entityRemoteA = new EntitySync { UniqueIdentifier = "A" }; var entityRemoteB = new EntitySync { UniqueIdentifier = "B" }; FirstRemote.Repository <EntitySync, IEntitySync>().Save(entityRemoteB); FirstRemote.Repository <EntitySync, IEntitySync>().Save(entityRemoteA); var entityRelatedOnA = new EntityRelated { RelatedId = entityRemoteA.Id }; FirstRemote.Repository <EntityRelated, IEntityRelated>().Save(entityRelatedOnA); SyncRemote(); AssertSyncRepository(Desktop.Repository <EntitySync, IEntitySync>(), FirstRemote.Repository <EntitySync, IEntitySync>()); }
public void ConflictOnUpdatedEntityLinkedToAnInsertedEntity() { var entity = new EntitySync { UniqueIdentifier = "AA" }; Desktop.Repository <EntitySync, IEntitySync>().Save(entity); var related = new EntityRelated { RelatedId = entity.Id }; Desktop.Repository <EntityRelated, IEntityRelated>().Save(related); SyncRemote(); FirstRemote.Repository <EntityRelated, IEntityRelated>().Save(related); entity = new EntitySync { UniqueIdentifier = "BB" }; Desktop.Repository <EntitySync, IEntitySync>().Save(entity); related.RelatedId = entity.Id; Desktop.Repository <EntityRelated, IEntityRelated>().Save(related); SyncRemote(); AssertSyncRepository(Desktop.Repository <EntitySync, IEntitySync>(), FirstRemote.Repository <EntitySync, IEntitySync>()); }
private void MadeChange(EntitySync entity) { entity.UpdatedAt = SyncDateTimeProvider.UtcNow; if (entity.StringField == null) { entity.StringField = string.Empty; } entity.StringField += "Updated!"; }
public static EntitySync CreateEntity() { var entity = new EntitySync { Id = 2, CreatedAt = RoundToSqlDateTime(DateTime.UtcNow) }; return(entity); }
public void Sync_EntityCreatedDeleteOnRemote_UpdateNoGenerateConflict() { var entity = new EntitySync(); FirstRemote.Repository <EntitySync, IEntitySync>().Save(entity); FirstRemote.Repository <EntitySync, IEntitySync>().Delete(entity); SyncRemote(); AssertSyncRepository(Desktop.Repository <EntitySync, IEntitySync>(), FirstRemote.Repository <EntitySync, IEntitySync>()); }
public void GetLocalChange_NewEntity_ShouldGettingIt() { var entity = new EntitySync(); Desktop.Save <EntitySync, IEntitySync>(entity); var localChange = GetLocalChange(); var entityChangeset = localChange.EntityChangeset[0]; Assert.AreEqual(1, entityChangeset.Insert.Count); var insertEntity = entityChangeset.Insert[0]; AssertFieldCount(insertEntity); AssertField(insertEntity.Fields[0], EntityBase <object> .IdColumnName, entity.Id); }
public void Sync_AfterRententionTimeIsReach_DataOnRemoteShoudBeCleaned() { var entity = new EntitySync(); FirstRemote.Repository <EntitySync, IEntitySync>().Save(entity); SyncRemote(); Assert.AreEqual(1, Desktop.Repository <EntitySync, IEntitySync>().Count()); Assert.AreEqual(1, FirstRemote.Repository <EntitySync, IEntitySync>().Count()); SomeDayLater(EntitySync.RentionTimeClient); SyncRemote(); Assert.AreEqual(1, Desktop.Repository <EntitySync, IEntitySync>().Count()); Assert.AreEqual(0, FirstRemote.Repository <EntitySync, IEntitySync>().Count()); }
public void GetLocalChange_DeleteEntity_ShouldGettingIt() { var entity = new EntitySync(); Desktop.Save <EntitySync, IEntitySync>(entity); Desktop.Delete <EntitySync, IEntitySync>(entity); var localChange = GetLocalChange(); var entityChangeset = localChange.EntityChangeset[0]; Assert.AreEqual(1, entityChangeset.Delete.Count); Assert.AreEqual(EntitySync.TableName, entityChangeset.EntityName); var deleteEntity = entityChangeset.Delete[0]; AssertTombstoneFieldCount(deleteEntity); AssertField(deleteEntity.Fields[0], EntitySync.ColumnNameCreatedAt, SyncDateTimeProvider.UtcNow); AssertField(deleteEntity.Fields[1], EntitySync.ColumnNameUpdatedAt, DBNull.Value); AssertField(deleteEntity.Fields[2], EntitySync.ColumnNameLastSyncAt, DBNull.Value); AssertField(deleteEntity.Fields[3], EntitySync.IdColumnName, entity.Id); }
public void GetLocalChange_UpdateEntity_ShouldGettingIt() { SyncSession.LowBoundaryAnchor = SyncDateTimeProvider.UtcNow; var entity = new EntitySync(); Desktop.Save <EntitySync, IEntitySync>(entity); SomeTimeLater(); Desktop.Save <EntitySync, IEntitySync>(entity); SomeTimeLater(); var localChange = GetLocalChange(); var entityChangeset = localChange.EntityChangeset[0]; Assert.AreEqual(1, entityChangeset.Update.Count); var updateEntity = entityChangeset.Update[0]; AssertFieldCount(updateEntity); AssertField(updateEntity.Fields[0], EntitySync.IdColumnName, entity.Id); }
public static void ConfigureStructureMap() { IDataAccess dataAccess = new DataAccess(); ServiceLocator.AddItem(typeof(IDataAccess), dataAccess); IEntitySync entitySync = new EntitySync(); ServiceLocator.AddItem(typeof(IEntitySync), entitySync); IPreciousMetalsPriceApi preciousMetalsPriceApi = new PreciousMetalsPriceApi(); ServiceLocator.AddItem(typeof(IPreciousMetalsPriceApi), preciousMetalsPriceApi); IAccountInfoHandler accountInfoHandler = new AccountInfoHandler(); ServiceLocator.AddItem(typeof(IAccountInfoHandler), accountInfoHandler); IMintApi mintApi = new MintApi(); ServiceLocator.AddItem(typeof(IMintApi), mintApi); }
public void Sync_EntityReferencesInFKDeletedInLocal_IsDeleteOnRemote() { var entity = new EntitySync { UniqueIdentifier = "AA" }; Desktop.Repository <EntitySync, IEntitySync>().Save(entity); var related = new EntityRelated { RelatedId = entity.Id }; Desktop.Repository <EntityRelated, IEntityRelated>().Save(related); SyncRemote(); related.RelatedId = null; Desktop.Repository <EntityRelated, IEntityRelated>().Save(related); Desktop.Repository <EntitySync, IEntitySync>().Delete(entity); SyncRemote(); Assert.AreEqual(Desktop.Repository <EntitySync, IEntitySync>().Count(), 0); AssertSyncRepository(Desktop.Repository <EntitySync, IEntitySync>(), FirstRemote.Repository <EntitySync, IEntitySync>()); }
/// <summary> Add or updates objects retrieved by other players </summary> private void addOrUpdatCObjects(EntitySync data) { //Add entity if (!Game1.Inst.Scene.EntityHasComponent <CTransform>(data.ID)) { var currentScene = Game1.Inst.Scene; //calculate BoundindBox since we have the data do this data.CBody.Aabb = new BoundingBox(-data.CBody.Radius * Vector3.One, data.CBody.Radius * Vector3.One); Game1.Inst.Scene.AddComponent(data.ID, data.CBody); Game1.Inst.Scene.AddComponent(data.ID, data.CTransform); Func <float, Matrix> aniFunc = null; if (data.IsPlayer) { Game1.Inst.Scene.AddComponent(data.ID, new CPlayer()); aniFunc = SceneUtils.playerAnimation(data.ID, 24, 0.1f); } if (data.ModelFileName == "hen") { aniFunc = SceneUtils.wiggleAnimation(data.ID); // TODO: Make animals have different animations based on state CAnimation normalAnimation = new CHenNormalAnimation { animFn = aniFunc }; // Set a random offset to animation so not all animals are synced normalAnimation.CurrentKeyframe = rnd.Next(normalAnimation.Keyframes.Count - 1); // Random animation speed between 0.8-1.0 normalAnimation.AnimationSpeed = (float)rnd.NextDouble() * 0.2f + 0.8f; currentScene.AddComponent <C3DRenderable>(data.ID, normalAnimation); } else { Game1.Inst.Scene.AddComponent <C3DRenderable>(data.ID, new CImportedModel { model = Game1.Inst.Content.Load <Model>("Models/" + data.ModelFileName), fileName = data.ModelFileName, animFn = aniFunc }); } Game1.Inst.Scene.AddComponent(data.ID, new CSyncObject { Owner = false }); newCBody.Add(data.ID, data.CBody); newTransform.Add(data.ID, data.CTransform); prevCBody.Add(data.ID, data.CBody); prevTransform.Add(data.ID, data.CTransform); } else { prevCBody[data.ID] = newCBody[data.ID]; prevTransform[data.ID] = newTransform[data.ID]; if (string.IsNullOrEmpty(data.ModelFileName)) { newCBody[data.ID].Velocity = data.CBody.Velocity; newTransform[data.ID].Position = data.CTransform.Position; newTransform[data.ID].Rotation = data.CTransform.Rotation; } else { newTransform[data.ID] = data.CTransform; newCBody[data.ID] = data.CBody; } } }