Send club context and surface TTR preview HTTP errors
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 59s
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 59s
This commit is contained in:
@@ -3369,6 +3369,15 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
|
||||
this.activeSection = 'ttr';
|
||||
await this.loadTtrPreview();
|
||||
},
|
||||
readTtrPreviewResponse(response) {
|
||||
if ((response.status != null && (response.status < 200 || response.status >= 300)) || response.data?.error) {
|
||||
throw new Error(response.data?.error || response.data?.message || `TTR-Abruf fehlgeschlagen (HTTP ${response.status}).`);
|
||||
}
|
||||
if (!Array.isArray(response.data?.players)) {
|
||||
throw new Error('Der Server hat keine gültigen TTR-Spielerdaten zurückgegeben.');
|
||||
}
|
||||
return response.data;
|
||||
},
|
||||
async loadTtrPreview() {
|
||||
if (!this.canOpenTtrPreview || !this.meetingDetails) return;
|
||||
this.ttrLoading = true;
|
||||
@@ -3385,8 +3394,9 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
|
||||
homeClubName: this.meetingData?.homeClub,
|
||||
guestClubName: this.meetingData?.guestClub,
|
||||
});
|
||||
this.ttrDiagnostics = response.data?.diagnostics || [];
|
||||
this.applyTtrPreviewPlayers(Array.isArray(response.data?.players) ? response.data.players : []);
|
||||
const payload = this.readTtrPreviewResponse(response);
|
||||
this.ttrDiagnostics = payload.diagnostics || [];
|
||||
this.applyTtrPreviewPlayers(payload.players);
|
||||
return;
|
||||
}
|
||||
if (!this.match?.id) {
|
||||
@@ -3394,6 +3404,7 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
|
||||
return;
|
||||
}
|
||||
const response = await apiClient.post(`/matches/${this.match.id}/ttr-preview`, {
|
||||
clubId: this.match.clubId ?? this.$store?.getters?.currentClub,
|
||||
homePlayers: this.ttrLineupPlayers('home'),
|
||||
guestPlayers: this.ttrLineupPlayers('guest'),
|
||||
homeTeamName: this.meetingData?.homeTeamname,
|
||||
@@ -3401,10 +3412,11 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
|
||||
homeClubName: this.meetingData?.homeClub,
|
||||
guestClubName: this.meetingData?.guestClub,
|
||||
});
|
||||
this.ttrDiagnostics = response.data?.diagnostics || [];
|
||||
this.applyTtrPreviewPlayers(Array.isArray(response.data?.players) ? response.data.players : []);
|
||||
const payload = this.readTtrPreviewResponse(response);
|
||||
this.ttrDiagnostics = payload.diagnostics || [];
|
||||
this.applyTtrPreviewPlayers(payload.players);
|
||||
} catch (error) {
|
||||
this.ttrError = error.response?.data?.error || 'TTR-Werte konnten nicht geladen werden.';
|
||||
this.ttrError = error.response?.data?.error || error.message || 'TTR-Werte konnten nicht geladen werden.';
|
||||
} finally {
|
||||
this.ttrLoading = false;
|
||||
}
|
||||
|
||||
@@ -102,13 +102,14 @@ test('test mode on a saved report calls the real endpoint and exposes lookup dia
|
||||
standaloneTest: false,
|
||||
isTestMode: true,
|
||||
canOpenTtrPreview: true,
|
||||
match: { id: 42 },
|
||||
match: { id: 42, clubId: 7 },
|
||||
meetingDetails: {},
|
||||
meetingData: { homeClub: 'TSV 1875 Bonames', guestClub: 'Eintracht Frankfurt' },
|
||||
});
|
||||
const originalPost = context.apiClient.post;
|
||||
context.apiClient.post = async (url, body) => {
|
||||
assert.equal(url, '/matches/42/ttr-preview');
|
||||
assert.equal(body.clubId, 7);
|
||||
assert.equal(body.homeClubName, 'TSV 1875 Bonames');
|
||||
assert.equal(body.homePlayers[0].name, 'Anton Schottdorf');
|
||||
return { data: { players: [], diagnostics: [{ side: 'home', message: 'Session abgelaufen' }] } };
|
||||
@@ -121,3 +122,25 @@ test('test mode on a saved report calls the real endpoint and exposes lookup dia
|
||||
context.apiClient.post = originalPost;
|
||||
}
|
||||
});
|
||||
|
||||
test('HTTP errors accepted by the shared API client are shown instead of becoming empty results', async () => {
|
||||
const report = dialog();
|
||||
Object.assign(report, {
|
||||
standaloneTest: false, canOpenTtrPreview: true,
|
||||
match: { id: 42, clubId: 7 }, meetingDetails: {}, meetingData: {},
|
||||
});
|
||||
const originalPost = context.apiClient.post;
|
||||
try {
|
||||
for (const status of [400, 401, 403, 404, 500]) {
|
||||
context.apiClient.post = async () => ({ status, data: { error: `Fehler ${status}` } });
|
||||
await report.loadTtrPreview();
|
||||
assert.equal(report.ttrError, `Fehler ${status}`);
|
||||
assert.equal(report.ttrLoading, false);
|
||||
}
|
||||
context.apiClient.post = async () => ({ status: 200, data: '<html>Keine API-Antwort</html>' });
|
||||
await report.loadTtrPreview();
|
||||
assert.match(report.ttrError, /keine gültigen TTR-Spielerdaten/);
|
||||
} finally {
|
||||
context.apiClient.post = originalPost;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user