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
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Controls/ShortcutsDialog.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Nickvision.Desktop.GNOME.Helpers;
using Nickvision.Desktop.GNOME.Helpers;

namespace Nickvision.Desktop.GNOME.Controls;

Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/ComboRowExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Nickvision.Desktop.Application;
using Nickvision.Desktop.Application;
using System.Collections.Generic;

namespace Nickvision.Desktop.GNOME.Helpers;
Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/GtkBuilderFactory.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Nickvision.Desktop.Globalization;
using Nickvision.Desktop.Globalization;
using System;
using System.IO;
using System.Linq;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Nickvision.Desktop.Application;
using Nickvision.Desktop.GNOME.Controls;
Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/IGtkBuilderFactory.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Nickvision.Desktop.GNOME.Helpers;
namespace Nickvision.Desktop.GNOME.Helpers;

public interface IGtkBuilderFactory
{
Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/LinuxImports.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;

namespace Nickvision.Desktop.GNOME.Helpers;

Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/MacOSImports.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;

namespace Nickvision.Desktop.GNOME.Helpers;

Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/WindowExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Nickvision.Desktop.Application;
using Nickvision.Desktop.Application;

namespace Nickvision.Desktop.GNOME.Helpers;

Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Helpers/WindowsImports.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;

namespace Nickvision.Desktop.GNOME.Helpers;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Nickvision.Desktop.Hosting;
using Nickvision.Desktop.Hosting;

namespace Nickvision.Desktop.GNOME.Hosting;

Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Hosting/AdwUserInterfaceThread.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Nickvision.Desktop.Application;
Expand Down
2 changes: 1 addition & 1 deletion Nickvision.Desktop.GNOME/Nickvision.Desktop.GNOME.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

<ItemGroup>
<PackageReference Include="GirCore.Adw-1" Version="0.7.0" />
<PackageReference Include="Nickvision.Desktop" Version="2026.3.9" />
<PackageReference Include="Nickvision.Desktop" Version="2026.3.10" />
</ItemGroup>

<ItemGroup>
Expand Down
225 changes: 225 additions & 0 deletions Nickvision.Desktop.Tests/ConfigurationServiceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
using Nickvision.Desktop.Application;
using Nickvision.Desktop.Filesystem;
using Nickvision.Desktop.System;
using Nickvision.Desktop.Tests.Mocks;
using System.IO;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace Nickvision.Desktop.Tests;

public class TestObj
{
public string Test { get; set; }

public TestObj()
{
Test = "";
}

public TestObj(string test)
{
Test = test;
}
}

[JsonSourceGenerationOptions(DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, WriteIndented = true)]
[JsonSerializable(typeof(TestObj))]
internal partial class TestJsonContext : JsonSerializerContext { }

[TestClass]
public class ConfigurationServiceTests
{
private static DatabaseService? _databaseService;
private static ConfigurationService? _configurationService;

[TestMethod]
public void Case001_Init()
{
_databaseService = new DatabaseService(new MockLogger<DatabaseService>(), new AppInfo("org.nickvision.desktop.test.config", "Nickvision.Desktop.Test.Config", "Config Test"), new SecretService(new MockLogger<SecretService>()));
_configurationService = new ConfigurationService(new MockLogger<ConfigurationService>(), _databaseService);
Assert.IsNotNull(_databaseService);
Assert.IsNotNull(_configurationService);
}

[TestMethod]
public async Task Case002_Get()
{
Assert.IsNotNull(_configurationService);
var val1 = _configurationService.Get("nonExistentBool", false);
Assert.AreEqual(false, val1);
var val2 = await _configurationService.GetAsync("nonExistentBoolAsync", true);
Assert.AreEqual(true, val2);
var val3 = _configurationService.Get("nonExistentDouble", 1.5);
Assert.AreEqual(1.5, val3);
var val4 = await _configurationService.GetAsync("nonExistentDoubleAsync", 2.5);
Assert.AreEqual(2.5, val4);
var val5 = _configurationService.Get("nonExistentInt", 42);
Assert.AreEqual(42, val5);
var val6 = await _configurationService.GetAsync("nonExistentIntAsync", 84);
Assert.AreEqual(84, val6);
var val7 = _configurationService.Get("nonExistentString", "default");
Assert.AreEqual("default", val7);
var val8 = await _configurationService.GetAsync("nonExistentStringAsync", "asyncDefault");
Assert.AreEqual("asyncDefault", val8);
var val9 = _configurationService.Get("nonExistentObject", new TestObj("value"), TestJsonContext.Default.TestObj);
Assert.AreEqual("value", val9.Test);
var val10 = await _configurationService.GetAsync("nonExistentObjectAsync", new TestObj("asyncValue"), TestJsonContext.Default.TestObj);
Assert.AreEqual("asyncValue", val10.Test);
}

[TestMethod]
public void Case003_Save()
{
Assert.IsNotNull(_configurationService);
_configurationService.Save();
}

[TestMethod]
public async Task Case004_Set()
{
Assert.IsNotNull(_configurationService);
_configurationService.Set("nonExistentBool", true);
await _configurationService.SetAsync("nonExistentBoolAsync", false);
_configurationService.Set("nonExistentDouble", 2.5);
await _configurationService.SetAsync("nonExistentDoubleAsync", 1.5);
_configurationService.Set("nonExistentInt", 84);
await _configurationService.SetAsync("nonExistentIntAsync", 42);
_configurationService.Set("nonExistentString", "default2");
await _configurationService.SetAsync("nonExistentStringAsync", "asyncDefault2");
_configurationService.Set("nonExistentObject", new TestObj("value2"), TestJsonContext.Default.TestObj);
await _configurationService.SetAsync("nonExistentObjectAsync", new TestObj("asyncValue2"), TestJsonContext.Default.TestObj);
}

[TestMethod]
public async Task Case005_Save()
{
Assert.IsNotNull(_configurationService);
await _configurationService.SaveAsync();
}

[TestMethod]
public async Task Case006_Get()
{
Assert.IsNotNull(_configurationService);
var val1 = _configurationService.Get("nonExistentBool", false);
Assert.AreEqual(true, val1);
var val2 = await _configurationService.GetAsync("nonExistentBoolAsync", true);
Assert.AreEqual(false, val2);
var val3 = _configurationService.Get("nonExistentDouble", 1.5);
Assert.AreEqual(2.5, val3);
var val4 = await _configurationService.GetAsync("nonExistentDoubleAsync", 2.5);
Assert.AreEqual(1.5, val4);
var val5 = _configurationService.Get("nonExistentInt", 42);
Assert.AreEqual(84, val5);
var val6 = await _configurationService.GetAsync("nonExistentIntAsync", 84);
Assert.AreEqual(42, val6);
var val7 = _configurationService.Get("nonExistentString", "default");
Assert.AreEqual("default2", val7);
var val8 = await _configurationService.GetAsync("nonExistentStringAsync", "asyncDefault");
Assert.AreEqual("asyncDefault2", val8);
var val9 = _configurationService.Get("nonExistentObject", new TestObj("value"), TestJsonContext.Default.TestObj);
Assert.AreEqual("value2", val9.Test);
var val10 = await _configurationService.GetAsync("nonExistentObjectAsync", new TestObj("asyncValue"), TestJsonContext.Default.TestObj);
Assert.AreEqual("asyncValue2", val10.Test);
}

[TestMethod]
public async Task Case007_Dispose()
{
Assert.IsNotNull(_databaseService);
Assert.IsNotNull(_configurationService);
await _configurationService.DisposeAsync();
await _databaseService.DisposeAsync();
_databaseService = null;
_configurationService = null;
}

[TestMethod]
public void Case008_Init()
{
_databaseService = new DatabaseService(new MockLogger<DatabaseService>(), new AppInfo("org.nickvision.desktop.test.config", "Nickvision.Desktop.Test.Config", "Config Test"), new SecretService(new MockLogger<SecretService>()));
_configurationService = new ConfigurationService(new MockLogger<ConfigurationService>(), _databaseService);
Assert.IsNotNull(_databaseService);
Assert.IsNotNull(_configurationService);
}

[TestMethod]
public async Task Case009_Get()
{
Assert.IsNotNull(_configurationService);
var val1 = _configurationService.Get("nonExistentBool", false);
Assert.AreEqual(true, val1);
var val2 = await _configurationService.GetAsync("nonExistentBoolAsync", true);
Assert.AreEqual(false, val2);
var val3 = _configurationService.Get("nonExistentDouble", 1.5);
Assert.AreEqual(2.5, val3);
var val4 = await _configurationService.GetAsync("nonExistentDoubleAsync", 2.5);
Assert.AreEqual(1.5, val4);
var val5 = _configurationService.Get("nonExistentInt", 42);
Assert.AreEqual(84, val5);
var val6 = await _configurationService.GetAsync("nonExistentIntAsync", 84);
Assert.AreEqual(42, val6);
var val7 = _configurationService.Get("nonExistentString", "default");
Assert.AreEqual("default2", val7);
var val8 = await _configurationService.GetAsync("nonExistentStringAsync", "asyncDefault");
Assert.AreEqual("asyncDefault2", val8);
var val9 = _configurationService.Get("nonExistentObject", new TestObj("value"), TestJsonContext.Default.TestObj);
Assert.AreEqual("value2", val9.Test);
var val10 = await _configurationService.GetAsync("nonExistentObjectAsync", new TestObj("asyncValue"), TestJsonContext.Default.TestObj);
Assert.AreEqual("asyncValue2", val10.Test);
}

[TestMethod]
public async Task Case010_GetAll()
{
Assert.IsNotNull(_configurationService);
Assert.AreEqual(10, (await _configurationService.GetAllRawAsync()).Count);
}

[TestMethod]
public async Task Case011_ImportFromJsonFileAsync()
{
Assert.IsNotNull(_configurationService);
var path = Path.GetTempFileName();
await File.WriteAllTextAsync(path, """
{
"importBool": false,
"importInt": 123,
"importString": "hello",
"importObject": {
"Test": "fromImport"
}
}
""");
try
{
var imported = await _configurationService.ImportFromJsonFileAsync(path);
Assert.AreEqual(4, imported);
Assert.AreEqual(false, await _configurationService.GetAsync("importBool", true));
Assert.AreEqual(123, await _configurationService.GetAsync("importInt", 0));
Assert.AreEqual("hello", await _configurationService.GetAsync("importString", ""));
var importedObject = await _configurationService.GetAsync("importObject", new TestObj("default"), TestJsonContext.Default.TestObj);
Assert.AreEqual("fromImport", importedObject.Test);
}
finally
{
File.Delete(path);
}
}

[TestMethod]
public async Task Case012_Cleanup()
{
var path = Path.Combine(UserDirectories.Config, "Nickvision.Desktop.Test.Config", "app.db");
Assert.IsNotNull(_databaseService);
Assert.IsNotNull(_configurationService);
await _configurationService.DisposeAsync();
await _databaseService.DisposeAsync();
File.Delete(path);
Directory.Delete(Path.GetDirectoryName(path)!);
Assert.IsFalse(File.Exists(path));
_databaseService = null;
_configurationService = null;
}
}
Loading