diff --git a/Apps/YPermitin.FIASToolSet.DistributionDownloader/YPermitin.FIASToolSet.DistributionDownloader.csproj b/Apps/YPermitin.FIASToolSet.DistributionDownloader/YPermitin.FIASToolSet.DistributionDownloader.csproj index 5fb6db9..93ac99d 100644 --- a/Apps/YPermitin.FIASToolSet.DistributionDownloader/YPermitin.FIASToolSet.DistributionDownloader.csproj +++ b/Apps/YPermitin.FIASToolSet.DistributionDownloader/YPermitin.FIASToolSet.DistributionDownloader.csproj @@ -4,7 +4,7 @@ Exe net6.0 enable - enable + disable diff --git a/Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.DistributionBrowser.csproj b/Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.DistributionBrowser.csproj index 21a2c35..261a65f 100644 --- a/Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.DistributionBrowser.csproj +++ b/Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.DistributionBrowser.csproj @@ -9,10 +9,12 @@ 1701;1702;1591 + YPermitin.FIASToolSet.DistributionBrowser.xml 1701;1702;1591 + YPermitin.FIASToolSet.DistributionBrowser.xml @@ -20,16 +22,6 @@ - - - PreserveNewest - - - - - - - ResXFileCodeGenerator @@ -45,4 +37,8 @@ + + + + diff --git a/Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.Loader.xml b/Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.DistributionBrowser.xml similarity index 100% rename from Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.Loader.xml rename to Libs/YPermitin.FIASToolSet.DistributionBrowser/YPermitin.FIASToolSet.DistributionBrowser.xml diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/DataReaders/NormativeDocKindReader.cs b/Libs/YPermitin.FIASToolSet.DistributionReader/DataReaders/NormativeDocKindReader.cs new file mode 100644 index 0000000..6443877 --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/DataReaders/NormativeDocKindReader.cs @@ -0,0 +1,108 @@ +using System.Collections; +using System.Xml; +using YPermitin.FIASToolSet.DistributionReader.Models; + +namespace YPermitin.FIASToolSet.DistributionReader.DataReaders; + +public class NormativeDocKindReader : IEnumerable +{ + private readonly string _dataFilePath; + private NormativeDocKindEnumerator _enumerator; + + public NormativeDocKindReader(string dataFilePath) + { + _dataFilePath = dataFilePath; + } + + public IEnumerator GetEnumerator() + { + if (_enumerator == null) + { + _enumerator = new NormativeDocKindEnumerator(_dataFilePath); + } + + return _enumerator; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public class NormativeDocKindEnumerator : IEnumerator + { + private readonly string _dataFilePath; + + private NormativeDocKind _current; + + private XmlReader _reader; + private XmlReader Reader { + get + { + if (_reader == null) + { + _reader = XmlReader.Create(_dataFilePath); + } + return _reader; + } + } + + public NormativeDocKindEnumerator(string dataFilePath) + { + _dataFilePath = dataFilePath; + } + + public NormativeDocKind Current => _current; + + object IEnumerator.Current => Current; + + public bool MoveNext() + { + while (Reader.Read()) + { + if (Reader.Name == "NDOCKIND") + { + var idValue = Reader.GetAttribute("ID"); + var nameValue = Reader.GetAttribute("NAME"); + + if(int.TryParse(idValue, out int id)) + { + var newObject = new NormativeDocKind(id, nameValue); + _current = newObject; + return true; + } + else + { + _current = null; + } + } + } + + DisposeXmlReader(); + return false; + } + + public void Reset() + { + DisposeXmlReader(); + } + + public void Dispose() + { + DisposeXmlReader(); + } + + private void DisposeXmlReader() + { + if (_reader != null) + { + if(_reader.ReadState != ReadState.Closed) + _reader.Close(); + + _reader.Dispose(); + + _reader = null; + } + } + } +} \ No newline at end of file diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/Exceptions/FIASBadDataException.cs b/Libs/YPermitin.FIASToolSet.DistributionReader/Exceptions/FIASBadDataException.cs new file mode 100644 index 0000000..47e0b45 --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/Exceptions/FIASBadDataException.cs @@ -0,0 +1,8 @@ +namespace YPermitin.FIASToolSet.DistributionReader.Exceptions; + +public class FIASBadDataException : Exception +{ + public FIASBadDataException(string message) : base(message) + { + } +} \ No newline at end of file diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/Exceptions/FIASDataNotFoundException.cs b/Libs/YPermitin.FIASToolSet.DistributionReader/Exceptions/FIASDataNotFoundException.cs new file mode 100644 index 0000000..c769e7c --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/Exceptions/FIASDataNotFoundException.cs @@ -0,0 +1,11 @@ +namespace YPermitin.FIASToolSet.DistributionReader.Exceptions; + +public class FIASDataNotFoundException : Exception +{ + private readonly string FilePath; + + public FIASDataNotFoundException(string message, string filePath) : base(message) + { + FilePath = filePath; + } +} \ No newline at end of file diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/FIASDistributionReader.cs b/Libs/YPermitin.FIASToolSet.DistributionReader/FIASDistributionReader.cs new file mode 100644 index 0000000..e8dbfc8 --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/FIASDistributionReader.cs @@ -0,0 +1,85 @@ +using YPermitin.FIASToolSet.DistributionReader.DataReaders; +using YPermitin.FIASToolSet.DistributionReader.Exceptions; +using YPermitin.FIASToolSet.DistributionReader.Models; + +namespace YPermitin.FIASToolSet.DistributionReader; + +public class FIASDistributionReader +{ + private readonly string _workingDirectory; + + public FIASDistributionReader(string workingDirectory) + { + _workingDirectory = workingDirectory; + } + + /// + /// Получение версии дистрибутива ФИАС в строковм виде + /// + /// Строка с информацией о версии ФИАС + /// Не удалось найти файл с информацией о версии + public string GetVersionAsString() + { + string fileVersionInfoPath = Path.Combine( + _workingDirectory, + "version.txt" + ); + + string version; + + if (File.Exists(fileVersionInfoPath)) + { + version = File.ReadAllText(fileVersionInfoPath).Trim(); + } + else + { + throw new FIASDataNotFoundException("Не обнаружен файл с информацией о версии.", fileVersionInfoPath); + } + + return version; + } + + /// + /// Получение версии дистрибутива ФИАС в числовом виде + /// + /// Версия ФИАС числом + /// Не удалось конвертировать значение версии ФИАС в число + public int GetVersion() + { + string versionAsString = GetVersionAsString(); + + if (int.TryParse(versionAsString.Replace(".", string.Empty), out int versionAsInt)) + { + return versionAsInt; + } + else + { + var exceptionObject = new FIASBadDataException( + $"Не удалось конвертировать значение версии \"{versionAsString}\" в числовой формат."); + exceptionObject.Data.Add("VersionAsString", versionAsString); + throw exceptionObject; + } + } + + public NormativeDocKindReader GetNormativeDocKinds() + { + string fileNormativeDocKindsPath; + var foundFiles = Directory.GetFiles(_workingDirectory, "AS_NORMATIVE_DOCS_KINDS_20230706_*.XML"); + if (foundFiles.Length == 1) + { + FileInfo foundFileInfo = new FileInfo(foundFiles[0]); + fileNormativeDocKindsPath = Path.Combine( + _workingDirectory, + foundFileInfo.Name + ); + } + else + { + throw new FIASDataNotFoundException( + "Не обнаружен файл с информацией о видах нормативных документов.", + "AS_NORMATIVE_DOCS_KINDS_20230706_*.XML"); + } + + return new NormativeDocKindReader(fileNormativeDocKindsPath); + } +} \ No newline at end of file diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/Models/NormativeDocKind.cs b/Libs/YPermitin.FIASToolSet.DistributionReader/Models/NormativeDocKind.cs new file mode 100644 index 0000000..ae813b5 --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/Models/NormativeDocKind.cs @@ -0,0 +1,16 @@ +namespace YPermitin.FIASToolSet.DistributionReader.Models; + +/// +/// Вид нормативного документа +/// +public class NormativeDocKind +{ + public readonly int Id; + public readonly string Name; + + public NormativeDocKind(int id, string name) + { + Id = id; + Name = name; + } +} \ No newline at end of file diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.csproj b/Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.csproj new file mode 100644 index 0000000..0af0117 --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.csproj @@ -0,0 +1,19 @@ + + + + net6.0 + enable + enable + + + + YPermitin.FIASToolSet.DistributionReader.xml + 1701;1702;1591;IL2121 + + + + YPermitin.FIASToolSet.DistributionReader.xml + 1701;1702;1591;IL2121 + + + diff --git a/Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.xml b/Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.xml new file mode 100644 index 0000000..e0cf3bd --- /dev/null +++ b/Libs/YPermitin.FIASToolSet.DistributionReader/YPermitin.FIASToolSet.DistributionReader.xml @@ -0,0 +1,27 @@ + + + + YPermitin.FIASToolSet.DistributionReader + + + + + Получение версии дистрибутива ФИАС в строковм виде + + Строка с информацией о версии ФИАС + Не удалось найти файл с информацией о версии + + + + Получение версии дистрибутива ФИАС в числовом виде + + Версия ФИАС числом + Не удалось конвертировать значение версии ФИАС в число + + + + Вид нормативного документа + + + + diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/AddressObjectTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/AddressObjectTypeCollectionTests.cs new file mode 100644 index 0000000..5b509a9 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/AddressObjectTypeCollectionTests.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class AddressObjectTypeCollectionTests +{ + private readonly string _dataFile; + + public AddressObjectTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_ADDR_OBJ_TYPES_20230706_42f95bf4-bebe-4e6a-ac02-00ab1f652505.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new AddressObjectTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(421, allItems.Count); + + Assert.AreEqual(5, allItems[0].Id); + Assert.AreEqual(1, allItems[0].Level); + Assert.AreEqual("Автономная область", allItems[0].Name); + Assert.AreEqual("Аобл", allItems[0].ShortName); + Assert.AreEqual("Автономная область", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2015, 11, 5), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ApartmentTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ApartmentTypeCollectionTests.cs new file mode 100644 index 0000000..bb8b2f3 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ApartmentTypeCollectionTests.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class ApartmentTypeCollectionTests +{ + private readonly string _dataFile; + + public ApartmentTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_APARTMENT_TYPES_20230706_e4450931-ca64-4b45-b04d-65471519ddc8.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new ApartmentTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(13, allItems.Count); + + Assert.AreEqual(1, allItems[0].Id); + Assert.AreEqual("Помещение", allItems[0].Name); + Assert.AreEqual("помещ.", allItems[0].ShortName); + Assert.AreEqual("Помещение", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/HouseTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/HouseTypeCollectionTests.cs new file mode 100644 index 0000000..79e0d7a --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/HouseTypeCollectionTests.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class HouseTypeCollectionTests +{ + private readonly string _dataFile; + + public HouseTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_HOUSE_TYPES_20230706_8f22a317-dbec-44e4-9db7-a686a372c1c0.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new HouseTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(14, allItems.Count); + + Assert.AreEqual(1, allItems[0].Id); + Assert.AreEqual("Владение", allItems[0].Name); + Assert.AreEqual("влд.", allItems[0].ShortName); + Assert.AreEqual("Владение", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2015, 11, 5), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(false, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/NormativeDocKindCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/NormativeDocKindCollectionTests.cs new file mode 100644 index 0000000..104dd26 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/NormativeDocKindCollectionTests.cs @@ -0,0 +1,34 @@ +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class NormativeDocKindCollectionTests +{ + private readonly string _dataFile; + + public NormativeDocKindCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_NORMATIVE_DOCS_KINDS_20230706_3ffe3a9e-70c3-44a0-9d94-03ada524851d.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new NormativeDocKindCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(4, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не определено", allItems[0].Name); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/NormativeDocTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/NormativeDocTypeCollectionTests.cs new file mode 100644 index 0000000..51c580f --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/NormativeDocTypeCollectionTests.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class NormativeDocTypeCollectionTests +{ + private readonly string _dataFile; + + public NormativeDocTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_NORMATIVE_DOCS_TYPES_20230706_35b52e02-e36e-4583-bc20-9d1a81c6c4c2.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new NormativeDocTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(25, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не указан", allItems[0].Name); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2016, 3, 31), allItems[0].EndDate); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ObjectLevelCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ObjectLevelCollectionTests.cs new file mode 100644 index 0000000..e9016de --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ObjectLevelCollectionTests.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class ObjectLevelCollectionTests +{ + private readonly string _dataFile; + + public ObjectLevelCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_OBJECT_LEVELS_20230706_4d4c4dfd-b0ce-4596-b923-e687d5118e42.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new ObjectLevelCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(17, allItems.Count); + + Assert.AreEqual(1, allItems[0].Level); + Assert.AreEqual("Субъект РФ", allItems[0].Name); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/OperationTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/OperationTypeCollectionTests.cs new file mode 100644 index 0000000..285fcb0 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/OperationTypeCollectionTests.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class OperationTypeCollectionTests +{ + private readonly string _dataFile; + + public OperationTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_OPERATION_TYPES_20230706_39508983-2c70-485d-98ac-53bad8c38ec5.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new OperationTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(27, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не определено", allItems[0].Name); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ParameterTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ParameterTypeCollectionTests.cs new file mode 100644 index 0000000..6f9c7ae --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/ParameterTypeCollectionTests.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class ParameterTypeCollectionTests +{ + private readonly string _dataFile; + + public ParameterTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_PARAM_TYPES_20230706_5c240782-bd40-44dd-a3fd-2c84c42c6c22.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new ParameterTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(19, allItems.Count); + + Assert.AreEqual(1, allItems[0].Id); + Assert.AreEqual("ИФНС ФЛ", allItems[0].Name); + Assert.AreEqual("ИФНС ФЛ", allItems[0].Description); + Assert.AreEqual("IFNSFL", allItems[0].Code); + Assert.AreEqual(new DateOnly(2011, 11, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(2018, 6, 15), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/RoomTypeCollectionTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/RoomTypeCollectionTests.cs new file mode 100644 index 0000000..af71e17 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/DataCollections/RoomTypeCollectionTests.cs @@ -0,0 +1,40 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; +using YPermitin.FIASToolSet.DistributionReader.DataReaders; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests.DataReaders; + +public class RoomTypeCollectionTests +{ + private readonly string _dataFile; + + public RoomTypeCollectionTests() + { + _dataFile = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData", + "AS_ROOM_TYPES_20230706_190ba38d-fe2d-4afc-a5f7-6330669f570e.XML" + ); + } + + [Test] + public void ReadItems() + { + var collection = new RoomTypeCollection(_dataFile); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(3, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не определено", allItems[0].Name); + Assert.AreEqual("Не определено", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2015, 11, 5), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(2011, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/FIASDistributionReaderTests.cs b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/FIASDistributionReaderTests.cs new file mode 100644 index 0000000..9bfc343 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/FIASDistributionReaderTests.cs @@ -0,0 +1,227 @@ +using System; +using System.IO; +using System.Linq; +using NUnit.Framework; + +namespace YPermitin.FIASToolSet.DistributionReader.Tests; + +public class Tests +{ + private readonly string _workingDirectory; + + public Tests() + { + _workingDirectory = Path.Combine( + Directory.GetCurrentDirectory(), + "SampleData" + ); + } + + [SetUp] + public void Setup() + { + } + + [Test] + public void GetVersionAsStringTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + string version = reader.GetVersionAsString(); + + Assert.IsNotNull(version); + } + + [Test] + public void GetVersionTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + int version = reader.GetVersion(); + + Assert.True(version > 0); + } + + [Test] + public void GetNormativeDocKindsTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetNormativeDocKinds(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(4, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не определено", allItems[0].Name); + } + + [Test] + public void GetNormativeDocTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetNormativeDocTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(25, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не указан", allItems[0].Name); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2016, 3, 31), allItems[0].EndDate); + } + + [Test] + public void GetObjectLevelsTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetObjectLevels(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(17, allItems.Count); + + Assert.AreEqual(1, allItems[0].Level); + Assert.AreEqual("Субъект РФ", allItems[0].Name); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } + + [Test] + public void GetRoomTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetRoomTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(3, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не определено", allItems[0].Name); + Assert.AreEqual("Не определено", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2015, 11, 5), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(2011, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } + + [Test] + public void GetApartmentTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetApartmentTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(13, allItems.Count); + + Assert.AreEqual(1, allItems[0].Id); + Assert.AreEqual("Помещение", allItems[0].Name); + Assert.AreEqual("помещ.", allItems[0].ShortName); + Assert.AreEqual("Помещение", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } + + [Test] + public void GetHouseTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetHouseTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(14, allItems.Count); + + Assert.AreEqual(1, allItems[0].Id); + Assert.AreEqual("Владение", allItems[0].Name); + Assert.AreEqual("влд.", allItems[0].ShortName); + Assert.AreEqual("Владение", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2015, 11, 5), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(false, allItems[0].IsActive); + } + + [Test] + public void GetOperationTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetOperationTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(27, allItems.Count); + + Assert.AreEqual(0, allItems[0].Id); + Assert.AreEqual("Не определено", allItems[0].Name); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } + + [Test] + public void GetAddressObjectTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetAddressObjectTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(421, allItems.Count); + + Assert.AreEqual(5, allItems[0].Id); + Assert.AreEqual(1, allItems[0].Level); + Assert.AreEqual("Автономная область", allItems[0].Name); + Assert.AreEqual("Аобл", allItems[0].ShortName); + Assert.AreEqual("Автономная область", allItems[0].Description); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2015, 11, 5), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(1900, 1, 1), allItems[0].UpdateDate); + } + + [Test] + public void GetParameterTypesTest() + { + FIASDistributionReader reader = new FIASDistributionReader(_workingDirectory); + + var collection = reader.GetParameterTypes(); + var allItems = collection.ToList(); + + Assert.NotNull(allItems); + Assert.IsNotEmpty(allItems); + Assert.AreEqual(19, allItems.Count); + + Assert.AreEqual(1, allItems[0].Id); + Assert.AreEqual("ИФНС ФЛ", allItems[0].Name); + Assert.AreEqual("ИФНС ФЛ", allItems[0].Description); + Assert.AreEqual("IFNSFL", allItems[0].Code); + Assert.AreEqual(new DateOnly(2011, 11, 1), allItems[0].StartDate); + Assert.AreEqual(new DateOnly(2079, 6, 6), allItems[0].EndDate); + Assert.AreEqual(new DateOnly(2018, 6, 15), allItems[0].UpdateDate); + Assert.AreEqual(true, allItems[0].IsActive); + } +} \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_ADDR_OBJ_TYPES_20230706_42f95bf4-bebe-4e6a-ac02-00ab1f652505.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_ADDR_OBJ_TYPES_20230706_42f95bf4-bebe-4e6a-ac02-00ab1f652505.XML new file mode 100644 index 0000000..a9ed460 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_ADDR_OBJ_TYPES_20230706_42f95bf4-bebe-4e6a-ac02-00ab1f652505.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_APARTMENT_TYPES_20230706_e4450931-ca64-4b45-b04d-65471519ddc8.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_APARTMENT_TYPES_20230706_e4450931-ca64-4b45-b04d-65471519ddc8.XML new file mode 100644 index 0000000..46ae32e --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_APARTMENT_TYPES_20230706_e4450931-ca64-4b45-b04d-65471519ddc8.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_HOUSE_TYPES_20230706_8f22a317-dbec-44e4-9db7-a686a372c1c0.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_HOUSE_TYPES_20230706_8f22a317-dbec-44e4-9db7-a686a372c1c0.XML new file mode 100644 index 0000000..a7d0993 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_HOUSE_TYPES_20230706_8f22a317-dbec-44e4-9db7-a686a372c1c0.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_NORMATIVE_DOCS_KINDS_20230706_3ffe3a9e-70c3-44a0-9d94-03ada524851d.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_NORMATIVE_DOCS_KINDS_20230706_3ffe3a9e-70c3-44a0-9d94-03ada524851d.XML new file mode 100644 index 0000000..b7fd616 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_NORMATIVE_DOCS_KINDS_20230706_3ffe3a9e-70c3-44a0-9d94-03ada524851d.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_NORMATIVE_DOCS_TYPES_20230706_35b52e02-e36e-4583-bc20-9d1a81c6c4c2.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_NORMATIVE_DOCS_TYPES_20230706_35b52e02-e36e-4583-bc20-9d1a81c6c4c2.XML new file mode 100644 index 0000000..15a1998 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_NORMATIVE_DOCS_TYPES_20230706_35b52e02-e36e-4583-bc20-9d1a81c6c4c2.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_OBJECT_LEVELS_20230706_4d4c4dfd-b0ce-4596-b923-e687d5118e42.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_OBJECT_LEVELS_20230706_4d4c4dfd-b0ce-4596-b923-e687d5118e42.XML new file mode 100644 index 0000000..89219a3 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_OBJECT_LEVELS_20230706_4d4c4dfd-b0ce-4596-b923-e687d5118e42.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_OPERATION_TYPES_20230706_39508983-2c70-485d-98ac-53bad8c38ec5.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_OPERATION_TYPES_20230706_39508983-2c70-485d-98ac-53bad8c38ec5.XML new file mode 100644 index 0000000..30382b5 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_OPERATION_TYPES_20230706_39508983-2c70-485d-98ac-53bad8c38ec5.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_PARAM_TYPES_20230706_5c240782-bd40-44dd-a3fd-2c84c42c6c22.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_PARAM_TYPES_20230706_5c240782-bd40-44dd-a3fd-2c84c42c6c22.XML new file mode 100644 index 0000000..3725872 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_PARAM_TYPES_20230706_5c240782-bd40-44dd-a3fd-2c84c42c6c22.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_ROOM_TYPES_20230706_190ba38d-fe2d-4afc-a5f7-6330669f570e.XML b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_ROOM_TYPES_20230706_190ba38d-fe2d-4afc-a5f7-6330669f570e.XML new file mode 100644 index 0000000..90f6b5b --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/AS_ROOM_TYPES_20230706_190ba38d-fe2d-4afc-a5f7-6330669f570e.XML @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/version.txt b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/version.txt new file mode 100644 index 0000000..c9010e3 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/SampleData/version.txt @@ -0,0 +1 @@ +2023.07.07 \ No newline at end of file diff --git a/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/YPermitin.FIASToolSet.DistributionReader.Tests.csproj b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/YPermitin.FIASToolSet.DistributionReader.Tests.csproj new file mode 100644 index 0000000..0cd9ff9 --- /dev/null +++ b/Tests/YPermitin.FIASToolSet.DistributionReader.Tests/YPermitin.FIASToolSet.DistributionReader.Tests.csproj @@ -0,0 +1,54 @@ + + + + net6.0 + disable + + false + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/YPermitin.FIASToolSet.sln b/YPermitin.FIASToolSet.sln index 1f33cbd..f7f4f1b 100644 --- a/YPermitin.FIASToolSet.sln +++ b/YPermitin.FIASToolSet.sln @@ -35,6 +35,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apps", "Apps", "{FAA25495-4 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YPermitin.FIASToolSet.DistributionDownloader", "Apps\YPermitin.FIASToolSet.DistributionDownloader\YPermitin.FIASToolSet.DistributionDownloader.csproj", "{C3B585DE-1E5C-43D0-B9FE-EEA1B5673DDD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YPermitin.FIASToolSet.DistributionReader", "Libs\YPermitin.FIASToolSet.DistributionReader\YPermitin.FIASToolSet.DistributionReader.csproj", "{68921ADE-DF52-4157-BB05-3F9280DDA725}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YPermitin.FIASToolSet.DistributionReader.Tests", "Tests\YPermitin.FIASToolSet.DistributionReader.Tests\YPermitin.FIASToolSet.DistributionReader.Tests.csproj", "{F63B71FA-BD02-482B-89D3-E35EAD88BF15}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -77,6 +81,14 @@ Global {C3B585DE-1E5C-43D0-B9FE-EEA1B5673DDD}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3B585DE-1E5C-43D0-B9FE-EEA1B5673DDD}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3B585DE-1E5C-43D0-B9FE-EEA1B5673DDD}.Release|Any CPU.Build.0 = Release|Any CPU + {68921ADE-DF52-4157-BB05-3F9280DDA725}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68921ADE-DF52-4157-BB05-3F9280DDA725}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68921ADE-DF52-4157-BB05-3F9280DDA725}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68921ADE-DF52-4157-BB05-3F9280DDA725}.Release|Any CPU.Build.0 = Release|Any CPU + {F63B71FA-BD02-482B-89D3-E35EAD88BF15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F63B71FA-BD02-482B-89D3-E35EAD88BF15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F63B71FA-BD02-482B-89D3-E35EAD88BF15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F63B71FA-BD02-482B-89D3-E35EAD88BF15}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -91,6 +103,8 @@ Global {0A3BF334-1F90-4A14-B50F-D757956380C8} = {068FF229-56E5-4718-83EF-1D863CBE8F71} {7C8AF72D-8645-4B5D-B1E5-FC3C405FEC46} = {068FF229-56E5-4718-83EF-1D863CBE8F71} {C3B585DE-1E5C-43D0-B9FE-EEA1B5673DDD} = {FAA25495-423B-44E1-B49B-7DB6DB993664} + {68921ADE-DF52-4157-BB05-3F9280DDA725} = {068FF229-56E5-4718-83EF-1D863CBE8F71} + {F63B71FA-BD02-482B-89D3-E35EAD88BF15} = {AAAACF02-36A1-446B-83B5-B2FDE594C273} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E8FCAA60-A495-45A3-95C8-405142F3203A}