Beispiel #1
0
        public void Merge_entry_exists_on_client_but_not_on_server()
        {
            bool?answer = null;
            var  state  = new ApplicationState();

            state.MyDays = new Dictionary <CacheKey, TrainingDaysHolder>();
            var currentHolder = new TrainingDaysHolder(new UserSearchDTO()
            {
                GlobalId = Guid.NewGuid()
            });

            state.MyDays.Add(new CacheKey()
            {
                ProfileId = currentHolder.User.GlobalId
            }, currentHolder);
            var days = currentHolder;

            state.CurrentBrowsingTrainingDays = days;
            DateTime time = DateTime.UtcNow.MonthDate();

            days.TrainingDays.Add(time.AddDays(1), new TrainingDayInfo(new TrainingDayDTO()
            {
                TrainingDate = time.AddDays(1)
            }));
            days.TrainingDays.Add(time.AddDays(2), new TrainingDayInfo(new TrainingDayDTO()
            {
                TrainingDate = time.AddDays(2)
            }));

            var day = new TrainingDayDTO()
            {
                TrainingDate = time.AddDays(3)
            };

            day.GlobalId = Guid.NewGuid();
            day.Objects.Add(new StrengthTrainingEntryDTO()
            {
                Comment = "Test"
            });
            day.Objects[0].Version  = 1;
            day.Objects[0].GlobalId = Guid.NewGuid();
            days.TrainingDays.Add(time.AddDays(3), new TrainingDayInfo(day));

            state.TrainingDay = days.TrainingDays[time.AddDays(3)].Copy();
            var serverCopy = day.Copy();

            //entry on the client
            state.TrainingDay.TrainingDay.Objects.Add(new SizeEntryDTO()
            {
                Version = 1, GlobalId = Guid.NewGuid(), Comment = "size"
            });

            OfflineModeManager manager = new OfflineModeManager(state.MyDays, currentHolder.User.GlobalId);

            manager.MergeNew(serverCopy, state, false, delegate(ModificationType m)
            {
                throw new Exception("Shouldn't be here ");
            });
            Assert.AreEqual(1, state.TrainingDay.TrainingDay.Objects[0].Version);
            Assert.AreEqual(1, state.TrainingDay.TrainingDay.Objects.Count);
            Assert.AreEqual("Test", state.TrainingDay.TrainingDay.Objects[0].Comment);
            Assert.AreEqual(1, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].TrainingDay.Objects[0].Version);
            Assert.AreEqual(1, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].TrainingDay.Objects.Count);
            //should be a different references to the same object (copy)
            Assert.AreNotEqual(state.TrainingDay, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].TrainingDay);

            Assert.AreEqual(false, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].IsModified);
            Assert.AreEqual(false, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].IsConflict);
        }
        private void updateChanges(WymiaryDTO currentSizes, TrainingDaysHolder holder)
        {
            var newWay = holder.TrainingDays.SelectMany(d => d.Value.TrainingDay.Objects.OfType <SizeEntryDTO>().Where(h => h.TrainingDay.TrainingDate < currentSizes.Time.DateTime.Date));
            var res    = (from i in newWay where i.Wymiary.Weight > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();

            if (res != null)
            {
                PreviousWeight = res.Wymiary.Weight;
            }

            res = (from i in newWay where i.Wymiary.Height > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousHeight = res.Wymiary.Height;
            }

            res = (from i in newWay where i.Wymiary.Pas > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousPas = res.Wymiary.Pas;
            }

            res = (from i in newWay where i.Wymiary.Klatka > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousKlatka = res.Wymiary.Klatka;
            }

            res = (from i in newWay where i.Wymiary.LeftBiceps > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousLeftBiceps = res.Wymiary.LeftBiceps;
            }

            res = (from i in newWay where i.Wymiary.RightBiceps > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousRightBiceps = res.Wymiary.RightBiceps;
            }

            res = (from i in newWay where i.Wymiary.RightForearm > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousRightForearm = res.Wymiary.RightForearm;
            }

            res = (from i in newWay where i.Wymiary.LeftForearm > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousLeftForearm = res.Wymiary.LeftForearm;
            }

            res = (from i in newWay where i.Wymiary.RightUdo > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousRightUdo = res.Wymiary.RightUdo;
            }

            res = (from i in newWay where i.Wymiary.LeftUdo > 0 orderby i.TrainingDay.TrainingDate descending select i).FirstOrDefault();
            if (res != null)
            {
                PreviousLeftUdo = res.Wymiary.LeftUdo;
            }

            Dispatcher.BeginInvoke(delegate
            {
                updateChanges();
            });
        }