47 lines
1.8 KiB
C#
47 lines
1.8 KiB
C#
using System.Net;
|
|
using System.Text;
|
|
using LehrerApp.Core.Models;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Api.Tests;
|
|
|
|
public sealed class NominatimGeocoderTests
|
|
{
|
|
[Fact]
|
|
public async Task GeocodeAsync_NutztStrukturierteDeutschlandSucheUndLiestDisplayName()
|
|
{
|
|
Uri? requestedUri = null;
|
|
var handler = new RecordingHandler(request =>
|
|
{
|
|
requestedUri = request.RequestUri;
|
|
return new HttpResponseMessage(HttpStatusCode.OK)
|
|
{
|
|
Content = new StringContent(
|
|
"""[{"lat":"50.105","lon":"8.761","display_name":"Testschule, Offenbach, Deutschland"}]""",
|
|
Encoding.UTF8, "application/json"),
|
|
};
|
|
});
|
|
var http = new HttpClient(handler) { BaseAddress = new Uri("https://nominatim.openstreetmap.org/") };
|
|
var geocoder = new NominatimGeocoder(http);
|
|
|
|
var result = await geocoder.GeocodeAsync(new SchoolLocationRequest
|
|
{
|
|
SchoolName = "Testschule", Street = "Schulweg 1", PostalCode = "63000", City = "Offenbach",
|
|
}, CancellationToken.None);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.Equal(50.105, result!.Latitude);
|
|
Assert.Equal("Testschule, Offenbach, Deutschland", result.DisplayName);
|
|
Assert.Contains("countrycodes=de", requestedUri!.Query);
|
|
Assert.Contains("street=Schulweg%201", requestedUri.Query);
|
|
Assert.Contains("postalcode=63000", requestedUri.Query);
|
|
}
|
|
|
|
private sealed class RecordingHandler(Func<HttpRequestMessage, HttpResponseMessage> response)
|
|
: HttpMessageHandler
|
|
{
|
|
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
|
|
CancellationToken cancellationToken) => Task.FromResult(response(request));
|
|
}
|
|
}
|