diff --git a/PowerToys.slnx b/PowerToys.slnx
index c93236d9a1..a950316aaf 100644
--- a/PowerToys.slnx
+++ b/PowerToys.slnx
@@ -167,6 +167,10 @@
+
+
+
+
diff --git a/src/modules/awake/Awake.ModuleServices.UnitTests/Awake.ModuleServices.UnitTests.csproj b/src/modules/awake/Awake.ModuleServices.UnitTests/Awake.ModuleServices.UnitTests.csproj
new file mode 100644
index 0000000000..ec6d943d5a
--- /dev/null
+++ b/src/modules/awake/Awake.ModuleServices.UnitTests/Awake.ModuleServices.UnitTests.csproj
@@ -0,0 +1,25 @@
+
+
+
+
+
+ false
+ true
+ Awake.ModuleServices.UnitTests
+ Exe
+ $(RepoRoot)$(Platform)\$(Configuration)\tests\Awake.ModuleServices.UnitTests\
+ false
+ false
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/awake/Awake.ModuleServices.UnitTests/AwakeStateMappingTests.cs b/src/modules/awake/Awake.ModuleServices.UnitTests/AwakeStateMappingTests.cs
new file mode 100644
index 0000000000..a8efe09c8b
--- /dev/null
+++ b/src/modules/awake/Awake.ModuleServices.UnitTests/AwakeStateMappingTests.cs
@@ -0,0 +1,36 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Microsoft.PowerToys.Settings.UI.Library;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace Awake.ModuleServices.UnitTests;
+
+[TestClass]
+public sealed class AwakeStateMappingTests
+{
+ [TestMethod]
+ public void CreateState_TimedSettings_ReturnsTimedStateWithDuration()
+ {
+ var settings = new AwakeSettings
+ {
+ Properties =
+ {
+ Mode = AwakeMode.TIMED,
+ KeepDisplayOn = true,
+ IntervalHours = 1,
+ IntervalMinutes = 30,
+ ExpirationDateTime = new DateTimeOffset(2030, 1, 2, 3, 4, 5, TimeSpan.Zero),
+ },
+ };
+
+ var state = AwakeService.CreateState(isRunning: true, settings);
+
+ Assert.IsTrue(state.IsRunning);
+ Assert.AreEqual(AwakeStateMode.Timed, state.Mode);
+ Assert.IsTrue(state.KeepDisplayOn);
+ Assert.AreEqual(TimeSpan.FromMinutes(90), state.Duration);
+ Assert.IsNull(state.Expiration);
+ }
+}
diff --git a/src/modules/awake/Awake.ModuleServices/Awake.ModuleServices.csproj b/src/modules/awake/Awake.ModuleServices/Awake.ModuleServices.csproj
index 75be8c685d..ade1a58e5f 100644
--- a/src/modules/awake/Awake.ModuleServices/Awake.ModuleServices.csproj
+++ b/src/modules/awake/Awake.ModuleServices/Awake.ModuleServices.csproj
@@ -10,6 +10,12 @@
false
+
+
+ <_Parameter1>Awake.ModuleServices.UnitTests
+
+
+
diff --git a/src/modules/awake/Awake.ModuleServices/AwakeService.cs b/src/modules/awake/Awake.ModuleServices/AwakeService.cs
index 0ce08fa0c0..d2b5a2dc06 100644
--- a/src/modules/awake/Awake.ModuleServices/AwakeService.cs
+++ b/src/modules/awake/Awake.ModuleServices/AwakeService.cs
@@ -33,6 +33,11 @@ public sealed class AwakeService : ModuleServiceBase, IAwakeService
var isRunning = IsAwakeProcessRunning();
var settings = ReadSettings();
+ return CreateState(isRunning, settings);
+ }
+
+ internal static AwakeState CreateState(bool isRunning, AwakeSettings? settings)
+ {
if (settings is null)
{
return new AwakeState(isRunning, AwakeStateMode.Passive, false, null, null);