Stufe 4c (#764): Kommentare in C#, WebUI-Skripten, CSS und HTML auf Englisch
Rund 2.600 Kommentarblöcke in 310 C#-Dateien übersetzt, Begründungen vollständig erhalten: blockweise gleiche Anzahl wie vorher, kein Block unter 60 % seiner Länge, der Code außerhalb der Kommentare per Tokenizer byte-identisch geprüft. Zitate deutscher Oberflächentexte und Testdaten bleiben deutsch. WebUI: Kommentare in JS/CSS/HTML übersetzt, JSDoc-@param an die in 4b umbenannten Parameter angeglichen. Dabei behoben: - 4b hatte "tag" (HTML-Tag) als deutsches "Tag" gelesen und zu "dayValue" gemacht (makeElement, svg, Tagesübersicht) - zurück auf tag/day. - Aufgaben "InProgress" bekamen die Plakettenart "laufend", für die es nie eine CSS-Klasse gab - jetzt "success" wie laufende Instanzen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
da4ceac7d5
commit
837a634a22
@@ -6,13 +6,13 @@ using Shouldly;
|
||||
namespace ClawdDotNet.App.Tests.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Die tägliche Sicherung, seit sie der Instanz gehört (#528, Stufe 1).
|
||||
/// The daily backup, since it belongs to the instance (#528, stage 1).
|
||||
///
|
||||
/// <para>Schalter, Uhrzeit, Zielordner und Aufbewahrung standen in den
|
||||
/// Anwendungseinstellungen und galten damit für jede Instanz. Zwei Folgen: Wer die
|
||||
/// Sicherung für eine Instanz einschaltete, schaltete sie für alle ein — und alle
|
||||
/// Archive lagen in einem Ordner, in dem die Aufbewahrung nach dem Präfix
|
||||
/// <c>backup_<Instanzname>_</c> aufräumt. Dass ein Präfix keine Grenze ist, zeigt
|
||||
/// <para>Switch, time, target folder and retention lived in the
|
||||
/// application settings and thus applied to every instance. Two consequences: whoever
|
||||
/// enabled the backup for one instance enabled it for all — and all
|
||||
/// archives lay in one folder in which retention cleans up by the prefix
|
||||
/// <c>backup_<Instanzname>_</c>. That a prefix is not a boundary is shown by
|
||||
/// <see cref="Im_gemeinsamen_Ordner_greift_die_Aufbewahrung_ueber_die_Instanz_hinaus"/>.</para>
|
||||
/// </summary>
|
||||
public sealed class BackupSchedulerTests : IDisposable
|
||||
@@ -23,10 +23,10 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
public void Dispose()
|
||||
{
|
||||
try { Directory.Delete(_root, recursive: true); }
|
||||
catch { /* Ein liegengebliebener Testordner faerbt keinen Lauf rot. */ }
|
||||
catch { /* A leftover test folder does not turn a run red. */ }
|
||||
}
|
||||
|
||||
/// <summary>Ein Instanzverzeichnis mit genug Inhalt, dass sich eine Sicherung lohnt.</summary>
|
||||
/// <summary>An instance directory with enough content that a backup is worthwhile.</summary>
|
||||
private string NeueInstanz(string name)
|
||||
{
|
||||
var dir = Path.Combine(_root, "Instance-" + name);
|
||||
@@ -47,8 +47,8 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Eine Uhr, die auf einer Zeit steht — der Zeitpunkt entscheidet, ob
|
||||
/// <c>TickAsync</c> etwas tut.
|
||||
/// A clock standing at a time — the point in time decides whether
|
||||
/// <c>TickAsync</c> does anything.
|
||||
/// </summary>
|
||||
private sealed class FesteUhr(DateTime jetzt) : TimeProvider
|
||||
{
|
||||
@@ -61,7 +61,7 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
|
||||
private static DateTime Nachts(int tag) => new(2026, 9, tag, 4, 0, 0, DateTimeKind.Utc);
|
||||
|
||||
// ─── Der Zielordner ───
|
||||
// ─── The target folder ───
|
||||
|
||||
[Fact]
|
||||
public async Task Ohne_Angabe_landet_die_Sicherung_im_Instanzverzeichnis()
|
||||
@@ -88,7 +88,7 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
Directory.GetFiles(Path.Combine(b, "Backups"), "*.zip").Length.ShouldBe(1);
|
||||
}
|
||||
|
||||
// ─── Der Schalter ───
|
||||
// ─── The switch ───
|
||||
|
||||
[Fact]
|
||||
public async Task Ausgeschaltet_passiert_nichts()
|
||||
@@ -125,7 +125,7 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
Directory.GetFiles(Path.Combine(dir, "Backups"), "*.zip").Length.ShouldBe(1);
|
||||
}
|
||||
|
||||
// ─── Die Aufbewahrung ───
|
||||
// ─── Retention ───
|
||||
|
||||
[Fact]
|
||||
public async Task Die_Aufbewahrung_raeumt_die_eigenen_Archive_auf()
|
||||
@@ -134,7 +134,7 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
var ziel = Path.Combine(dir, "Backups");
|
||||
Directory.CreateDirectory(ziel);
|
||||
|
||||
// Drei Archive aus der Vergangenheit, die aelter sind als das gleich entstehende.
|
||||
// Three archives from the past that are older than the one about to be created.
|
||||
foreach (var tag in new[] { 1, 2, 3 })
|
||||
{
|
||||
var datei = Path.Combine(ziel, $"backup_Alt_2026-08-0{tag}_0300.zip");
|
||||
@@ -161,14 +161,14 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Warum der Zielordner der Instanz gehören muss.
|
||||
/// Why the target folder has to belong to the instance.
|
||||
///
|
||||
/// <para>Die Aufbewahrung sucht nach dem Präfix <c>backup_<Instanzname>_</c>,
|
||||
/// und ein Präfix ist keine Grenze: <c>backup_Test_2_….zip</c> — das Archiv der
|
||||
/// Instanz <c>Test_2</c> — fängt mit <c>backup_Test_</c> an. Im gemeinsamen Ordner
|
||||
/// zählt <c>Test</c> es also zu den eigenen und wirft es weg. Getrennte Ordner
|
||||
/// nehmen der Namensfrage ihre Wirkung: Der Test hier stellt den alten Zustand
|
||||
/// eigens wieder her, indem er beiden Instanzen denselben Ordner einträgt.</para>
|
||||
/// <para>Retention looks for the prefix <c>backup_<Instanzname>_</c>,
|
||||
/// and a prefix is not a boundary: <c>backup_Test_2_….zip</c> — the archive of the
|
||||
/// instance <c>Test_2</c> — starts with <c>backup_Test_</c>. In the shared folder
|
||||
/// <c>Test</c> therefore counts it among its own and throws it away. Separate folders
|
||||
/// take away the effect of the naming question: the test here deliberately restores the old state
|
||||
/// by entering the same folder for both instances.</para>
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Im_gemeinsamen_Ordner_greift_die_Aufbewahrung_ueber_die_Instanz_hinaus()
|
||||
@@ -187,7 +187,7 @@ public sealed class BackupSchedulerTests : IDisposable
|
||||
"Der alte Zustand ist damit belegt — im gemeinsamen Ordner räumt eine "
|
||||
+ "Instanz über ihre eigenen Archive hinaus auf.");
|
||||
|
||||
// Und die Gegenprobe: mit getrennten Ordnern kommen sie sich nicht in die Quere.
|
||||
// And the counter-check: with separate folders they do not get in each other's way.
|
||||
var eigen = NeueInstanz("Test2");
|
||||
var eigenesArchiv = Path.Combine(eigen, "Backups", "backup_Test2_2026-08-01_0300.zip");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(eigenesArchiv)!);
|
||||
|
||||
Reference in New Issue
Block a user