using DramaLing.Api.Tests.Integration.Fixtures; using System.Net; using System.Net.Http.Json; namespace DramaLing.Api.Tests.Integration.Controllers; /// /// ImageGenerationController 整合測試 /// 測試圖片生成相關的 API 端點功能 /// public class ImageGenerationControllerTests : IntegrationTestBase { public ImageGenerationControllerTests(DramaLingWebApplicationFactory factory) : base(factory) { } [Fact] public async Task GenerateImage_WithValidFlashcard_ShouldReturnRequestId() { // Arrange var client = CreateTestUser1Client(); var flashcardId = TestDataSeeder.TestFlashcard1Id; var generationData = new { style = "realistic", description = "A person saying hello in a friendly manner" }; // Act var response = await client.PostAsJsonAsync($"/api/image-generation/flashcards/{flashcardId}/generate", generationData); // Assert response.StatusCode.Should().Be(HttpStatusCode.OK); var content = await response.Content.ReadAsStringAsync(); content.Should().Contain("success"); } [Fact] public async Task GenerateImage_WithOtherUserFlashcard_ShouldReturn404() { // Arrange - TestUser1 嘗試為 TestUser2 的詞卡生成圖片 var client = CreateTestUser1Client(); var otherUserFlashcardId = TestDataSeeder.TestFlashcard3Id; // 屬於 TestUser2 var generationData = new { style = "realistic", description = "Test description" }; // Act var response = await client.PostAsJsonAsync($"/api/image-generation/flashcards/{otherUserFlashcardId}/generate", generationData); // Assert response.StatusCode.Should().Be(HttpStatusCode.NotFound); } [Fact] public async Task GenerateImage_WithoutAuth_ShouldReturn401() { // Arrange var flashcardId = TestDataSeeder.TestFlashcard1Id; var generationData = new { style = "realistic", description = "Test description" }; // Act var response = await HttpClient.PostAsJsonAsync($"/api/image-generation/flashcards/{flashcardId}/generate", generationData); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } [Fact] public async Task GetRequestStatus_WithValidRequest_ShouldReturnStatus() { // Arrange var client = CreateTestUser1Client(); var requestId = Guid.NewGuid(); // 模擬的請求 ID // Act var response = await client.GetAsync($"/api/image-generation/requests/{requestId}/status"); // Assert // 即使請求不存在,API 也應該正常回應而不是崩潰 response.StatusCode.Should().BeOneOf(HttpStatusCode.OK, HttpStatusCode.NotFound); } [Fact] public async Task CancelRequest_WithValidRequest_ShouldCancelSuccessfully() { // Arrange var client = CreateTestUser1Client(); var requestId = Guid.NewGuid(); // Act var response = await client.PostAsync($"/api/image-generation/requests/{requestId}/cancel", null); // Assert response.StatusCode.Should().BeOneOf(HttpStatusCode.OK, HttpStatusCode.NotFound); } [Fact] public async Task GetHistory_WithValidAuth_ShouldReturnHistory() { // Arrange var client = CreateTestUser1Client(); // Act var response = await client.GetAsync("/api/image-generation/history"); // Assert response.StatusCode.Should().Be(HttpStatusCode.OK); var content = await response.Content.ReadAsStringAsync(); content.Should().NotBeNullOrEmpty(); } [Fact] public async Task GetHistory_WithoutAuth_ShouldReturn401() { // Act var response = await HttpClient.GetAsync("/api/image-generation/history"); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } }