/
valzem
/
MatControl
Обзор
Документация
Войти
/
valzem
/
MatControl
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/MatControl.Tests/ColumnMappingTests.cs
99 строк
3 KB
MatControl Dev
Этап 7-9: движения, отчеты (Excel/PDF/печать), импорт с сопоставлением колонок
07 авг 2026, 10:33
07 авг 2026, 10:33
80c1e18
Код
Авторство
О чём код?
using System.Data; using MatControl.Data.Import; using MatControl.Domain; namespace MatControl.Tests; public class ColumnMappingTests { [Fact] public void ParseAssetTableWithMapping_ReadsMappedColumns() { var table = new DataTable(); for (var i = 0; i < 5; i++) { table.Columns.Add($"C{i}"); } table.Rows.Add("Наименование", "Инв. №", "Дата", "Состояние", "Цена"); table.Rows.Add("Компьютер", "INV-1", "18.06.2024", "Введено в эксплуатацию", "25000,50"); var mapping = new AssetColumnMapping { NameColumn = 0, InventoryColumn = 1, YearColumn = 2, StateColumn = 3, PriceColumn = 4 }; var result = ExcelImporter.ParseAssetTableWithMapping(table, "Сопоставление", 0, mapping); Assert.Single(result); Assert.Equal("INV-1", result[0].InventoryNumber); Assert.Equal("Компьютер", result[0].Name); Assert.Equal(2024, result[0].YearInUse); Assert.Equal(AssetState.Рабочее, result[0].State); Assert.Equal(25000.50m, result[0].Price); } [Fact] public void ParseAssetTableWithMapping_GeneratesPlaceholder_WhenInventoryMissing() { var table = new DataTable(); table.Columns.Add("C0"); table.Columns.Add("C1"); table.Rows.Add("Наименование", "Инв. №"); table.Rows.Add("Компьютер", string.Empty); var mapping = new AssetColumnMapping { NameColumn = 0, InventoryColumn = 1 }; var result = ExcelImporter.ParseAssetTableWithMapping(table, "Сопоставление", 0, mapping); Assert.Single(result); Assert.Equal("Сопоставление-001", result[0].InventoryNumber); } [Fact] public void ParseSupplyTableWithMapping_ReadsAndRecalculates() { var table = new DataTable(); table.Columns.Add("C0"); table.Columns.Add("C1"); table.Columns.Add("C2"); table.Rows.Add("Номенклатура", "Цена", "Кол-во"); table.Rows.Add("Картридж", "185", "3"); table.Rows.Add("Бумага", "100,5", "2"); table.Rows.Add("Итого"); var mapping = new SupplyColumnMapping { NameColumn = 0, PriceColumn = 1, QuantityColumn = 2 }; var result = ExcelImporter.ParseSupplyTableWithMapping(table, 0, mapping); Assert.Equal(2, result.Count); Assert.Equal(555m, result[0].TotalSum); Assert.Equal(201m, result[1].TotalSum); } [Fact] public void ReadHeaders_ReturnsFirstRowValues() { var table = new DataTable(); table.Columns.Add("C0"); table.Columns.Add("C1"); table.Rows.Add("Наименование", "Цена"); // ReadHeaders is file-based; here we verify the mapping parser uses headers correctly via the table. Assert.Equal("Наименование", table.Rows[0][0]); Assert.Equal("Цена", table.Rows[0][1]); } }