Ejemplo n.º 1
0
        public void SimpleClear()
        {
            List <TrainingDayDTO> retrieved = new List <TrainingDayDTO>();
            DateTime time = DateTime.UtcNow.MonthDate();

            retrieved.Add(new TrainingDayDTO()
            {
                TrainingDate = time.AddDays(1)
            });
            retrieved.Add(new TrainingDayDTO()
            {
                TrainingDate = time.AddDays(3)
            });
            retrieved.Add(new TrainingDayDTO()
            {
                TrainingDate = time.AddDays(5)
            });
            var state         = new Dictionary <CacheKey, TrainingDaysHolder>();
            var currentHolder = new TrainingDaysHolder(new UserSearchDTO()
            {
                GlobalId = Guid.NewGuid()
            });

            state.Add(new CacheKey()
            {
                ProfileId = currentHolder.User.GlobalId
            }, currentHolder);
            OfflineModeManager manager = new OfflineModeManager(state, currentHolder.User.GlobalId);

            manager.RetrievedDays(time, 1, retrieved, currentHolder);
            manager.ClearTrainingDays();
            Assert.AreEqual(0, currentHolder.TrainingDays.Count);
            Assert.AreEqual(0, currentHolder.RetrievedMonths.Count);
        }
Ejemplo n.º 2
0
        public void SimpleRetrieveWithModification_DifferentVersion_ButContentTheSame()
        {
            List <TrainingDayDTO> retrieved = new List <TrainingDayDTO>();
            DateTime time = DateTime.UtcNow.MonthDate();

            retrieved.Add(createDay(time.AddDays(1)));
            retrieved.Add(createDay(time.AddDays(3)));
            retrieved.Add(createDay(time.AddDays(5)));
            var state         = new Dictionary <CacheKey, TrainingDaysHolder>();
            var currentHolder = new TrainingDaysHolder(new UserSearchDTO()
            {
                GlobalId = Guid.NewGuid()
            });

            state.Add(new CacheKey()
            {
                ProfileId = currentHolder.User.GlobalId
            }, currentHolder);
            OfflineModeManager manager = new OfflineModeManager(state, currentHolder.User.GlobalId);

            manager.RetrievedDays(time, 1, retrieved, currentHolder);

            currentHolder.TrainingDays[time.AddDays(1)].IsModified = true;

            //simulate modification of this entry on the server
            retrieved[0] = createDay(time.AddDays(1), 2);
            var res = manager.RetrievedDays(time, 1, retrieved, currentHolder);

            Assert.IsTrue(res);
            Assert.AreEqual(retrieved.Count, currentHolder.TrainingDays.Count);
            Assert.AreEqual(1, currentHolder.RetrievedMonths.Count);
            Assert.AreEqual(time, currentHolder.RetrievedMonths[0]);
            Assert.AreEqual(2, currentHolder.TrainingDays[time.AddDays(1)].TrainingDay.Objects[0].Version);
            Assert.AreEqual(false, currentHolder.TrainingDays[time.AddDays(1)].IsConflict);
        }
Ejemplo n.º 3
0
        public void SimpleRetrieveWithModification_ChangedEntryObject()
        {
            List <TrainingDayDTO> retrieved = new List <TrainingDayDTO>();
            DateTime time = DateTime.UtcNow.MonthDate();

            retrieved.Add(createDay(time.AddDays(1)));
            retrieved.Add(createDay(time.AddDays(3)));
            retrieved.Add(createDay(time.AddDays(5)));
            var state         = new Dictionary <CacheKey, TrainingDaysHolder>();
            var currentHolder = new TrainingDaysHolder(new UserSearchDTO()
            {
                GlobalId = Guid.NewGuid()
            });

            state.Add(new CacheKey()
            {
                ProfileId = currentHolder.User.GlobalId
            }, currentHolder);
            OfflineModeManager manager = new OfflineModeManager(state, currentHolder.User.GlobalId);

            manager.RetrievedDays(time, 1, retrieved, currentHolder);
            currentHolder.TrainingDays[time.AddDays(1)] = currentHolder.TrainingDays[time.AddDays(1)].Copy();
            currentHolder.TrainingDays[time.AddDays(1)].TrainingDay.Objects[0].Comment = "test";
            currentHolder.TrainingDays[time.AddDays(1)].IsModified = true;

            var res = manager.RetrievedDays(time, 1, retrieved, currentHolder);

            Assert.IsFalse(res);
            Assert.AreEqual(retrieved.Count, currentHolder.TrainingDays.Count);
            Assert.AreEqual(1, currentHolder.RetrievedMonths.Count);
            Assert.AreEqual(time, currentHolder.RetrievedMonths[0]);
            Assert.AreEqual("test", currentHolder.TrainingDays[time.AddDays(1)].TrainingDay.Objects[0].Comment);
            Assert.AreEqual(true, currentHolder.TrainingDays[time.AddDays(1)].IsConflict);
        }
Ejemplo n.º 4
0
        void mnuRefresh_Click(object sender, EventArgs e)
        {
            var m = new ServiceManager <GetTrainingDayCompletedEventArgs>(delegate(BodyArchitectAccessServiceClient client1, EventHandler <GetTrainingDayCompletedEventArgs> operationCompleted)
            {
                client1.GetTrainingDayCompleted -= operationCompleted;
                client1.GetTrainingDayCompleted += operationCompleted;
                WorkoutDayGetOperation data      = new WorkoutDayGetOperation();
                data.WorkoutDateTime             = ApplicationState.Current.TrainingDay.TrainingDay.TrainingDate;
                data.UserId     = ApplicationState.Current.TrainingDay.TrainingDay.ProfileId;
                data.CustomerId = ApplicationState.Current.TrainingDay.TrainingDay.CustomerId;
                data.Operation  = GetOperation.Current;
                client1.GetTrainingDayAsync(ApplicationState.Current.SessionData.Token, data, new RetrievingInfo());
            });


            m.OperationCompleted += (s, a) =>
            {
                progressBar.ShowProgress(false);
                if (ApplicationState.Current.TrainingDay == null || IsClosing)
                {
                    return;
                }
                if (a.Error != null)
                {
                    BAMessageBox.ShowError(ApplicationStrings.EntryObjectPageBase_ErrDuringRefresh);
                }
                else
                {
                    OfflineModeManager manager = new OfflineModeManager(ApplicationState.Current.MyDays, ApplicationState.Current.SessionData.Profile.GlobalId);
                    manager.MergeNew(a.Result.Result, ApplicationState.Current, false, delegate
                    {
                        return(BAMessageBox.Ask(ApplicationStrings.EntryObjectPageBase_QResfreshMerge) == MessageBoxResult.OK);
                    });

                    show(true);
                }
            };
            progressBar.ShowProgress(true, ApplicationStrings.EntryObjectPageBase_ProgressRefresh);
            if (!m.Run())
            {
                progressBar.ShowProgress(false);
                if (ApplicationState.Current.IsOffline)
                {
                    BAMessageBox.ShowError(ApplicationStrings.ErrOfflineMode);
                }
                else
                {
                    BAMessageBox.ShowError(ApplicationStrings.ErrNoNetwork);
                }
            }
        }
        async protected virtual Task MergeResult(TrainingDayDTO day, SynchronizationItemViewModel item)
        {
            var customerId             = item.DayInfo.TrainingDay.CustomerId;
            var holder                 = appState.GetTrainingDayHolder(customerId);
            OfflineModeManager manager = new OfflineModeManager(appState.MyDays, ApplicationState.Current.SessionData.Profile.GlobalId);

            appState.TrainingDay = item.DayInfo;
            manager.MergeNew(day, appState, true, delegate
            {
                return(Action == MergeAction.UseServer);
            });

            if (holder.TrainingDays.ContainsKey(appState.TrainingDay.TrainingDay.TrainingDate) && holder.TrainingDays[appState.TrainingDay.TrainingDay.TrainingDate].IsModified)
            {
                await save(item, false);
            }
            else
            {
                item.State = MergeState.Finished;
            }
            appState.TrainingDay = null;
        }
Ejemplo n.º 6
0
        public void Merge_removed_trainingday_on_server_day_and_old_entry_still_on_the_client()
        {
            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();

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

            manager.MergeNew(null, state, false, delegate
            {
                throw new Exception("We shouldn't be here!");
            });
            Assert.AreEqual(0, state.TrainingDay.TrainingDay.Objects[0].Version);
            Assert.AreEqual(Guid.Empty, state.TrainingDay.TrainingDay.Objects[0].GlobalId);
            Assert.AreEqual(Guid.Empty, state.TrainingDay.TrainingDay.GlobalId);
            Assert.AreEqual(1, state.TrainingDay.TrainingDay.Objects.Count);
            Assert.AreNotEqual(day.Objects[0].GlobalId, state.TrainingDay.TrainingDay.Objects[0].GlobalId);
            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);
        }
Ejemplo n.º 7
0
        public void Merge_ContentChanged_day_and_entry_already_saved_answer_false()
        {
            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)
            {
                IsModified = true
            });

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

            serverCopy.Objects[0].Version = 2;
            serverCopy.Objects[0].Comment = "ggggg";
            OfflineModeManager manager = new OfflineModeManager(state.MyDays, currentHolder.User.GlobalId);

            manager.MergeNew(serverCopy, state, false, delegate(ModificationType m)
            {
                Assert.AreEqual(ModificationType.EntryModified, m);
                answer = false;
                return(answer.Value);
            });
            Assert.AreEqual(2, state.TrainingDay.TrainingDay.Objects[0].Version);
            Assert.AreEqual("Test", state.TrainingDay.TrainingDay.Objects[0].Comment);
            Assert.AreEqual(false, answer);
            Assert.AreEqual(1, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].TrainingDay.Objects[0].Version);
            //should be a different references to the same object (copy)
            Assert.AreNotEqual(state.TrainingDay, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].TrainingDay);

            Assert.AreEqual(true, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].IsModified);
            Assert.AreEqual(false, days.TrainingDays[state.TrainingDay.TrainingDay.TrainingDate].IsConflict);
        }
Ejemplo n.º 8
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);
        }