Files
Rozpisky/Rozpisky.Tests/LogaVrstvyTesty.cs
T
marekandClaude Opus 5 cd2b82db3c Vlastní loga uživatele mimo instalační složku
Loga se dosud hledala jen v loga\ vedle .exe. Kdo si do číselníku přidal
firmu s vlastním logem, musel .dxf nakopírovat do instalační složky – tu ale
přeinstalace přepíše a v Program Files do ní nejde psát. Číselník firmu
přežil, logo ne.

Nově se hledá nejdřív v %APPDATA%\Rozpisky\loga a teprve pak mezi
dodávanými; nabídka v Údajích projektu je sjednocením obou složek (stejné
jméno se nezdvojuje). Tlačítko v Nastavení složku založí a otevře.

Hierarchie je stejná jako u číselníků a je to úmyslné: při konfliktu vyhrává
uživatelská vrstva. Kdyby vyhrávala dodávaná, uživatelova úprava by se tiše
neprojevila – on ji vidí uloženou, program pracuje s něčím jiným. Výjimkou
zůstávají data držící správnost výstupu (mapovani.json, Rozpiska.dxf), kde
vyhrává program.

Subagenti dostali explicitní model: render-dxf a wpf-ui sonnet,
verifikator haiku (jen spouští build a testy).

Build 0 chyb / 0 varování, 55 testů zelených (5 nových na slučování nabídky).

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

81 lines
2.7 KiB
C#
Raw 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 System.IO;
using Rozpisky.Dxf;
using Xunit;
namespace Rozpisky.Tests;
/// <summary>
/// Nabídka log ze dvou složek (<see cref="LogaResolver.SlozNabidku"/>): dodávaná vedle .exe
/// a uživatelská, na kterou přeinstalace nesahá. Stejná hierarchie jako u číselníků
/// uživatelovo logo stejného jména přebíjí dodávané.
/// </summary>
public class LogaVrstvyTesty : IDisposable
{
private readonly string _koren = Path.Combine(Path.GetTempPath(), "rozpisky-loga-testy-" + Guid.NewGuid().ToString("N"));
private readonly string _dodavana;
private readonly string _uzivatelska;
public LogaVrstvyTesty()
{
_dodavana = Path.Combine(_koren, "dodavana");
_uzivatelska = Path.Combine(_koren, "uzivatelska");
Directory.CreateDirectory(_dodavana);
Directory.CreateDirectory(_uzivatelska);
}
public void Dispose()
{
try { Directory.Delete(_koren, recursive: true); } catch (IOException) { }
GC.SuppressFinalize(this);
}
private void Zaloz(string dir, params string[] soubory)
{
foreach (var s in soubory) File.WriteAllText(Path.Combine(dir, s), "0\nEOF\n");
}
[Fact]
public void BezUzivatelskychLogSeVratiJenDodavana()
{
Zaloz(_dodavana, "exprojekt.dxf", "mco.dxf");
Assert.Equal(new[] { "exprojekt.dxf", "mco.dxf" },
LogaResolver.SlozNabidku(_uzivatelska, _dodavana));
}
[Fact]
public void UzivatelskaLogaSeDoplniKDodavanym()
{
Zaloz(_dodavana, "exprojekt.dxf");
Zaloz(_uzivatelska, "nova_firma.dxf");
Assert.Equal(new[] { "exprojekt.dxf", "nova_firma.dxf" },
LogaResolver.SlozNabidku(_uzivatelska, _dodavana));
}
[Fact]
public void StejneJmenoSeVNabidceNezdvoji()
{
// Uživatel si opravil dodávané logo a uložil ho pod stejným jménem k sobě
// v comboboxu musí zůstat jedna položka, ne dvě nerozlišitelné.
Zaloz(_dodavana, "exprojekt.dxf");
Zaloz(_uzivatelska, "exprojekt.dxf");
Assert.Equal(new[] { "exprojekt.dxf" }, LogaResolver.SlozNabidku(_uzivatelska, _dodavana));
}
[Fact]
public void ChybejiciUzivatelskaSlozkaNevadi()
{
Zaloz(_dodavana, "exprojekt.dxf");
var neexistuje = Path.Combine(_koren, "tady-nic-neni");
Assert.Equal(new[] { "exprojekt.dxf" }, LogaResolver.SlozNabidku(neexistuje, _dodavana));
}
[Fact]
public void NabidkaJeAbecedniAIgnorujeJineNezDxf()
{
Zaloz(_dodavana, "tesia.dxf", "README.txt", "mco.dxf");
Zaloz(_uzivatelska, "alfa.dxf");
Assert.Equal(new[] { "alfa.dxf", "mco.dxf", "tesia.dxf" },
LogaResolver.SlozNabidku(_uzivatelska, _dodavana));
}
}