fix(domains): Preis nur anzeigen, wenn er nachweislich fuer ein Jahr gilt (WR-05)
Der Rueckgriff auf den ersten Preiseintrag entfaellt; ohne Ein-Jahres-Eintrag erscheint "Preis unbekannt" statt eines Preises fuer einen anderen Zeitraum. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -162,18 +162,28 @@ describe('parseDomainStudio', () => {
|
||||
|
||||
it('liest den Betrag auch unter `price` und als Zeichenkette', () => {
|
||||
const result = parseDomainStudio(
|
||||
[studio('beispiel.de', 'FREE', [{ price: { amount: '4,90', currency: 'EUR' } }])],
|
||||
[
|
||||
studio('beispiel.de', 'FREE', [
|
||||
{ price: { amount: '4,90', currency: 'EUR' }, period: { unit: 'MONTH', period: 12 } },
|
||||
]),
|
||||
],
|
||||
'beispiel.de',
|
||||
);
|
||||
expect(result.price).toEqual({ amount: 4.9, currency: 'EUR' });
|
||||
});
|
||||
|
||||
it('nimmt den ersten Preis, wenn kein Ein-Jahres-Eintrag da ist', () => {
|
||||
it('zeigt keinen Preis, wenn kein Eintrag nachweislich fuer ein Jahr gilt', () => {
|
||||
// Weder ein Eintrag ohne Zeitraum noch ein mehrjaehriger darf als Jahrespreis erscheinen.
|
||||
const result = parseDomainStudio(
|
||||
[studio('beispiel.de', 'FREE', [{ amount: 7, currency: 'EUR' }])],
|
||||
[
|
||||
studio('beispiel.de', 'FREE', [
|
||||
{ amount: 7, currency: 'EUR' },
|
||||
{ amount: 13, currency: 'EUR', period: { unit: 'YEAR', period: 2 } },
|
||||
]),
|
||||
],
|
||||
'beispiel.de',
|
||||
);
|
||||
expect(result.price).toEqual({ amount: 7, currency: 'EUR' });
|
||||
expect(result).toEqual({ whoisStatus: 'FREE', price: null });
|
||||
});
|
||||
|
||||
it('ohne Preisdienst ist der Preis null', () => {
|
||||
|
||||
@@ -176,7 +176,7 @@ function parsePriceEntry(entry: unknown): ParsedPrice | null {
|
||||
/**
|
||||
* Wertet die Antwort von `POST /domainstudio` aus. Nur der Umschlag, dessen
|
||||
* `domain` der angefragten Domain entspricht, zaehlt (D-K) — alles andere
|
||||
* ist `NO_RESULT`. Als Preis gilt der Ein-Jahres-Eintrag, sonst der erste.
|
||||
* ist `NO_RESULT`. Als Preis gilt nur der Ein-Jahres-Eintrag, sonst keiner.
|
||||
*/
|
||||
export function parseDomainStudio(data: unknown, wantedAscii: string): ParsedAvailability {
|
||||
const wanted = wantedAscii.toLowerCase();
|
||||
@@ -193,7 +193,10 @@ export function parseDomainStudio(data: unknown, wantedAscii: string): ParsedAva
|
||||
let price: ParsedPrice | null = null;
|
||||
if (Array.isArray(prices)) {
|
||||
const oneYear = prices.find((p) => isRecord(p) && isOneYear(p.period));
|
||||
price = parsePriceEntry(oneYear) ?? parsePriceEntry(prices[0]);
|
||||
// Nur ein belegter Ein-Jahres-Preis; ein anderer Zeitraum (mehrjaehrig,
|
||||
// Uebertragung) wuerde in der verbindlichen Bestaetigung als Jahrespreis
|
||||
// erscheinen. Ohne Ein-Jahres-Eintrag: kein Preis ("Preis unbekannt").
|
||||
price = parsePriceEntry(oneYear);
|
||||
}
|
||||
return { whoisStatus: status ? status.toUpperCase() : 'NO_RESULT', price };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user