package linguistics_test import ( "context" "testing" "tercul/internal/domain" "tercul/internal/jobs/linguistics" "tercul/internal/testutil" "github.com/stretchr/testify/suite" ) type AnalysisRepositoryTestSuite struct { testutil.IntegrationTestSuite repo linguistics.AnalysisRepository } func (s *AnalysisRepositoryTestSuite) SetupSuite() { s.IntegrationTestSuite.SetupSuite(testutil.DefaultTestConfig()) s.repo = linguistics.NewGORMAnalysisRepository(s.DB) } func (s *AnalysisRepositoryTestSuite) SetupTest() { s.IntegrationTestSuite.SetupTest() } func (s *AnalysisRepositoryTestSuite) TestGetAnalysisData() { s.Run("should return the correct analysis data", func() { // Arrange work := s.CreateTestWork(s.AdminCtx, "Test Work", "en", "Test content") textMetadata := &domain.TextMetadata{WorkID: work.ID, WordCount: 123} readabilityScore := &domain.ReadabilityScore{WorkID: work.ID, Score: 45.6} languageAnalysis := &domain.LanguageAnalysis{ WorkID: work.ID, Analysis: domain.JSONB{ "sentiment": 0.5678, }, } s.DB.Create(textMetadata) s.DB.Create(readabilityScore) s.DB.Create(languageAnalysis) // Act returnedMetadata, returnedScore, returnedAnalysis, err := s.repo.GetAnalysisData(context.Background(), work.ID) // Assert s.Require().NoError(err) s.Require().NotNil(returnedMetadata) s.Require().NotNil(returnedScore) s.Require().NotNil(returnedAnalysis) s.Equal(textMetadata.WordCount, returnedMetadata.WordCount) s.Equal(readabilityScore.Score, returnedScore.Score) sentiment, ok := returnedAnalysis.Analysis["sentiment"].(float64) s.Require().True(ok) s.Equal(0.5678, sentiment) }) } func TestAnalysisRepository(t *testing.T) { suite.Run(t, new(AnalysisRepositoryTestSuite)) }