using DramaLing.Api.Repositories; using DramaLing.Api.Tests.TestData; namespace DramaLing.Api.Tests.Unit.Repositories; /// /// FlashcardRepository 單元測試 /// public class FlashcardRepositoryTests : TestBase { private readonly IFlashcardRepository _repository; public FlashcardRepositoryTests() { _repository = new FlashcardRepository(DbContext, ServiceProvider.GetRequiredService>>()); } [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); } }