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