using System.Net;
using System.Net.Http.Headers;
using System.Text;
namespace GerbilManager.Tests;
///
/// POST /import/ingest-resolved/upload — Upload-Variante des Ingests: eine hochgeladene
/// resolved_import.json wird serverseitig in den Import-Quellordner gestaged und direkt ingested.
/// Damit lässt sich der Import gegen PROD fahren, ohne die Datei per SSH/docker cp in den Container
/// zu kopieren. Der Test isoliert Quell-/Fotoordner über ApiFactory in Temp-Verzeichnisse.
///
public class ImportIngestUploadEndpointTests
{
[Fact]
public async Task Upload_stages_resolved_json_and_runs_ingest()
{
var srcDir = Path.Combine(Path.GetTempPath(), "ingest-upload-" + Guid.NewGuid().ToString("N"));
var photoDir = Path.Combine(Path.GetTempPath(), "ingest-upload-photos-" + Guid.NewGuid().ToString("N"));
using var factory = new ApiFactory { ImportSourcePath = srcDir, PhotosRootPath = photoDir };
var client = factory.CreateClient();
// Minimaler, aber valider Payload (leere Sammlungen) — genügt, um Staging + Ingest-Lauf zu prüfen.
const string json = "{\"Gerbils\":[],\"Litters\":[],\"Contacts\":[],\"SaleContracts\":[],\"GerbilPhotos\":[]}";
using var form = new MultipartFormDataContent();
var file = new ByteArrayContent(Encoding.UTF8.GetBytes(json));
file.Headers.ContentType = new MediaTypeHeaderValue("application/json");
form.Add(file, "resolved", "resolved_import.json");
var resp = await client.PostAsync("/import/ingest-resolved/upload", form);
Assert.Equal(HttpStatusCode.OK, resp.StatusCode);
var body = await resp.Content.ReadAsStringAsync();
Assert.DoesNotContain("Error:", body); // Ingest lief, keine "file not found"-Fehlermeldung
// Die hochgeladene Datei wurde an den erwarteten Ort gestaged.
Assert.True(File.Exists(Path.Combine(srcDir, "resolved_import.json")));
try { Directory.Delete(srcDir, recursive: true); } catch { /* best effort */ }
try { Directory.Delete(photoDir, recursive: true); } catch { /* best effort */ }
}
[Fact]
public async Task Upload_rejects_empty_file_with_400()
{
var srcDir = Path.Combine(Path.GetTempPath(), "ingest-upload-" + Guid.NewGuid().ToString("N"));
using var factory = new ApiFactory { ImportSourcePath = srcDir };
var client = factory.CreateClient();
using var form = new MultipartFormDataContent();
var file = new ByteArrayContent(Array.Empty());
file.Headers.ContentType = new MediaTypeHeaderValue("application/json");
form.Add(file, "resolved", "resolved_import.json");
var resp = await client.PostAsync("/import/ingest-resolved/upload", form);
Assert.Equal(HttpStatusCode.BadRequest, resp.StatusCode);
try { Directory.Delete(srcDir, recursive: true); } catch { /* best effort */ }
}
}