Пример #1
0
        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>());
        }
Пример #2
0
        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>());
        }
Пример #3
0
        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>());
        }
Пример #4
0
        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>());
        }
Пример #5
0
        private void MadeChange(EntitySync entity)
        {
            entity.UpdatedAt = SyncDateTimeProvider.UtcNow;
            if (entity.StringField == null)
            {
                entity.StringField = string.Empty;
            }

            entity.StringField += "Updated!";
        }
Пример #6
0
        public static EntitySync CreateEntity()
        {
            var entity = new EntitySync
            {
                Id        = 2,
                CreatedAt = RoundToSqlDateTime(DateTime.UtcNow)
            };

            return(entity);
        }
Пример #7
0
        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>());
        }
Пример #8
0
        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);
        }
Пример #9
0
        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());
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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>());
        }
Пример #14
0
        /// <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;
                }
            }
        }