fix(worker): Base-URL ohne Schema laesst die Ticket-Anbindung scheitern
Ein blanker Hostname ist eine relative URI; HttpClient lehnt sie mit InvalidOperationException ab. Die lief an dem zu engen catch-Filter vorbei, flog roh aus dem Hub und wurde von TryInvokeAsync zu null verschluckt - die UI meldete "Worker not reachable", obwohl der Worker lief und die Ursache eine Eingabe war. - TicketSystemConfig ergaenzt fehlendes http:// - BandelTicketClient uebersetzt jede Transport-Exception in eine lesbare TicketApiException - TestTicketConnection faengt alles und antwortet mit dem Grund - GetTicketSettings liefert die effektive URL, damit die Ergaenzung sichtbar ist
This commit is contained in:
@@ -9,6 +9,33 @@ public sealed class BandelTicketClientTests
|
||||
private static BandelTicketClient Make(StubHandler handler)
|
||||
=> new(new HttpClient(handler), "http://api.local", "tsp_x", NullLogger<BandelTicketClient>.Instance);
|
||||
|
||||
// Der Client verspricht der UI eine lesbare Meldung. Vorher wurden nur HttpRequestException
|
||||
// und TaskCanceledException übersetzt — eine InvalidOperationException (die HttpClient bei
|
||||
// einer relativen URI wirft) flog roh durch den Hub und kam als "Worker not reachable" an.
|
||||
[Theory]
|
||||
[ClassData(typeof(UnexpectedTransportFailures))]
|
||||
public async Task Any_transport_failure_becomes_a_readable_TicketApiException(Exception failure)
|
||||
{
|
||||
var client = Make(new StubHandler(failure));
|
||||
|
||||
var ex = await Assert.ThrowsAsync<TicketApiException>(
|
||||
() => client.GetIdentityAsync(CancellationToken.None));
|
||||
|
||||
Assert.Contains("http://api.local", ex.Message);
|
||||
Assert.DoesNotContain("Exception", ex.Message);
|
||||
}
|
||||
|
||||
public sealed class UnexpectedTransportFailures : TheoryData<Exception>
|
||||
{
|
||||
public UnexpectedTransportFailures()
|
||||
{
|
||||
Add(new InvalidOperationException("An invalid request URI was provided."));
|
||||
Add(new HttpRequestException("no such host"));
|
||||
Add(new NotSupportedException("scheme not supported"));
|
||||
Add(new UriFormatException("bad uri"));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetIdentity_returns_user_name()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user