| File: TrayUserPreferencesTests.cs | Web Access |
| Project: src\tests\Aspire.Tray.Tests\Aspire.Tray.Tests.csproj (Aspire.Tray.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json; using Aspire.Tray.Tests.Helpers; namespace Aspire.Tray.Tests; public class TrayUserPreferencesTests { [Fact] public void PreferencesAreSavedUnderTheUserProfile() { using var directory = new TestTrayStateDirectory(); var store = FileTraySavedStateStore.CreateWithLegacyMigration(directory.UserStatePath, directory.LegacyDirectory); store.Save(TraySavedState.Empty with { ConfirmStop = false }); Assert.False(new FileTraySavedStateStore(directory.UserStatePath).Load().ConfirmStop); } [Fact] public void ExistingPreferencesAreImportedWithoutChangingTheOriginal() { using var directory = new TestTrayStateDirectory(); var legacyPath = Path.Combine(directory.LegacyDirectory, "apphosts.json"); var host = directory.CreateAppHost("shop/apphost.cs"); var saved = new TraySavedState([new(host, true, true)]) { ConfirmStop = false }; new FileTraySavedStateStore(legacyPath).Save(saved); var original = File.ReadAllBytes(legacyPath); var loaded = FileTraySavedStateStore.CreateWithLegacyMigration(directory.UserStatePath, directory.LegacyDirectory).Load(); Assert.Equal(saved.AppHosts, loaded.AppHosts); Assert.False(loaded.ConfirmStop); Assert.Equal(original, File.ReadAllBytes(legacyPath)); Assert.Equal(saved.AppHosts, new FileTraySavedStateStore(directory.UserStatePath).Load().AppHosts); } [Fact] public void ExistingUserFileTakesPrecedenceOverLegacyPreferences() { using var directory = new TestTrayStateDirectory(); new FileTraySavedStateStore(Path.Combine(directory.LegacyDirectory, "apphosts.json")) .Save(TraySavedState.Empty with { ConfirmStop = false }); new FileTraySavedStateStore(directory.UserStatePath).Save(TraySavedState.Empty); var loaded = FileTraySavedStateStore.CreateWithLegacyMigration(directory.UserStatePath, directory.LegacyDirectory).Load(); Assert.True(loaded.ConfirmStop); Assert.Empty(loaded.AppHosts); } [Fact] public void InvalidLegacyPreferencesAreNotSilentlyReplaced() { using var directory = new TestTrayStateDirectory(); Directory.CreateDirectory(directory.LegacyDirectory); var legacyPath = Path.Combine(directory.LegacyDirectory, "apphosts.json"); File.WriteAllText(legacyPath, "invalid json"); var store = FileTraySavedStateStore.CreateWithLegacyMigration(directory.UserStatePath, directory.LegacyDirectory); Assert.Throws<JsonException>(store.Load); Assert.Throws<InvalidDataException>(() => store.Save(TraySavedState.Empty)); Assert.Equal("invalid json", File.ReadAllText(legacyPath)); Assert.False(File.Exists(directory.UserStatePath)); } }