diff --git a/GUI/WPF/ViewModels/Controls/IdentifiantViewModel.cs b/GUI/WPF/ViewModels/Controls/IdentifiantViewModel.cs index 32dc779..e4f53bb 100644 --- a/GUI/WPF/ViewModels/Controls/IdentifiantViewModel.cs +++ b/GUI/WPF/ViewModels/Controls/IdentifiantViewModel.cs @@ -7,11 +7,11 @@ namespace Upsilon.Apps.Passkey.GUI.WPF.ViewModels.Controls { - public class IdentifierViewModel : INotifyPropertyChanged + public partial class IdentifierViewModel : INotifyPropertyChanged { private readonly IAccount _account; - public static readonly Dictionary IdentifiersTypes = new() + public static readonly Dictionary IdentifiersTypes = new() { { "[Username]", "πŸ‘€" }, { "[Email]", "πŸ“§" }, @@ -34,7 +34,7 @@ public string Identifier value = _getIdentifierType(value); } - foreach (var idType in IdentifiersTypes) + foreach (KeyValuePair idType in IdentifiersTypes) { field = value.Replace(idType.Key, idType.Value); } @@ -63,20 +63,15 @@ public void Refresh() OnPropertyChanged(nameof(IdentifierBackground)); } + [GeneratedRegex(@"^\+\d{1,3}[\d\s\-\.]{6,20}$")] + private static partial Regex _phoneRegex(); + [GeneratedRegex(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")] + private static partial Regex _mailRegex(); private static string _getIdentifierType(string identifier) { - Regex phoneRegex = new(@"^\+\d{1,3}[\d\s\-\.]{6,20}$"); - Regex emailRegex = new(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"); - - if (phoneRegex.IsMatch(identifier)) - { - return "πŸ–" + identifier; - } - if (emailRegex.IsMatch(identifier)) - { - return "πŸ“§" + identifier; - } - return "πŸ‘€" + identifier; + return _phoneRegex().IsMatch(identifier) ? "πŸ–" + identifier + : _mailRegex().IsMatch(identifier) ? "πŸ“§" + identifier + : "πŸ‘€" + identifier; } } } diff --git a/GUI/WPF/ViewModels/Controls/ServiceViewModel.cs b/GUI/WPF/ViewModels/Controls/ServiceViewModel.cs index a1070b6..caef6f2 100644 --- a/GUI/WPF/ViewModels/Controls/ServiceViewModel.cs +++ b/GUI/WPF/ViewModels/Controls/ServiceViewModel.cs @@ -90,11 +90,11 @@ public ServiceViewModel(IService service, string identifierFilter = "", string t public AccountViewModel AddAccount() { - AccountViewModel? accountViewModel = Accounts.FirstOrDefault(x => x.Identifiers.Any(y => y.Identifier == "NewAccount")); + AccountViewModel? accountViewModel = Accounts.FirstOrDefault(x => x.Identifiers.Any(y => y.Identifier.StartsWith("πŸ‘€New Account #"))); if (accountViewModel is null) { - accountViewModel = new(Service.AddAccount(["NewAccount"])); + accountViewModel = new(Service.AddAccount(["πŸ‘€New Account #" + DateTime.Now.Ticks])); accountViewModel.PropertyChanged += _accountViewModel_PropertyChanged; Accounts.Insert(0, accountViewModel); diff --git a/GUI/WPF/ViewModels/UserServicesViewModel.cs b/GUI/WPF/ViewModels/UserServicesViewModel.cs index c623682..d584710 100644 --- a/GUI/WPF/ViewModels/UserServicesViewModel.cs +++ b/GUI/WPF/ViewModels/UserServicesViewModel.cs @@ -141,11 +141,11 @@ public UserServicesViewModel(string defaultTitle) public ServiceViewModel AddService() { - ServiceViewModel? serviceViewModel = Services.FirstOrDefault(x => x.ServiceName == "New Service"); + ServiceViewModel? serviceViewModel = Services.FirstOrDefault(x => x.ServiceName.StartsWith("New Service #")); if (serviceViewModel is null) { - serviceViewModel = new(MainViewModel.User.AddService("New Service")); + serviceViewModel = new(MainViewModel.User.AddService("New Service #" + DateTime.Now.Ticks)); Services.Insert(0, serviceViewModel); } diff --git a/GUI/WPF/raw/vidpll-sVqi93MN9TymqpQ==UGOcrUlBjHsiPMUpOVwOKjiSUBw=.pku b/GUI/WPF/raw/vidpll-sVqi93MN9TymqpQ==UGOcrUlBjHsiPMUpOVwOKjiSUBw=.pku index 22bccc5..67f442f 100644 Binary files a/GUI/WPF/raw/vidpll-sVqi93MN9TymqpQ==UGOcrUlBjHsiPMUpOVwOKjiSUBw=.pku and b/GUI/WPF/raw/vidpll-sVqi93MN9TymqpQ==UGOcrUlBjHsiPMUpOVwOKjiSUBw=.pku differ diff --git a/UnitTests/Models/DatabaseUnitTests.cs b/UnitTests/Models/DatabaseUnitTests.cs index 1dee623..4439dcf 100644 --- a/UnitTests/Models/DatabaseUnitTests.cs +++ b/UnitTests/Models/DatabaseUnitTests.cs @@ -9,12 +9,13 @@ namespace Upsilon.Apps.Passkey.UnitTests.Models [TestClass] public sealed class DatabaseUnitTests { - [TestMethod, Ignore] + [Ignore] + [TestMethod] public void Case00_GenerateNewDatabase() { UnitTestsHelper.ClearTestEnvironment("_"); - IDatabase database = UnitTestsHelper.CreateTestDatabase(["a", "b", "c"], "_"); + IDatabase database = UnitTestsHelper.CreateTestDatabase(["a", "b"], "_"); IUser user = database.User; user.LogoutTimeout = 10; user.CleaningClipboardTimeout = 15; @@ -39,18 +40,18 @@ public void Case00_GenerateNewDatabase() { case 1: account = service.AddAccount(label: $"Account{j}", - identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => x + "@test.te")); + identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => $"πŸ‘€{x}@test.te")); break; case 2: - account = service.AddAccount(identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => x + "@test.te"), + account = service.AddAccount(identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => $"πŸ‘€{x}@test.te"), password: password); break; case 3: - account = service.AddAccount(identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => x + "@test.te")); + account = service.AddAccount(identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => $"πŸ‘€{x}@test.te")); break; default: account = service.AddAccount(label: $"Account{j}", - identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => x + "@test.te"), + identifiers: UnitTestsHelper.GetRandomStringArray(random / 2).Select(x => $"πŸ‘€{x}@test.te"), password: password); break; }