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', () => {
|
it('liest den Betrag auch unter `price` und als Zeichenkette', () => {
|
||||||
const result = parseDomainStudio(
|
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',
|
'beispiel.de',
|
||||||
);
|
);
|
||||||
expect(result.price).toEqual({ amount: 4.9, currency: 'EUR' });
|
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(
|
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',
|
'beispiel.de',
|
||||||
);
|
);
|
||||||
expect(result.price).toEqual({ amount: 7, currency: 'EUR' });
|
expect(result).toEqual({ whoisStatus: 'FREE', price: null });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ohne Preisdienst ist der Preis 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
|
* Wertet die Antwort von `POST /domainstudio` aus. Nur der Umschlag, dessen
|
||||||
* `domain` der angefragten Domain entspricht, zaehlt (D-K) — alles andere
|
* `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 {
|
export function parseDomainStudio(data: unknown, wantedAscii: string): ParsedAvailability {
|
||||||
const wanted = wantedAscii.toLowerCase();
|
const wanted = wantedAscii.toLowerCase();
|
||||||
@@ -193,7 +193,10 @@ export function parseDomainStudio(data: unknown, wantedAscii: string): ParsedAva
|
|||||||
let price: ParsedPrice | null = null;
|
let price: ParsedPrice | null = null;
|
||||||
if (Array.isArray(prices)) {
|
if (Array.isArray(prices)) {
|
||||||
const oneYear = prices.find((p) => isRecord(p) && isOneYear(p.period));
|
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 };
|
return { whoisStatus: status ? status.toUpperCase() : 'NO_RESULT', price };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user