98 lines
3.1 KiB
C#
98 lines
3.1 KiB
C#
using DramaLing.Api.Repositories;
|
|
using DramaLing.Api.Tests.TestData;
|
|
|
|
namespace DramaLing.Api.Tests.Unit.Repositories;
|
|
|
|
/// <summary>
|
|
/// FlashcardRepository 單元測試
|
|
/// </summary>
|
|
public class FlashcardRepositoryTests : TestBase
|
|
{
|
|
private readonly IFlashcardRepository _repository;
|
|
|
|
public FlashcardRepositoryTests()
|
|
{
|
|
_repository = new FlashcardRepository(DbContext,
|
|
ServiceProvider.GetRequiredService<ILogger<BaseRepository<Flashcard>>>());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetByUserIdAsync_ShouldReturnUserFlashcards()
|
|
{
|
|
// Arrange
|
|
var user = TestDataFactory.CreateUser();
|
|
var flashcards = TestDataFactory.CreateFlashcards(user.Id, 3);
|
|
|
|
DbContext.Users.Add(user);
|
|
DbContext.Flashcards.AddRange(flashcards);
|
|
await DbContext.SaveChangesAsync();
|
|
|
|
// Act
|
|
var result = await _repository.GetByUserIdAsync(user.Id);
|
|
|
|
// Assert
|
|
Assert.NotNull(result);
|
|
Assert.Equal(3, result.Count());
|
|
Assert.All(result, fc => Assert.Equal(user.Id, fc.UserId));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetByUserIdAndFlashcardIdAsync_ShouldReturnSpecificFlashcard()
|
|
{
|
|
// Arrange
|
|
var user = TestDataFactory.CreateUser();
|
|
var flashcard = TestDataFactory.CreateFlashcard(user.Id);
|
|
|
|
DbContext.Users.Add(user);
|
|
DbContext.Flashcards.Add(flashcard);
|
|
await DbContext.SaveChangesAsync();
|
|
|
|
// Act
|
|
var result = await _repository.GetByUserIdAndFlashcardIdAsync(user.Id, flashcard.Id);
|
|
|
|
// Assert
|
|
Assert.NotNull(result);
|
|
Assert.Equal(flashcard.Id, result.Id);
|
|
Assert.Equal(user.Id, result.UserId);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetByUserIdAsync_WithSearch_ShouldReturnFilteredResults()
|
|
{
|
|
// Arrange
|
|
var user = TestDataFactory.CreateUser();
|
|
var flashcard1 = TestDataFactory.CreateFlashcard(user.Id, "Apple", "蘋果");
|
|
var flashcard2 = TestDataFactory.CreateFlashcard(user.Id, "Banana", "香蕉");
|
|
var flashcard3 = TestDataFactory.CreateFlashcard(user.Id, "Orange", "柳橙");
|
|
|
|
DbContext.Users.Add(user);
|
|
DbContext.Flashcards.AddRange(flashcard1, flashcard2, flashcard3);
|
|
await DbContext.SaveChangesAsync();
|
|
|
|
// Act
|
|
var result = await _repository.GetByUserIdAsync(user.Id, search: "Apple");
|
|
|
|
// Assert
|
|
Assert.NotNull(result);
|
|
Assert.Single(result);
|
|
Assert.Contains("Apple", result.First().FrontText);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetCountByUserIdAsync_ShouldReturnCorrectCount()
|
|
{
|
|
// Arrange
|
|
var user = TestDataFactory.CreateUser();
|
|
var flashcards = TestDataFactory.CreateFlashcards(user.Id, 5);
|
|
|
|
DbContext.Users.Add(user);
|
|
DbContext.Flashcards.AddRange(flashcards);
|
|
await DbContext.SaveChangesAsync();
|
|
|
|
// Act
|
|
var count = await _repository.GetCountByUserIdAsync(user.Id);
|
|
|
|
// Assert
|
|
Assert.Equal(5, count);
|
|
}
|
|
} |