using System.Net; using AIStudio.Provider; namespace AIStudio.Tests.Provider; /// /// Checks which answers of a transcription provider refuse the media file itself. /// /// /// A data source records such a file for good, until it changes. An answer counted here by /// mistake keeps a file out of the index; one missed here uploads the file again with every run. /// [TestFixture] public sealed class MediaFileRejectionTests { private const string OPENAI_DAMAGED_FILE = """ { "error": { "message": "Audio file might be corrupted or unsupported", "type": "invalid_request_error", "param": "file", "code": "invalid_value" } } """; private const string OPENAI_UNKNOWN_MODEL = """ { "error": { "message": "Invalid model.", "type": "invalid_request_error", "param": "model", "code": "invalid_value" } } """; private const string UNDECODABLE_FORMAT = """ { "error": { "message": "Could not decode the audio file.", "param": "file" } } """; [Test] public void AFileTheProviderCannotReadIsRefused() { Assert.That(BaseProvider.IsMediaFileRejection(HttpStatusCode.BadRequest, OPENAI_DAMAGED_FILE), Is.True); } [TestCase(HttpStatusCode.RequestEntityTooLarge)] [TestCase(HttpStatusCode.UnsupportedMediaType)] public void AFileTooLargeOrOfAnUnacceptedTypeIsRefused(HttpStatusCode statusCode) { Assert.That(BaseProvider.IsMediaFileRejection(statusCode, string.Empty), Is.True); } [Test] public void AProviderWhichDecodesNoWebMRefusesNoSingleFile() { Assert.That(BaseProvider.IsMediaFileRejection(HttpStatusCode.BadRequest, UNDECODABLE_FORMAT), Is.False, "Every file fails the same way, and only another provider helps."); } [TestCase(HttpStatusCode.BadRequest, OPENAI_UNKNOWN_MODEL)] [TestCase(HttpStatusCode.BadRequest, "Bad request")] [TestCase(HttpStatusCode.BadRequest, "")] [TestCase(HttpStatusCode.TooManyRequests, OPENAI_DAMAGED_FILE)] [TestCase(HttpStatusCode.Unauthorized, "")] [TestCase(HttpStatusCode.InternalServerError, "")] [TestCase(HttpStatusCode.ServiceUnavailable, "")] public void AFailureWhichMayPassRefusesNoFile(HttpStatusCode statusCode, string responseBody) { Assert.That(BaseProvider.IsMediaFileRejection(statusCode, responseBody), Is.False); } }