Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
using SixLabors.ImageSharp.PixelFormats;
using WheelWizard.GameBanana;
using WheelWizard.GameBanana.Domain;
using WheelWizard.Mods.ViewModels;
using WheelWizard.Shared;
using WheelWizard.Views.ModManagement;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Features.Mods.ViewModels;

public class ModPreviewRetryTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using WheelWizard.GameBanana;
using WheelWizard.GameBanana.Domain;
using WheelWizard.Mods.ViewModels;
using WheelWizard.Shared;
using WheelWizard.Views.ModManagement;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Features.Mods.ViewModels;

public class ModPreviewViewModelTests
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
using WheelWizard.RrRooms;
using WheelWizard.Shared;
using WheelWizard.Shared.Services;
using WheelWizard.Views.Patterns;
using WheelWizard.WheelWizardData.ViewModels;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Features.WheelWizardData.ViewModels;

public class VrHistoryViewModelTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System.Diagnostics;
using Avalonia.Platform.Storage;
using WheelWizard.Shared.Desktop.Storage;
using WheelWizard.Shared.Platform;
using WheelWizard.Shared.Processes;
using WheelWizard.Views.Storage;

namespace WheelWizard.Test.Views.Storage;
namespace WheelWizard.Test.Shared.Desktop.Storage;

public class FilePickerServiceTests
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Extensions.Logging.Abstractions;
using WheelWizard.Shared.Polling;
using WheelWizard.Views.Diagnostics;
using WheelWizard.Views.DesignTime.Diagnostics;

namespace WheelWizard.Test.Shared.Polling;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Avalonia.Controls;
using Microsoft.Extensions.DependencyInjection;
using WheelWizard.Views.Navigation;
using WheelWizard.Views.Shell.Navigation;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Views.Shell.Navigation;

public class NavigationTests
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
using WheelWizard.AutoUpdating;
using WheelWizard.MiiRendering.Services;
using WheelWizard.Shared;
using WheelWizard.Views;
using WheelWizard.Views.Startup;
using WheelWizard.Views.Shell;
using WheelWizard.Views.Shell.Startup;
using WheelWizard.WiiManagement.GameLicense;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Views.Shell.Startup;

public class DesktopStartupTests
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@
using WheelWizard.Shared.Calendar;
using WheelWizard.Shared.Platform;
using WheelWizard.Shared.Processes;
using WheelWizard.Views.Pages;
using WheelWizard.Views.Shell;
using WheelWizard.Views.Shell.ViewModels;
using TimeProvider = System.TimeProvider;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Views.Shell.ViewModels;

public class HomeDolphinLaunchTests
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
using WheelWizard.Settings;
using WheelWizard.Shared;
using WheelWizard.Shared.Calendar;
using WheelWizard.Views.Pages;
using WheelWizard.Views.Shell.ViewModels;

namespace WheelWizard.Test.Views;
namespace WheelWizard.Test.Views.Shell.ViewModels;

public class HomeViewModelTests
{
Expand Down
49 changes: 42 additions & 7 deletions WheelWizard.UI.Test/ApplicationCompositionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,23 @@
using NSubstitute;
using Testably.Abstractions.Testing;
using WheelWizard.ApplicationData;
using WheelWizard.MiiImages.Views;
using WheelWizard.Mods;
using WheelWizard.Mods.Views;
using WheelWizard.RrRooms.Views;
using WheelWizard.Settings;
using WheelWizard.Settings.Views;
using WheelWizard.Shared;
using WheelWizard.Shared.Services;
using WheelWizard.Views;
using WheelWizard.Views.Components;
using WheelWizard.Views.Navigation;
using WheelWizard.Views.Pages;
using WheelWizard.Views.Pages.Settings;
using WheelWizard.Views.Patterns;
using WheelWizard.Views.Startup;
using WheelWizard.Views.DesignTime;
using WheelWizard.Views.Shell;
using WheelWizard.Views.Shell.Controls;
using WheelWizard.Views.Shell.Navigation;
using WheelWizard.Views.Shell.Startup;
using WheelWizard.Views.Shell.Views;
using WheelWizard.WheelWizardData.Views;
using WheelWizard.WiiManagement.MiiManagement.Views;
using Button = Avalonia.Controls.Button;

namespace WheelWizard.UI.Test;
Expand Down Expand Up @@ -235,7 +241,7 @@ public async Task MainWindowAndPages_ConstructWithoutStaticServiceInitialization
Assert.Equal(string.Empty, roomsButton.GetVisualDescendants().OfType<IconLabel>().Single().Text);
Assert.Equal(19.5, roomsButton.GetVisualDescendants().OfType<IconLabel>().Single().Margin.Left);
Assert.Equal(0, original.FindControl<TextBlock>("OtherSectionText")!.Opacity);
Assert.False(roomsButton.GetVisualDescendants().OfType<StateBox>().Single().IsVisible);
Assert.False(roomsButton.GetVisualDescendants().OfType<StatusBadge>().Single().IsVisible);
toggle.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
original.UpdateLayout();
Assert.Equal(221, original.SidebarWidth);
Expand Down Expand Up @@ -273,6 +279,35 @@ public async Task MainWindowAndPages_ConstructWithoutStaticServiceInitialization
navigation.NavigateTo(page);
original.UpdateLayout();
Assert.IsType(page, navigation.CurrentPage);
if (navigation.CurrentPage is ModsPage modsPage)
{
modsPage.HasMods = true;
original.UpdateLayout();
var gridView = modsPage.FindControl<MultiIconRadioButton>("GridViewButton")!;
var listView = modsPage.FindControl<MultiIconRadioButton>("ListViewButton")!;
var list = modsPage.FindControl<ListBox>("ModsListBox")!;
var grid = modsPage.FindControl<ScrollViewer>("ModsGridView")!;
gridView.IsChecked = true;
Assert.True(grid.IsVisible);
Assert.False(list.IsVisible);
listView.IsChecked = true;
Assert.True(list.IsVisible);
Assert.False(grid.IsVisible);
original.UpdateLayout();
var viewToggle = modsPage.FindControl<Border>("ViewModeToggle")!;
Assert.True(
viewToggle.TranslatePoint(new Point(), modsPage)!.Value.Y > list.TranslatePoint(new Point(), modsPage)!.Value.Y
);
var enableAll = modsPage.FindControl<CheckBox>("EnableAllCheckbox")!;
Assert.True(
enableAll.TranslatePoint(new Point(), modsPage)!.Value.Y < list.TranslatePoint(new Point(), modsPage)!.Value.Y
);
var presenter = list.GetVisualDescendants().OfType<Avalonia.Controls.Presenters.ItemsPresenter>().Single();
Assert.True(presenter.Margin.Bottom >= viewToggle.Bounds.Height + 12);
var icon = listView.GetVisualDescendants().OfType<Avalonia.Controls.Shapes.Path>().Single();
Assert.Equal(Avalonia.Media.Brushes.Transparent, icon.Fill);
Assert.NotNull(icon.Stroke);
}
}
var room = new WheelWizard.Models.RRInfo.RrRoom
{
Expand Down
7 changes: 4 additions & 3 deletions WheelWizard.UI.Test/BadgeBindingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
using Avalonia.Controls.Primitives;
using Avalonia.Headless.XUnit;
using Avalonia.VisualTree;
using WheelWizard.RrRooms.Views;
using WheelWizard.Views.Components;
using WheelWizard.Views.Patterns;
using WheelWizard.WheelWizardData.Domain;
using WheelWizard.WheelWizardData.Views;

namespace WheelWizard.UI.Test;

Expand All @@ -29,15 +30,15 @@ public void Cards_DisplayAndRefreshSuppliedBadgesWithoutServiceLookup(bool isFri
{
window.Show();
window.UpdateLayout();
Assert.Equal(initial, card.GetVisualDescendants().OfType<Badge>().Select(badge => badge.Variant));
Assert.Equal(initial, card.GetVisualDescendants().OfType<CommunityBadge>().Select(badge => badge.Variant));

BadgeVariant[] replacement = [BadgeVariant.RrDev];
if (card is FriendsListItem friend)
friend.BadgeVariants = replacement;
else
((PlayerListItem)card).BadgeVariants = replacement;
window.UpdateLayout();
Assert.Equal(replacement, card.GetVisualDescendants().OfType<Badge>().Select(badge => badge.Variant));
Assert.Equal(replacement, card.GetVisualDescendants().OfType<CommunityBadge>().Select(badge => badge.Variant));
}
finally
{
Expand Down
3 changes: 2 additions & 1 deletion WheelWizard.UI.Test/MiiControlTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
using NSubstitute;
using WheelWizard.MiiImages;
using WheelWizard.MiiImages.Domain;
using WheelWizard.MiiImages.Views;
using WheelWizard.MiiRendering.Services;
using WheelWizard.Shared;
using WheelWizard.Shared.Calendar;
using WheelWizard.Views.Patterns;
using WheelWizard.WheelWizardData.Views;
using WheelWizard.WiiManagement.MiiManagement;
using WheelWizard.WiiManagement.MiiManagement.Domain.Mii;

Expand Down
76 changes: 71 additions & 5 deletions WheelWizard.UI.Test/ModBrowserPreviewTests.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,83 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Headless;
using Avalonia.Headless.XUnit;
using Avalonia.Threading;
using Avalonia.VisualTree;
using NSubstitute;
using WheelWizard.GameBanana;
using WheelWizard.GameBanana.Domain;
using WheelWizard.Models.Mods;
using WheelWizard.Mods;
using WheelWizard.Mods.ViewModels;
using WheelWizard.Mods.Views;
using WheelWizard.Mods.Views.Dialogs;
using WheelWizard.Shared;
using WheelWizard.Shared.Downloads;
using WheelWizard.Shared.Services;
using WheelWizard.Views.ModManagement;
using WheelWizard.Views.Navigation;
using WheelWizard.Views.Patterns;
using WheelWizard.Views.Popups.ModManagement;
using WheelWizard.Views.Components;
using WheelWizard.Views.Shell.Navigation;

namespace WheelWizard.UI.Test;

public class ModBrowserPreviewTests
{
[AvaloniaFact]
public void DisabledGridCard_RestoresColorOnWholeCardHover_AndTracksEnabledState()
{
using var preview = new ModPreviewViewModel(
0,
Substitute.For<IGameBananaSingletonService>(),
Substitute.For<IGameBananaMediaService>()
);
var mod = new Mod
{
Title = "Test mod",
IsEnabled = false,
HasIncompatibleFiles = true,
};
var card = new GridModPanel { DataContext = new ModListItem(mod, false, false, preview) };
var window = new Window
{
Content = card,
Width = 300,
Height = 220,
};
try
{
window.Show();
window.UpdateLayout();
var grayImage = card.FindControl<Image>("DisabledThumbnailImage")!;
var originalSize = card.FindControl<Border>("RootCardBorder")!.Bounds.Size;
Assert.True(grayImage.IsVisible);
Assert.True(card.FindControl<PathIcon>("CompatibilityWarning")!.IsVisible);
window.MouseMove(new Point(25, 130));
Assert.False(grayImage.IsVisible);
window.MouseMove(card.FindControl<Border>("ThumbnailHeader")!.TranslatePoint(new Point(20, 40), window)!.Value);
Assert.False(grayImage.IsVisible);
window.MouseMove(new Point(25, 130));
Assert.False(grayImage.IsVisible);
window.MouseDown(new Point(25, 130), Avalonia.Input.MouseButton.Left);
window.MouseUp(new Point(25, 130), Avalonia.Input.MouseButton.Left);
Assert.True(mod.IsEnabled);
window.UpdateLayout();
Assert.Equal(originalSize, card.FindControl<Border>("RootCardBorder")!.Bounds.Size);
window.MouseDown(new Point(25, 130), Avalonia.Input.MouseButton.Left);
window.MouseUp(new Point(25, 130), Avalonia.Input.MouseButton.Left);
Assert.False(mod.IsEnabled);
window.MouseMove(new Point(1, 1));
Assert.True(grayImage.IsVisible);
mod.IsEnabled = true;
Assert.False(grayImage.IsVisible);
mod.IsEnabled = false;
Assert.True(grayImage.IsVisible);
}
finally
{
window.Close();
}
}

[AvaloniaFact]
public async Task ClosedBrowser_DiscardsPendingSearchResults()
{
Expand Down Expand Up @@ -219,7 +279,10 @@ public async Task RecycledCard_LoadsAndBindsItsCurrentPreview()
{
var mods = Substitute.For<IGameBananaSingletonService>();
var media = Substitute.For<IGameBananaMediaService>();
var png = Convert.FromBase64String("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+jvX0AAAAASUVORK5CYII=");
using var pixels = new SkiaSharp.SKBitmap(2, 2);
pixels.Erase(SkiaSharp.SKColors.Red);
using var encoded = pixels.Encode(SkiaSharp.SKEncodedImageFormat.Png, 100);
var png = encoded.ToArray();
media.GetImageAsync(Arg.Any<string>(), Arg.Any<CancellationToken>()).Returns((OperationResult<byte[]>)png);
using var first = new ModPreviewViewModel(1, mods, media, "https://images.test/first.png");
using var second = new ModPreviewViewModel(2, mods, media, "https://images.test/second.png");
Expand All @@ -238,6 +301,9 @@ public async Task RecycledCard_LoadsAndBindsItsCurrentPreview()
await first.LoadAsync();
var image = Assert.Single(card.GetVisualDescendants().OfType<Image>());
Assert.NotNull(first.Image);
Assert.NotNull(first.GrayscaleImage);
Assert.NotSame(first.Image, first.GrayscaleImage);
Assert.Same(first.GrayscaleImage, first.GrayscaleImage);
Assert.Same(first.Image, image.Source);

card.Preview = second;
Expand Down
Loading
Loading