test(EYT-141): fehlender und mehrdeutiger Stundensatz duerfen kein 0,00 € ergeben - #88
Merged
Conversation
…ein 0,00 EUR ergeben EYT-137 verlangt: "Fehlender oder mehrdeutiger Stundensatz wird handlungsorientiert und fail-closed gezeigt; NIEMALS als 0,00 EUR oder scheinbar erfolgreicher Kostenstand." Gemessen am 20.08.2026: `RATE_MISSING` und `RATE_AMBIGUOUS` sind in SECHS API-Testdateien belegt — und im Web in keiner einzigen. Die API weist also nachweislich ab; dass die OBERFLAECHE daraus keinen plausiblen Nullbetrag macht, war die ungeprueft gebliebene Haelfte. Genau sie benennt das Kriterium. Zugesichert ist nicht "es erscheint eine Fehlermeldung" — das waere schwach. Zugesichert ist die AUSGEBLIEBENE Anzeige: kein Snapshot, keine Gesamtsumme, keine Position, und der String `0,00` kommt im ausgelieferten Markup nirgends vor. Der Betrag ist der gefaehrliche Teil: eine Kostenansicht, die bei fehlendem Satz `0,00 EUR` zeigt, sieht aus wie ein Ergebnis und wird als eines gelesen. Geprueft wird das MARKUP, nicht die Sichtbarkeit — ein per CSS verborgener Betrag waere ausgeliefert und damit trotzdem eine Aussage. Zusaetzlich muss der SERVERtext ankommen. Der Client kann die drei 409-Faelle nicht auseinanderhalten (fehlender Satz, mehrdeutiger Satz, unveroeffentlichter Plan); eine eigene Texttabelle waere eine zweite Wahrheit und bei der naechsten Serveraenderung falsch. Gegenmutation — eingespielt, gemessen, zurueckgenommen: im Fehlerzweig von `snapshot` zusaetzlich `<span data-testid="kosten-gesamtsumme">0,00 EUR</span>` rendern. Ergebnis 3 von 33 rot — A25, A26 und A14 (derselbe Schutz fuer den Lesefehler), `AssertionError: expected <span …> to be null`. Zurueckgenommen, `git diff --exit-code` auf `kosten-ansicht.tsx` = 0, danach 33 von 33 gruen. Der erste Mutationsversuch lief ueber `perl -0pi -e` und scheiterte still am Quoting: die Trefferzaehlung meldete 0, der Testlauf war gruen — und haette ohne diese Zaehlung als "Gegenmutation gefahren" durchgehen koennen. Der zweite Versuch prueft die Eindeutigkeit des Ankers und bricht ab, wenn sie fehlt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reviewer's GuideAdds regression tests for snapshot generation error cases with missing or ambiguous hourly rates to ensure the UI never renders a 0,00 € cost state and surfaces the server-provided error text instead. File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Kein Produktionscode, nur der fehlende Nachweis.
Der Befund
EYT-137 verlangt ausdrücklich:
Gemessen:
RATE_MISSINGundRATE_AMBIGUOUSsind in sechs API-Testdateien belegt — und im Web in keiner einzigen:Die API weist also nachweislich ab. Dass die Oberfläche daraus keinen plausiblen Nullbetrag macht, war die ungeprüft gebliebene Hälfte — und genau sie benennt das Kriterium.
Was zugesichert wird
Nicht „es erscheint eine Fehlermeldung" — das wäre schwach. Zugesichert ist die ausgebliebene Anzeige:
kosten-snapshot, keinekosten-gesamtsumme, keinekosten-position,0,00kommt im ausgelieferten Markup nirgends vor,Der Betrag ist der gefährliche Teil: eine Kostenansicht, die bei fehlendem Satz
0,00 €zeigt, sieht aus wie ein Ergebnis und wird als eines gelesen.Geprüft wird das Markup, nicht die Sichtbarkeit — ein per CSS verborgener Betrag wäre ausgeliefert und damit trotzdem eine Aussage.
Warum der Servertext und keine eigene Tabelle: der Client kann die drei 409-Fälle nicht auseinanderhalten (fehlender Satz, mehrdeutiger Satz, unveröffentlichter Plan). Eine clientseitige Texttabelle wäre eine zweite Wahrheit und bei der nächsten Serveränderung falsch.
Gegenmutation — eingespielt, gemessen, zurückgenommen
Im Fehlerzweig von
snapshotzusätzlich<span data-testid="kosten-gesamtsumme">0,00 EUR</span>rendern:Zurückgenommen,
git diff --exit-codeaufkosten-ansicht.tsx= 0, danach 33/33 grün.Ein Beinahe-Fehler, der hierher gehört
Der erste Mutationsversuch lief über
perl -0pi -eund scheiterte still am Quoting. Die Trefferzählung meldete0, der Testlauf war grün — und hätte ohne diese Zählung als „Gegenmutation gefahren" durchgehen können. Der zweite Versuch prüft die Eindeutigkeit des Ankers und bricht ab, wenn sie fehlt.🤖 Generated with Claude Code
Summary by Sourcery
Prove that missing or ambiguous hourly rates cannot be rendered as a seemingly successful €0.00 cost result in the web interface.
Enhancements:
0,00value is present in the delivered markup.Tests:
RATE_MISSINGandRATE_AMBIGUOUSsnapshot-generation failures.