Files
marekandClaude Opus 5 a6377ab583 Baseline: současný stav projektu Rozpisky
První commit — WPF aplikace pro generování výkresových rohových razítek
(.NET 10, SkiaSharp, ACadSharp, ClosedXML) včetně xUnit testů, DXF šablony,
log a dokumentace. Build výstupy (bin/, obj/, .vs/) jsou ignorovány.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 09:45:49 +02:00

131 lines
4.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Rozpisky.Dxf;
using Rozpisky.Models;
using Xunit;
namespace Rozpisky.Tests;
/// <summary>
/// Čistá byznys logika převodu vstupů na SŽ-kódy a názvy: 47-poziční kód
/// (<see cref="KodPrilohy"/>), rozpad čísla objektu (<see cref="ObjektOznaceni"/>) a automatické
/// jméno rozvržení (<see cref="Priloha.JmenoRozvrzeniAuto"/>). Hlídá pevnou šířku/pozice kódu
/// tichý posun by jinak zkazil kód na každém výkresu. Očekávané hodnoty jsou worked examples
/// z doc-komentářů příslušných metod.
/// </summary>
public class KodovaniTesty
{
private static Projekt VzorProjekt() => new()
{
Skod = "SO12345",
StupenDokumentace = "DUSP",
};
private static Priloha VzorPriloha() => new()
{
CisloObjektu = "SO131.45.12.01",
OznaceniCasti = "D",
OznaceniDilciCasti = "D110",
TypPrilohy = "D1",
DilciPriloha = "1",
PoradiPrilohy = "001",
R1 = "V00",
};
[Fact]
public void Sestav_MaPevnychSedmActyricetZnaku_APozice()
{
var kod = KodPrilohy.Sestav(VzorProjekt(), VzorPriloha());
Assert.Equal(KodPrilohy.Delka, kod.Length);
Assert.Equal("SO12345XXXX_DUSP_D110_SO1314512_01_D1_1_001_V00", kod);
}
[Fact]
public void Sestav_PrazdnaPoleDoplniX_ProrezanaOrizne()
{
var p = new Projekt { Skod = "", StupenDokumentace = "" };
var r = new Priloha { CisloObjektu = "", R1 = "" };
var kod = KodPrilohy.Sestav(p, r);
Assert.Equal(KodPrilohy.Delka, kod.Length);
// Samé X kromě separátorů na pevných pozicích 12,17,22,32,35,38,40,44.
Assert.Equal("XXXXXXXXXXX_XXXX_XXXX_XXXXXXXXX_XX_XX_X_XXX_XXX", kod);
}
[Fact]
public void SestavDesky_MaPevnyStred_XX_X_000()
{
var kod = KodPrilohy.SestavDesky(VzorProjekt(), VzorPriloha());
Assert.Equal(KodPrilohy.Delka, kod.Length);
Assert.Equal("SO12345XXXX_DUSP_D110_SO1314512_01_XX_X_000_V00", kod);
}
[Fact]
public void SestavSeznam_PrepiseStredAVoltelnouRevizi()
{
var kod = KodPrilohy.SestavSeznam(VzorProjekt(), VzorPriloha(), revizeKod: "P01");
Assert.Equal(KodPrilohy.Delka, kod.Length);
Assert.Equal("SO12345XXXX_DUSP_D110_SO1314512_01_XX_X_001_P01", kod);
}
[Theory]
[InlineData("V00", 'V', "00")] // vedoucí znak = typ, zbytek číslo
[InlineData("002", '0', "02")] // číslicový typ 0, číslo z dalších číslic
[InlineData("", 'X', "XX")] // bez revize → X + XX
public void RozpadRevize_SePromitneDoPozic45Az47(string rev, char typ, string cislo)
{
var r = VzorPriloha();
r.R1 = rev;
var kod = KodPrilohy.Sestav(VzorProjekt(), r);
Assert.Equal(typ, kod[44]); // pozice 45 (0-based 44)
Assert.Equal(cislo, kod.Substring(45)); // pozice 4647
}
[Fact]
public void ObjektOznaceni_Rozpad_RozdeliNaSlozky()
{
var o = ObjektOznaceni.Rozpad("SO131.45.12.01");
Assert.Equal("SO", o.Prefix);
Assert.Equal("131", o.Cislo);
Assert.Equal("45", o.Usek);
Assert.Equal("12", o.Razeni);
Assert.Equal("01", o.Podobjekt);
}
[Theory]
[InlineData("SK11", "SK", "11")] // jen řada, bez dalších segmentů
[InlineData("PS 22-3_4", "PS", "")] // libovolný oddělovač; "PS" samé písmeno → prázdné číslo
public void ObjektOznaceni_Rozpad_ZvladneOddelovaceAKratkeVstupy(string vstup, string prefix, string cislo)
{
var o = ObjektOznaceni.Rozpad(vstup);
Assert.Equal(prefix, o.Prefix);
Assert.Equal(cislo, o.Cislo);
}
[Fact]
public void ObjektOznaceni_Rozpad_PrazdnyVstupDaSamePrazdne()
{
var o = ObjektOznaceni.Rozpad("");
Assert.Equal(new ObjektOznaceni("", "", "", "", ""), o);
}
[Fact]
public void JmenoRozvrzeniAuto_SkladaZObjektuAPrilohy()
{
var r = VzorPriloha();
Assert.Equal("SO1314512_01_D1_1_001", r.JmenoRozvrzeniAuto);
}
[Fact]
public void JmenoRozvrzeniAuto_ProDeskyJeObjektovySpecial()
{
var r = VzorPriloha();
r.JeDesky = true;
Assert.Equal("SO1314512_01_XX_X_000", r.JmenoRozvrzeniAuto);
}
[Fact]
public void NazevObjektovehoSpecialu_TypXXZustavaLiteralne()
{
Assert.Equal("SO1314512_01_XX_X_001",
Priloha.NazevObjektovehoSpecialu("SO131.45.12.01", "001"));
}
}