using Microsoft.Extensions.Configuration; using Microsoft.VisualStudio.TestTools.UnitTesting; using Phares.Shared; using Serilog; using System.Diagnostics; using System.Reflection; using View_by_Distance.Shared.Models; using View_by_Distance.Shared.Models.Stateless.Methods; using View_by_Distance.Tests.Models; namespace View_by_Distance.Tests; [TestClass] public partial class UnitTestHardCoded { private readonly ILogger _Logger; private readonly AppSettings _AppSettings; private readonly string _WorkingDirectory; private readonly Configuration _Configuration; private readonly IsEnvironment _IsEnvironment; private readonly IConfigurationRoot _ConfigurationRoot; private readonly Property.Models.Configuration _PropertyConfiguration; public UnitTestHardCoded() { ILogger logger; AppSettings appSettings; string workingDirectory; Configuration configuration; IsEnvironment isEnvironment; IConfigurationRoot configurationRoot; LoggerConfiguration loggerConfiguration = new(); Property.Models.Configuration propertyConfiguration; Assembly assembly = Assembly.GetExecutingAssembly(); bool debuggerWasAttachedAtLineZero = Debugger.IsAttached || assembly.Location.Contains(@"\bin\Debug"); isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot); if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName)) throw new Exception("Working directory name must have a value!"); workingDirectory = IWorkingDirectory.GetWorkingDirectory(assembly.GetName().Name, appSettings.WorkingDirectoryName); Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory); _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, configurationRoot); Log.Logger = loggerConfiguration.CreateLogger(); logger = Log.ForContext(); propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); logger.Information("Complete"); _Logger = logger; _AppSettings = appSettings; _Configuration = configuration; _IsEnvironment = isEnvironment; _WorkingDirectory = workingDirectory; _ConfigurationRoot = configurationRoot; _PropertyConfiguration = propertyConfiguration; } private static void NonThrowTryCatch() { try { throw new Exception(); } catch (Exception) { } } [TestMethod] public void TestMethodNull() { Assert.IsFalse(_Logger is null); Assert.IsFalse(_AppSettings is null); Assert.IsFalse(_Configuration is null); Assert.IsFalse(_IsEnvironment is null); Assert.IsFalse(_WorkingDirectory is null); Assert.IsFalse(_ConfigurationRoot is null); Assert.IsFalse(_PropertyConfiguration is null); NonThrowTryCatch(); } [TestMethod] public void TestMethodDel() { string source = @"F:\Tmp\Phares\Compare\Images 2022-09-15 - 7390c13 - III - Results\E) Distance\2022-09-15\7680 x 4320\7680x4320 - Hog - Large\()\(637992984751968513)"; for (int i = 1; i < 11; i++) _ = IPath.DeleteEmptyDirectories(source); Assert.IsTrue(true); NonThrowTryCatch(); } [TestMethod] public void TestMethodGetApproximateYears() { string personDisplayDirectory = @"D:\1) Images A\Images-9b89679-Results\A2) People\9b89679\{}\^\Sydney Dupray^9"; if (Directory.Exists(Directory.GetDirectoryRoot(personDisplayDirectory)) && Directory.Exists(personDisplayDirectory)) { char numberSign = '#'; string? minusOne = null; char[] personCharacters = new char[] { '^' }; string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory); string personBirthdayFormat = _Configuration.PropertyConfiguration.PersonBirthdayFormat; string[] personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly); List<(string, PersonBirthday)> collection = IPersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectory, personDisplayDirectoryName); int? approximateYears = IAge.GetApproximateYears(personCharacters, personDisplayDirectoryName); if (approximateYears is null) throw new NullReferenceException(nameof(approximateYears)); Assert.IsNotNull(approximateYears); Assert.IsTrue(approximateYears.Value == 9); string? change = IPersonContainer.VerifyAge(numberSign, personDisplayDirectory, minusOne, personDisplayDirectoryName, approximateYears, collection); Assert.IsNull(change); } NonThrowTryCatch(); } [TestMethod] public void TestMethodDamn() { // string name; // string[] directories; // string? directoryName; // string checkDirectory; // string sourceDirectory = @"F:\Tmp\Phares\Compare\Images 2022-09-15 - 7390c13 - III - Results\E) Distance\2022-09-15\7680 x 4320\7680x4320 - Hog - Large\()"; // directories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly); // foreach (string directory in directories) // { // directoryName = Path.GetDirectoryName(directory); // if (directoryName is null) // continue; // name = Path.GetFileName(directory); // if (name.Length is 1 or 20) // continue; // checkDirectory = Path.Combine(directoryName, "b", name); // Directory.Move(directory, checkDirectory); // } // directories = Directory.GetDirectories(Path.Combine(sourceDirectory, "b"), "*", SearchOption.TopDirectoryOnly); // foreach (string directory in directories) // { // directoryName = Path.GetDirectoryName(directory); // if (directoryName is null) // continue; // name = Path.GetFileName(directory); // if (name.Length is 1 or 20) // continue; // checkDirectory = Path.Combine(directoryName, $"{name[..^4]})"); // if (Directory.Exists(checkDirectory)) // continue; // Directory.Move(directory, checkDirectory); // } // Assert.IsTrue(true); } [TestMethod] public void TestMethodDel2() { string source = @"F:\Tmp\Phares\Compare\Images 2022-09-15 - 7390c13 - III - Results\E) Distance\2022-09-15\7680 x 4320\7680x4320 - Hog - Large\()\(637992984751968513)"; for (int i = 1; i < 11; i++) _ = IPath.DeleteEmptyDirectories(source); Assert.IsTrue(true); NonThrowTryCatch(); } private static (string?, string, string) Get(string[] segments) { (string?, string, string) result; if ((!segments[0].Contains('#') && (segments[3].Contains('~') || segments[3].Contains('#'))) || (segments[0].Contains('#') && !segments[3].Contains('#'))) result = new(null, segments[3], segments[4]); else result = new(segments[0], segments[3], segments[4]); return result; } [TestMethod] public void TestMoveToVerify() { string http; string[] lines; string? minusOne; string? minusTwo; string[] segments; string[] beforeSegments; string[] matchDirectories; string? personKeyFormattedNew; string? personDisplayDirectory; string personDisplayDirectoryNew; string personDisplayDirectoryNameNew; string personKeyFormattedDirectoryNew; string sourceDirectory = @""; string sourceFile = @"\People - C.tsv"; if (!File.Exists(sourceFile)) lines = Array.Empty(); else lines = File.ReadAllLines(sourceFile); for (int i = 0; i < lines.Length; i++) { if (!lines[i].Contains("https://")) continue; segments = lines[i].Split('\t'); beforeSegments = lines[i - 1].Split('\t'); if (beforeSegments.Length < 4 || segments.Length < 5) continue; matchDirectories = Directory.GetDirectories(sourceDirectory, beforeSegments[0], SearchOption.AllDirectories); if (matchDirectories.Length != 1) continue; personDisplayDirectory = Path.GetDirectoryName(matchDirectories[0]); if (personDisplayDirectory is null) continue; minusOne = Path.GetDirectoryName(personDisplayDirectory); if (minusOne is null) continue; minusTwo = Path.GetDirectoryName(minusOne); if (minusTwo is null) continue; (personKeyFormattedNew, personDisplayDirectoryNameNew, http) = Get(segments); if (personKeyFormattedNew is null) continue; personDisplayDirectoryNew = Path.Combine(minusTwo, "Verify", personDisplayDirectoryNameNew); if (Directory.Exists(personDisplayDirectoryNew)) continue; personKeyFormattedDirectoryNew = Path.Combine(personDisplayDirectoryNew, personKeyFormattedNew); Directory.Move(personDisplayDirectory, personDisplayDirectoryNew); _ = Directory.CreateDirectory(personKeyFormattedDirectoryNew); File.WriteAllText(Path.Combine(personKeyFormattedDirectoryNew, "Facebook.txt"), http); } Assert.IsNotNull(lines); NonThrowTryCatch(); } [TestMethod] public void TestMethodRenameAbandoned() { string checkFile; string source = @"D:\1) Images A\Images-9b89679-Results\A2) People\9b89679\{}\!\Abandoned"; string[] files = Directory.GetFiles(source, "*.abd", SearchOption.TopDirectoryOnly); foreach (string file in files) { checkFile = file[..^4]; if (File.Exists(checkFile)) continue; File.Move(file, checkFile); } Assert.IsTrue(true); NonThrowTryCatch(); } [TestMethod] public void TestMethodAncestryGenealogicalDataCommunication() { List mappedLines; Dictionary> individuals; PersonBirthday personBirthday = new(DateTime.Now); GenealogicalDataCommunication genealogicalDataCommunication; GenealogicalDataCommunicationLines genealogicalDataCommunicationLines; List<(bool, string)> genealogicalDataCommunicationFiles = new() { new(false, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-Roberts/Roberts Family Tree.ged"), new(false, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-Phares/Phares Jr Family Tree.ged"), new(true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160708345114583/638160708345114583.ged"), new(true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160728606500015/638160728606500015.ged"), new(true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160738845419877/638160738845419877.ged"), new(false, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-Porterfield/Porterfield Family Tree.ged"), new(true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160708345114583/638160708345114583-Export.ged"), new(true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160738845419877/638160738845419877-Export.ged"), }; foreach ((bool requireNickName, string genealogicalDataCommunicationFile) in genealogicalDataCommunicationFiles) { (_, individuals, _) = IGenealogicalDataCommunication.GetIndividuals(genealogicalDataCommunicationFile, requireNickName); foreach (KeyValuePair> keyValuePair in individuals) { genealogicalDataCommunicationLines = IGenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(keyValuePair.Value); Assert.IsNotNull(genealogicalDataCommunicationLines.Name); genealogicalDataCommunication = IGenealogicalDataCommunication.GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines); Assert.IsNotNull(genealogicalDataCommunication.Name); } mappedLines = IGenealogicalDataCommunication.GetMappedLines(genealogicalDataCommunicationFile, requireNickName); if (IPath.WriteAllText($"{genealogicalDataCommunicationFile}.cln", string.Join(Environment.NewLine, mappedLines), updateDateWhenMatches: false, compareBeforeWrite: true)) continue; } NonThrowTryCatch(); } [TestMethod] public void TestMethodAncestryGenealogicalDataCommunicationCleanToExport() { int age; long personKey; string ageGroup; string fileName; string? directory; PersonName? personName; string personKeyFormatted; bool isDefaultName = false; PersonBirthday personBirthday; DateTime dateTime = DateTime.Now; Dictionary> individuals; GenealogicalDataCommunication genealogicalDataCommunication; GenealogicalDataCommunicationLines genealogicalDataCommunicationLines; string saveDirectory = $"D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-{dateTime.Ticks}"; List<(bool, bool, string)> genealogicalDataCommunicationFiles = new() { new(false, false, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-Roberts/Roberts Family Tree.ged.cln"), new(false, false, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-Phares/Phares Jr Family Tree.ged.cln"), new(true, true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160708345114583/638160708345114583.ged.cln"), new(true, true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160728606500015/638160728606500015.ged.cln"), new(true, true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160738845419877/638160738845419877.ged.cln"), new(false, false, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Ancestry-Porterfield/Porterfield Family Tree.ged.cln"), new(true, true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160708345114583/638160708345114583-Export.ged.cln"), new(true, true, "D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Code-638160738845419877/638160738845419877-Export.ged.cln"), }; foreach ((bool verify, bool requireNickName, string genealogicalDataCommunicationFile) in genealogicalDataCommunicationFiles) { fileName = Path.GetFileNameWithoutExtension(genealogicalDataCommunicationFile).Split(' ')[0]; (_, individuals, _) = IGenealogicalDataCommunication.GetIndividuals(genealogicalDataCommunicationFile, requireNickName); foreach (KeyValuePair> keyValuePair in individuals) { personBirthday = new(dateTime); genealogicalDataCommunicationLines = IGenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(keyValuePair.Value); Assert.IsNotNull(genealogicalDataCommunicationLines.Name); genealogicalDataCommunication = IGenealogicalDataCommunication.GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines); Assert.IsNotNull(genealogicalDataCommunication.Name); if (genealogicalDataCommunication.Birth is null) continue; personName = IPersonName.GetPersonName(genealogicalDataCommunication); if (personName is null) continue; personBirthday = new(genealogicalDataCommunication.Birth.Value); personKey = personBirthday.Value.Ticks; (age, _) = IAge.GetAge(dateTime.Ticks, personKey); personKeyFormatted = IPersonBirthday.GetFormatted(_PropertyConfiguration.PersonBirthdayFormat, personKey); if (age < 25) ageGroup = "1) Less-25"; else if (age < 50) ageGroup = "2) Less-50"; else if (age < 100) ageGroup = "3) Less-100"; else if (age < 200) ageGroup = "4) Less-200"; else ageGroup = "5) Else"; directory = Path.Combine(saveDirectory, fileName, ageGroup, $"{personName.First.Value} {personName.Last.Value}^{age}", personKeyFormatted); if (!Directory.Exists(directory)) _ = Directory.CreateDirectory(directory); IGenealogicalDataCommunication.WriteFile(personKeyFormatted, personBirthday, personName, keyValuePair.Value, isDefaultName, directory, genealogicalDataCommunication, verify); } } NonThrowTryCatch(); } }