dramaling-vocab-learning/backend/DramaLing.Api.Tests/Integration/Controllers/ImageGenerationControllerTe...

129 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DramaLing.Api.Tests.Integration.Fixtures;
using System.Net;
using System.Net.Http.Json;
namespace DramaLing.Api.Tests.Integration.Controllers;
/// <summary>
/// ImageGenerationController 整合測試
/// 測試圖片生成相關的 API 端點功能
/// </summary>
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);
}
}