mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
119 lines
4.0 KiB
C#
119 lines
4.0 KiB
C#
|
|
using LanMountainDesktop.Launcher;
|
||
|
|
using LanMountainDesktop.Launcher.Models;
|
||
|
|
using Xunit;
|
||
|
|
|
||
|
|
namespace LanMountainDesktop.Tests;
|
||
|
|
|
||
|
|
public sealed class OobeSessionCommitServiceTests : IDisposable
|
||
|
|
{
|
||
|
|
private readonly string _tempRoot = Path.Combine(
|
||
|
|
Path.GetTempPath(),
|
||
|
|
"LanMountainDesktop.Tests",
|
||
|
|
nameof(OobeSessionCommitServiceTests),
|
||
|
|
Guid.NewGuid().ToString("N"));
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void ResolveDataRoot_ForChoice_DoesNotWriteConfigOrState()
|
||
|
|
{
|
||
|
|
var resolver = new DataLocationResolver(_tempRoot);
|
||
|
|
|
||
|
|
var dataRoot = resolver.ResolveDataRoot(DataLocationMode.Portable);
|
||
|
|
|
||
|
|
Assert.Equal(Path.Combine(_tempRoot, "Desktop"), dataRoot);
|
||
|
|
Assert.False(File.Exists(resolver.ResolveConfigPath()));
|
||
|
|
Assert.False(File.Exists(GetCompletedStatePath(dataRoot)));
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Commit_WritesSettingsAndCompletedState_OnlyAfterFinalDraft()
|
||
|
|
{
|
||
|
|
var resolver = new DataLocationResolver(_tempRoot);
|
||
|
|
var oobeState = new OobeStateService(
|
||
|
|
_tempRoot,
|
||
|
|
executionSnapshot: new LauncherExecutionSnapshot(false, "tester", "S-1-5-test"));
|
||
|
|
var context = CommandContext.FromArgs(["launch"]);
|
||
|
|
var service = new OobeSessionCommitService(
|
||
|
|
resolver,
|
||
|
|
oobeState,
|
||
|
|
context,
|
||
|
|
setWindowsStartup: _ => true);
|
||
|
|
var draft = CreateDraft();
|
||
|
|
|
||
|
|
var result = service.Commit(draft);
|
||
|
|
var dataRoot = resolver.ResolveDataRoot();
|
||
|
|
|
||
|
|
Assert.True(result.Success);
|
||
|
|
Assert.True(File.Exists(resolver.ResolveConfigPath()));
|
||
|
|
Assert.True(File.Exists(HostAppSettingsOobeMerger.GetSettingsFilePath(dataRoot)));
|
||
|
|
Assert.True(File.Exists(Path.Combine(resolver.ResolveLauncherDataPath(), "privacy-config.json")));
|
||
|
|
Assert.True(File.Exists(Path.Combine(resolver.ResolveLauncherDataPath(), "privacy-agreement.state.json")));
|
||
|
|
Assert.True(File.Exists(GetCompletedStatePath(dataRoot)));
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public void Commit_DoesNotWriteCompletedState_WhenFinalSaveFails()
|
||
|
|
{
|
||
|
|
if (!OperatingSystem.IsWindows())
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
var resolver = new DataLocationResolver(_tempRoot);
|
||
|
|
var oobeState = new OobeStateService(
|
||
|
|
_tempRoot,
|
||
|
|
executionSnapshot: new LauncherExecutionSnapshot(false, "tester", "S-1-5-test"));
|
||
|
|
var context = CommandContext.FromArgs(["launch"]);
|
||
|
|
var service = new OobeSessionCommitService(
|
||
|
|
resolver,
|
||
|
|
oobeState,
|
||
|
|
context,
|
||
|
|
setWindowsStartup: _ => false);
|
||
|
|
|
||
|
|
var result = service.Commit(CreateDraft());
|
||
|
|
var dataRoot = resolver.ResolveDataRoot();
|
||
|
|
|
||
|
|
Assert.False(result.Success);
|
||
|
|
Assert.Equal("windows_startup_save_failed", result.ResultCode);
|
||
|
|
Assert.False(File.Exists(GetCompletedStatePath(dataRoot)));
|
||
|
|
}
|
||
|
|
|
||
|
|
public void Dispose()
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
if (Directory.Exists(_tempRoot))
|
||
|
|
{
|
||
|
|
Directory.Delete(_tempRoot, recursive: true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
catch
|
||
|
|
{
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private static OobeSessionDraft CreateDraft() =>
|
||
|
|
new()
|
||
|
|
{
|
||
|
|
DataLocationMode = DataLocationMode.Portable,
|
||
|
|
MigrateExistingData = false,
|
||
|
|
StartupChoices = new HostAppSettingsStartupChoices(
|
||
|
|
ShowInTaskbar: true,
|
||
|
|
EnableFadeTransition: true,
|
||
|
|
EnableSlideTransition: false,
|
||
|
|
FusedPopupExperience: false,
|
||
|
|
AutoStartWithWindows: false),
|
||
|
|
PrivacyConfig = new PrivacyConfig
|
||
|
|
{
|
||
|
|
CrashTelemetryEnabled = false,
|
||
|
|
UsageTelemetryEnabled = false,
|
||
|
|
TelemetryId = "test-telemetry"
|
||
|
|
},
|
||
|
|
PrivacyAgreementAccepted = true,
|
||
|
|
PrivacyUserId = "test-telemetry",
|
||
|
|
PrivacyDeviceId = "test-device"
|
||
|
|
};
|
||
|
|
|
||
|
|
private static string GetCompletedStatePath(string dataRoot) =>
|
||
|
|
Path.Combine(dataRoot, "Launcher", "state", "oobe-state.json");
|
||
|
|
}
|