Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Source/ViewModels/AchievementSetViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ public bool UpdateLocal(Achievement achievement, Achievement localAchievement, A

public bool UpdateLocal(Leaderboard leaderboard, Leaderboard localLeaderboard, Action<AssetBase, LocalAssets.LocalAssetChange> assetChangedHandler, bool refresh)
{
if (leaderboard.OwnerSetId != AchievementSet.OwnerSetId)
if (leaderboard != null && leaderboard.OwnerSetId != AchievementSet.OwnerSetId)
{
if (leaderboard.OwnerSetId != 0 || _achievementSet.Type != AchievementSetType.Core)
return false;
Expand Down Expand Up @@ -269,7 +269,7 @@ public bool UpdateLocal(Leaderboard leaderboard, Leaderboard localLeaderboard, A

internal bool UpdateLocal(RichPresence richPresence, RichPresence localRichPresence, Action<AssetBase, LocalAssets.LocalAssetChange> assetChangedHandler, bool refresh)
{
if (richPresence.OwnerSetId != AchievementSet.OwnerSetId)
if (richPresence != null && richPresence.OwnerSetId != AchievementSet.OwnerSetId)
{
if (richPresence.OwnerSetId != 0 || _achievementSet.Type != AchievementSetType.Core)
return false;
Expand Down
17 changes: 7 additions & 10 deletions Source/ViewModels/Navigation/EditorNavigationViewModelBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public ViewerViewModelBase Editor

Label = _editor?.Title;
OnEditorCompareStateChanged();
OnEditorCanUpdateChanged();

OnPropertyChanged(() => Editor);
}
Expand All @@ -59,14 +60,19 @@ protected virtual void OnEditorPropertyChanged(System.ComponentModel.PropertyCha
{
if (e.PropertyName == "CompareState")
OnEditorCompareStateChanged();
else if (e.PropertyName == "CanUpdate")
OnEditorCanUpdateChanged();
else if (e.PropertyName == "Title")
Label = _editor?.Title;
}

private void OnEditorCompareStateChanged()
{
CompareState = _editor?.CompareState ?? GeneratedCompareState.None;
}

private void OnEditorCanUpdateChanged()
{
var updateLocalMenuItem = ContextMenu?.FirstOrDefault(m => m.Label == "Update Local");
if (updateLocalMenuItem != null)
updateLocalMenuItem.Command = CanUpdateLocal() ? Editor.UpdateLocalCommand : DisabledCommand.Instance;
Expand All @@ -77,16 +83,7 @@ protected bool CanUpdateLocal()
if (Editor == null)
return false;

switch (Editor.CompareState)
{
case GeneratedCompareState.None:
case GeneratedCompareState.Same:
case GeneratedCompareState.NotGenerated:
return false;

default:
return true;
}
return Editor.CanUpdate;
}

public bool IsNodeFor(AssetBase asset)
Expand Down
43 changes: 33 additions & 10 deletions Tests/ViewModels/Nagivation/EditorNavigationViewModelBaseTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ public void SetCompareState(GeneratedCompareState state)
CompareState = state;
// CompareState updates ModificationMesssage
}

public void SetCanUpdate(bool value)
{
CanUpdate = value;
}
}

[Test]
Expand Down Expand Up @@ -98,24 +103,42 @@ public void TestTitleAndCompareStateFromEditor()
}

[Test]
[TestCase(GeneratedCompareState.None, false)]
[TestCase(GeneratedCompareState.Same, false)]
[TestCase(GeneratedCompareState.NotGenerated, false)]
[TestCase(GeneratedCompareState.GeneratedOnly, true)]
[TestCase(GeneratedCompareState.PublishedDiffers, true)]
[TestCase(GeneratedCompareState.LocalDiffers, true)]
public void TestCanUpdateLocal(GeneratedCompareState state, bool expected)
public void TestCompareStateSync()
{
var harness = new EditorNavigationViewModelHarness();
Assert.That(harness.CompareState, Is.EqualTo(GeneratedCompareState.Same));

var editor = new DummyViewerViewModel();
editor.SetCompareState(state);
editor.SetCompareState(GeneratedCompareState.NotGenerated);

// sync on assign
harness.Editor = editor;
Assert.That(harness.CompareState, Is.EqualTo(state));
Assert.That(harness.CompareState, Is.EqualTo(GeneratedCompareState.NotGenerated));

// sync on update
editor.SetCompareState(GeneratedCompareState.GeneratedOnly);
Assert.That(harness.CompareState, Is.EqualTo(GeneratedCompareState.GeneratedOnly));
}

[Test]
public void TestCanUpdateSync()
{
var harness = new EditorNavigationViewModelHarness();
Assert.That(harness.ContextMenu, Is.Not.Null);
Assert.That(harness.ContextMenu.Count(), Is.EqualTo(1));
Assert.That(harness.ContextMenu.First().Command.CanExecute(null), Is.EqualTo(expected));
var updateLocalMenuItem = harness.ContextMenu.First();
Assert.That(updateLocalMenuItem.Command.CanExecute(null), Is.False);

var editor = new DummyViewerViewModel();
editor.SetCanUpdate(true);

// sync on assign
harness.Editor = editor;
Assert.That(updateLocalMenuItem.Command.CanExecute(null), Is.True);

// sync on update
editor.SetCanUpdate(false);
Assert.That(updateLocalMenuItem.Command.CanExecute(null), Is.False);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ public void TestMergePublishedAndGeneratedAchievementIdentical()
Assert.AreEqual(1, achievementNode.ContextMenu.Count());
var menuItem = achievementNode.ContextMenu.First();
Assert.AreEqual("Update Local", menuItem.Label);
Assert.IsFalse(menuItem.Command.CanExecute(null));
Assert.IsTrue(menuItem.Command.CanExecute(null)); // same, but not in local
}

[Test]
Expand Down
Loading