package sql_test import ( "context" "testing" "tercul/internal/domain" "tercul/internal/testutil" "github.com/stretchr/testify/suite" ) type SourceRepositoryTestSuite struct { testutil.IntegrationTestSuite } func (s *SourceRepositoryTestSuite) SetupSuite() { s.IntegrationTestSuite.SetupSuite(testutil.DefaultTestConfig()) } func (s *SourceRepositoryTestSuite) TestCreateSource() { s.Run("should create a new source", func() { // Arrange source := &domain.Source{ Name: "New Test Source", TranslatableModel: domain.TranslatableModel{ Language: "en", }, } // Act err := s.SourceRepo.Create(context.Background(), source) // Assert s.Require().NoError(err) s.NotZero(source.ID) // Verify that the source was actually created in the database var foundSource domain.Source err = s.DB.First(&foundSource, source.ID).Error s.Require().NoError(err) s.Equal("New Test Source", foundSource.Name) s.Equal("en", foundSource.Language) }) } func (s *SourceRepositoryTestSuite) TestGetSourceByID() { s.Run("should return a source by ID", func() { // Arrange source := &domain.Source{Name: "Test Source"} s.Require().NoError(s.SourceRepo.Create(context.Background(), source)) // Act foundSource, err := s.SourceRepo.GetByID(context.Background(), source.ID) // Assert s.Require().NoError(err) s.Require().NotNil(foundSource) s.Equal(source.ID, foundSource.ID) s.Equal("Test Source", foundSource.Name) }) } func (s *SourceRepositoryTestSuite) TestUpdateSource() { s.Run("should update an existing source", func() { // Arrange source := &domain.Source{Name: "Original Name"} s.Require().NoError(s.SourceRepo.Create(context.Background(), source)) source.Name = "Updated Name" // Act err := s.SourceRepo.Update(context.Background(), source) // Assert s.Require().NoError(err) var foundSource domain.Source err = s.DB.First(&foundSource, source.ID).Error s.Require().NoError(err) s.Equal("Updated Name", foundSource.Name) }) } func (s *SourceRepositoryTestSuite) TestDeleteSource() { s.Run("should delete an existing source", func() { // Arrange source := &domain.Source{Name: "To Be Deleted"} s.Require().NoError(s.SourceRepo.Create(context.Background(), source)) // Act err := s.SourceRepo.Delete(context.Background(), source.ID) // Assert s.Require().NoError(err) var foundSource domain.Source err = s.DB.First(&foundSource, source.ID).Error s.Require().Error(err) }) } func TestSourceRepository(t *testing.T) { suite.Run(t, new(SourceRepositoryTestSuite)) }