129 lines
4.1 KiB
C#
129 lines
4.1 KiB
C#
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);
|
||
}
|
||
} |