package sql_test import ( "context" "testing" "tercul/internal/data/sql" "tercul/internal/domain" "tercul/internal/platform/config" "tercul/internal/testutil" "github.com/stretchr/testify/suite" ) type BookRepositoryTestSuite struct { testutil.IntegrationTestSuite BookRepo domain.BookRepository } func (s *BookRepositoryTestSuite) SetupSuite() { s.IntegrationTestSuite.SetupSuite(testutil.DefaultTestConfig()) cfg, err := config.LoadConfig() s.Require().NoError(err) s.BookRepo = sql.NewBookRepository(s.DB, cfg) } func (s *BookRepositoryTestSuite) SetupTest() { s.DB.Exec("DELETE FROM books") } func (s *BookRepositoryTestSuite) createBook(title, isbn string) *domain.Book { book := &domain.Book{ Title: title, ISBN: isbn, TranslatableModel: domain.TranslatableModel{ Language: "en", }, } err := s.BookRepo.Create(context.Background(), book) s.Require().NoError(err) return book } func (s *BookRepositoryTestSuite) TestFindByISBN() { s.Run("should return a book by ISBN", func() { // Arrange s.createBook("Test Book", "1234567890") // Act foundBook, err := s.BookRepo.FindByISBN(context.Background(), "1234567890") // Assert s.Require().NoError(err) s.Require().NotNil(foundBook) s.Equal("Test Book", foundBook.Title) }) s.Run("should return error if ISBN not found", func() { // Arrange s.createBook("Another Book", "1111111111") // Act _, err := s.BookRepo.FindByISBN(context.Background(), "9999999999") // Assert s.Require().Error(err) }) } func TestBookRepository(t *testing.T) { suite.Run(t, new(BookRepositoryTestSuite)) }