tercul-backend/internal/app/search/service_test.go
google-labs-jules[bot] 06e6e2be85 refactor(domain): Isolate Work aggregate
This commit isolates the `Work` aggregate into its own package at `internal/domain/work`, following the first step of the refactoring plan in `refactor.md`.

- The `Work` struct, related types, and the `WorkRepository` interface have been moved to the new package.
- A circular dependency between `domain` and `work` was resolved by moving the `AnalyticsRepository` to the `app` layer.
- All references to the moved types have been updated across the entire codebase to fix compilation errors.
- Test files, including mocks and integration tests, have been updated to reflect the new structure.
2025-10-03 16:15:09 +00:00

69 lines
1.9 KiB
Go

package search
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"tercul/internal/app/localization"
"tercul/internal/domain"
"tercul/internal/domain/work"
)
type mockLocalizationRepository struct {
mock.Mock
}
func (m *mockLocalizationRepository) GetTranslation(ctx context.Context, key string, language string) (string, error) {
args := m.Called(ctx, key, language)
return args.String(0), args.Error(1)
}
func (m *mockLocalizationRepository) GetTranslations(ctx context.Context, keys []string, language string) (map[string]string, error) {
args := m.Called(ctx, keys, language)
if args.Get(0) == nil {
return nil, args.Error(1)
}
return args.Get(0).(map[string]string), args.Error(1)
}
func (m *mockLocalizationRepository) GetAuthorBiography(ctx context.Context, authorID uint, language string) (string, error) {
args := m.Called(ctx, authorID, language)
return args.String(0), args.Error(1)
}
type mockWeaviateWrapper struct {
mock.Mock
}
func (m *mockWeaviateWrapper) IndexWork(ctx context.Context, work *work.Work, content string) error {
args := m.Called(ctx, work, content)
return args.Error(0)
}
func TestIndexService_IndexWork(t *testing.T) {
localizationRepo := new(mockLocalizationRepository)
localizationService := localization.NewService(localizationRepo)
weaviateWrapper := new(mockWeaviateWrapper)
service := NewIndexService(localizationService, weaviateWrapper)
ctx := context.Background()
work := work.Work{
TranslatableModel: domain.TranslatableModel{
BaseModel: domain.BaseModel{ID: 1},
Language: "en",
},
Title: "Test Work",
}
// localizationRepo.On("GetTranslation", ctx, "work:1:content", "en").Return("Test content", nil)
weaviateWrapper.On("IndexWork", ctx, &work, "").Return(nil)
err := service.IndexWork(ctx, work)
assert.NoError(t, err)
// localizationRepo.AssertExpectations(t)
weaviateWrapper.AssertExpectations(t)
}