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>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user