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); }
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); }
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); }
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; }
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); }
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); }
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); }