/
valzem
/
MatControl
Обзор
Документация
Войти
/
valzem
/
MatControl
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/MatControl.Tests/PhonebookParserTests.cs
112 строк
4 KB
MatControl Dev
Сортировка и поиск в списках, статусы в Движении, импорт с выбором файла, поле Отдел, скиллы
07 авг 2026, 16:45
07 авг 2026, 16:45
4bdbbb6
Код
Авторство
О чём код?
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using MatControl.Data.Import; namespace MatControl.Tests; public class PhonebookParserTests { [Fact] public void ParseRow_SplitsConcatenatedFullName() { var row = new[] { "Консультант", "БерезенцевРоманАлексеевич", "16", "99-63" }; var result = PhonebookParser.ParseRow(row); Assert.NotNull(result); Assert.Equal("Березенцев Роман Алексеевич", result.FullName); Assert.Equal("Консультант", result.Position); Assert.Equal("16", result.Room); Assert.Equal("99-63", result.Phone); } [Fact] public void ParseRow_HandlesSpacedFullName() { var row = new[] { "Главный специалист", "Морозова Екатерина Игоревна", "19", "95-37" }; var result = PhonebookParser.ParseRow(row); Assert.NotNull(result); Assert.Equal("Морозова Екатерина Игоревна", result.FullName); } [Fact] public void ParseRow_ReturnsNull_ForSectionHeader() { var row = new[] { "УПРАВЛЕНИЕ реализации мероприятий занятости и финансового обеспечения" }; Assert.Null(PhonebookParser.ParseRow(row)); } [Fact] public void ParseRow_ReturnsNull_WhenNoFullName() { var row = new[] { "Приемная", "30-95-00" }; Assert.Null(PhonebookParser.ParseRow(row)); } [Fact] public void ParseRow_HandlesFakeUppercaseInsideToken() { var row = new[] { "Заместитель начальника управления -начальник отдела", "БелоусоваЕкатеринаВасильевна", "8", "95-22" }; var result = PhonebookParser.ParseRow(row); Assert.NotNull(result); Assert.Equal("Белоусова Екатерина Васильевна", result.FullName); } [Fact] public void Parse_AssignsDepartmentFromSectionHeaders() { var path = Path.Combine(Path.GetTempPath(), $"phonebook_{Guid.NewGuid():N}.docx"); try { CreatePhonebook(path); var result = PhonebookParser.Parse(path); Assert.NotEmpty(result); Assert.Equal("Руководство", result.First(e => e.FullName == "Локтионов Дмитрий Павлович").Department); Assert.Equal("Отдел развития трудовых ресурсов", result.First(e => e.FullName == "Даурцева Оксана Фёдоровна").Department); } finally { if (File.Exists(path)) { File.Delete(path); } } } private static void CreatePhonebook(string path) { using var document = WordprocessingDocument.Create(path, WordprocessingDocumentType.Document); var mainPart = document.AddMainDocumentPart(); mainPart.Document = new Document(); var body = mainPart.Document.AppendChild(new Body()); var table = body.AppendChild(new Table()); void AddRow(params string[] cells) { var row = new TableRow(); foreach (var cell in cells) { var run = new Run(new Text(cell)); var paragraph = new Paragraph(run); row.Append(new TableCell(paragraph)); } table.Append(row); } AddRow("Должность", "Ф.И.О.", "Ком.", "Тел."); AddRow("Руководство"); AddRow("Председатель", "ЛоктионовДмитрийПавлович", "1", "95-01"); AddRow("Отдел развития трудовых ресурсов"); AddRow("Старший консультант", "ДаурцеваОксанаФёдоровна", "8", "95-24"); } }