예제 #1
0
        public void Authorized()
        {
            var result1 = _processor.Upload(new UploadDataRequest()
            {
                ChangeNotifications = new[]
                {
                    new UploadRequestItem()
                    {
                        PrimaryKey       = "123",
                        Type             = "DbSyncObject",
                        SerializedObject = JsonConvert.SerializeObject(new DbSyncObject()
                        {
                            Id = "123", Text = "zxc", Tags = "u1"
                        }),
                    }
                }
            }, new LimitedUser());


            var result = _processor.Download(new DownloadDataRequest()
            {
                LastChangeTime = new DateTimeOffset(DateTime.Now).AddHours(-1).ToDictionary(),
                Types          = new[] { nameof(DbSyncObject) },
            }, new LimitedUser(new[] { "u2" }));

            result.ChangedObjects.Should().BeEmpty();

            var result2 = _processor.Download(new DownloadDataRequest()
            {
                LastChangeTime = new DateTimeOffset(DateTime.Now).AddHours(-1).ToDictionary(),
                Types          = new[] { nameof(DbSyncObject) },
            }, new LimitedUser(new[] { "u1" }));

            result2.ChangedObjects.Count.Should().Be(1);
        }
예제 #2
0
        public void UploadData_ModifyObjectWithinCheckAndProcess_RequestObject()
        {
            _contextFunc().DbSyncObjectWithIgnoredFields.Count().Should().Be(0);

            var config = new Mock <ShareEverythingConfiguration>(_contextFunc, typeof(DbSyncObjectWithIgnoredFields))
            {
                CallBase = true
            };

            var controller = new RealmiusServerProcessor(config.Object);

            var result = controller.Upload(new UploadDataRequest
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "DbSyncObjectWithIgnoredFields",
                        PrimaryKey       = "1",
                        SerializedObject = "{Id: '1', Text: '123', Tags: 'zxc'}",
                    }
                }
            }, null);

            CheckNoError(result);

            config.Setup(
                x =>
                x.CheckAndProcess(It.IsAny <CheckAndProcessArgs <object> >()))
            .Returns((CheckAndProcessArgs <object> args) =>
            {
                ((LocalDbContext)args.Database).DbSyncObjectWithIgnoredFields.Find(args.Entity.MobilePrimaryKey).Should().NotBeNull();
                ((DbSyncObjectWithIgnoredFields)args.Entity).Text = "qwe";
                return(true);
            });

            var result2 = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "DbSyncObjectWithIgnoredFields",
                        PrimaryKey       = "1",
                        SerializedObject = "{Id: '1', Text: 'asd', Tags: 'zxc'}",
                    }
                }
            }, null);

            CheckNoError(result2);

            var db2  = _contextFunc();
            var obj2 = db2.DbSyncObjectWithIgnoredFields.First();

            obj2.Text.Should().Be("qwe");
        }
예제 #3
0
        public void DoNotUpdateIgnoredFields()
        {
            _contextFunc().DbSyncObjectWithIgnoredFields.Count().Should().Be(0);

            var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObjectWithIgnoredFields)));

            var result = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "DbSyncObjectWithIgnoredFields",
                        PrimaryKey       = "1",
                        SerializedObject = "{Id: '1', Text: '123', Tags: 'zxc'}",
                    }
                }
            }, null);

            CheckNoError(result);

            var db  = _contextFunc();
            var obj = db.DbSyncObjectWithIgnoredFields.First();

            obj.Text.Should().Be("123");
            obj.Tags.Should().BeNullOrEmpty();



            var result2 = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "DbSyncObjectWithIgnoredFields",
                        PrimaryKey       = "1",
                        SerializedObject = "{Id: '1', Text: '1234', Tags: 'zxc'}",
                    }
                }
            }, null);

            CheckNoError(result2);

            var db2  = _contextFunc();
            var obj2 = db2.DbSyncObjectWithIgnoredFields.First();

            obj2.Text.Should().Be("1234");
            obj2.Tags.Should().BeNullOrEmpty();
        }
예제 #4
0
        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);
        }
예제 #5
0
        public void IdGuid()
        {
            _contextFunc().IdGuidObjects.Count().Should().Be(0);

            var controller   = new RealmiusServerProcessor(new SyncConfigForCustomId(_contextFunc, typeof(IdGuidObject)));
            var objectToSave = new IdGuidObject()
            {
                Text = "123123123",
                Id   = Guid.NewGuid(),
            };

            var result = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(IdGuidObject),
                        PrimaryKey       = objectToSave.MobilePrimaryKey,
                        SerializedObject = JsonConvert.SerializeObject(objectToSave),
                    }
                }
            }, null);

            CheckNoError(result);

            result = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(IdGuidObject),
                        PrimaryKey       = objectToSave.MobilePrimaryKey,
                        SerializedObject = "{Text: 'asd'}",
                    }
                }
            }, null);
            CheckNoError(result);
            _contextFunc().IdGuidObjects.Find(objectToSave.Id).Text.Should().BeEquivalentTo("asd");
            _contextFunc().IdGuidObjects.Count().Should().Be(1);
        }
예제 #6
0
        public UploadDataResponse UploadData(UploadDataRequest request, string connectionId)
        {
            if (!Connections.ContainsKey(connectionId))
            {
                Logger.Info($"User with ConnectionId {connectionId} not found in the connections pool (not authorized?)");
                return(new UploadDataResponse());
            }

            var result = Processor.Upload(request, Connections[connectionId]);

            return(result);
        }
예제 #7
0
        public void UnknownType_NotInDb_TypeDoesNotExist()
        {
            var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(DbSyncObject)));
            var result     = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "UnknownSyncObject",
                        PrimaryKey       = "123",
                        SerializedObject = JsonConvert.SerializeObject(new UnknownSyncObject()),
                    }
                }
            }, null);

            result.Results.Count.Should().Be(0);
        }
예제 #8
0
        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
        }
예제 #9
0
        public void UnknownType_Exception()
        {
            var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(UnknownSyncObject)));
            var result     = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "UnknownSyncObject",
                        PrimaryKey       = "123",
                        SerializedObject = JsonConvert.SerializeObject(new UnknownSyncObject()),
                    }
                }
            }, null);

            result.Results.Count.Should().Be(1);
            result.Results[0].Error.Should().ContainEquivalentOf("The entity type UnknownSyncObject is not part of the model for the current context");
        }
예제 #10
0
        public void IntFieldSentAsString()
        {
            var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(IntFieldSentAsStringObject)));
            var result     = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(IntFieldSentAsStringObject),
                        PrimaryKey       = "123",
                        SerializedObject = "{Id: \"123\", IntField: \"456\", MobilePrimaryKey: \"123\"}",
                    }
                }
            }, null);

            CheckNoError(result);


            _contextFunc().IntFieldSentAsStringObjects.Count().Should().Be(1);
            var q = _contextFunc().IntFieldSentAsStringObjects.First();

            q.IntField.Should().Be(456);
        }
예제 #11
0
        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");
        }
예제 #12
0
        public void UploadData_CheckAndProcessCanRetrieveUnmodifiedEntityFromDatabase()
        {
            _contextFunc().DbSyncObjectWithIgnoredFields.Count().Should().Be(0);

            var config = new Mock <ShareEverythingConfiguration>(_contextFunc, typeof(DbSyncObjectWithIgnoredFields))
            {
                CallBase = true
            };

            var controller = new RealmiusServerProcessor(config.Object);

            var result = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "DbSyncObjectWithIgnoredFields",
                        PrimaryKey       = "1",
                        SerializedObject = "{Id: '1', Text: '123', Tags: 'zxc'}",
                    }
                }
            }, null);

            CheckNoError(result);

            config.Setup(
                x =>
                x.CheckAndProcess(It.IsAny <CheckAndProcessArgs <object> >()))
            .Returns((CheckAndProcessArgs <object> args) =>
            {
                var localDb = (LocalDbContext)args.Database;

                var dbObj = (DbSyncObjectWithIgnoredFields)args.OriginalDbEntity;
                dbObj.Text.Should().Be("123");
                ((DbSyncObjectWithIgnoredFields)args.Entity).Text.Should().Be("asd");
                return(true);
            });

            var result2 = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = "DbSyncObjectWithIgnoredFields",
                        PrimaryKey       = "1",
                        SerializedObject = "{Id: '1', Text: 'asd', Tags: 'zxc'}",
                    }
                }
            }, null);

            CheckNoError(result2);
            config.VerifyAll();


            var db2  = _contextFunc();
            var obj2 = db2.DbSyncObjectWithIgnoredFields.First();

            obj2.Text.Should().Be("asd");
            obj2.Tags.Should().BeNullOrEmpty();
        }
예제 #13
0
        public void ManyToManyRef()
        {
            var db = _contextFunc();

            var controller = new RealmiusServerProcessor(new ShareEverythingConfiguration(_contextFunc, typeof(RefSyncObject)));
            var result     = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(RefSyncObject),
                        PrimaryKey       = "123",
                        SerializedObject = "{Id: '123', Text: 'zxc'}",
                    }, new UploadRequestItem()
                    {
                        Type             = nameof(RefSyncObject),
                        PrimaryKey       = "22",
                        SerializedObject = "{Id: '22', Text: 'qwe'}",
                    },
                    new UploadRequestItem()
                    {
                        Type             = nameof(RefSyncObject),
                        PrimaryKey       = "456",
                        SerializedObject = "{Id: '456', Text: 'qwe', References: ['123']}",
                    }
                }
            }, null);

            result.Results.Count.Should().Be(3);
            string.Join(", ", result.Results.Where(x => !x.IsSuccess).Select(x => x.Error)).Should().Be("");

            db = _contextFunc();
            var obj0 = db.RefSyncObjects.First(x => x.Id == "123");

            obj0.Text.Should().Be("zxc");
            var obj = db.RefSyncObjects.First(x => x.Id == "456");

            obj.Text.Should().Be("qwe");
            string.Join(", ", obj.References.Select(x => x.Text)).Should().BeEquivalentTo("zxc");

            var result2 = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(RefSyncObject),
                        PrimaryKey       = "456",
                        SerializedObject = "{References:null}",
                    }
                }
            }, null);

            result2.Results.Count.Should().Be(1);
            string.Join(", ", result2.Results.Where(x => !x.IsSuccess).Select(x => x.Error)).Should().Be("");
            db = _contextFunc();
            string.Join(", ", db.RefSyncObjects.First(x => x.Id == "456").References.Select(x => x.Text)).Should().BeEquivalentTo("");


            var result3 = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(RefSyncObject),
                        PrimaryKey       = "456",
                        SerializedObject = "{References:['22']}",
                    }
                }
            }, null);

            result3.Results.Count.Should().Be(1);
            string.Join(", ", result3.Results.Where(x => !x.IsSuccess).Select(x => x.Error)).Should().Be("");
            db = _contextFunc();
            string.Join(", ", db.RefSyncObjects.First(x => x.Id == "456").References.Select(x => x.Text)).Should().BeEquivalentTo("qwe");


            var result4 = controller.Upload(new UploadDataRequest()
            {
                ChangeNotifications =
                {
                    new UploadRequestItem()
                    {
                        Type             = nameof(RefSyncObject),
                        PrimaryKey       = "456",
                        SerializedObject = "{References:['22', '123']}",
                    }
                }
            }, null);

            result4.Results.Count.Should().Be(1);
            string.Join(", ", result3.Results.Where(x => !x.IsSuccess).Select(x => x.Error)).Should().Be("");
            db = _contextFunc();
            string.Join(", ", db.RefSyncObjects.First(x => x.Id == "456").References.Select(x => x.Text).OrderBy(x => x)).Should().BeEquivalentTo("qwe, zxc");
        }