mirror of
https://github.com/SamyRai/tercul-backend.git
synced 2025-12-27 04:01:34 +00:00
Some checks failed
- Updated database models and repositories to replace uint IDs with UUIDs. - Modified test fixtures to generate and use UUIDs for authors, translations, users, and works. - Adjusted mock implementations to align with the new UUID structure. - Ensured all relevant functions and methods are updated to handle UUIDs correctly. - Added necessary imports for UUID handling in various files.
132 lines
3.0 KiB
Go
132 lines
3.0 KiB
Go
package commands
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"tercul/internal/domain"
|
|
)
|
|
|
|
func TestMigrateTranslations_EmptyData(t *testing.T) {
|
|
index := initBleveIndexForTest(t)
|
|
defer func() { _ = index.Close() }()
|
|
|
|
repo := &mockTranslationRepository{translations: []domain.Translation{}}
|
|
logger := getTestLogger()
|
|
|
|
stats, err := migrateTranslations(
|
|
context.Background(),
|
|
repo,
|
|
index,
|
|
10,
|
|
nil,
|
|
logger,
|
|
)
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, stats)
|
|
assert.Equal(t, 0, stats.TotalIndexed)
|
|
assert.Equal(t, 0, stats.TotalErrors)
|
|
}
|
|
|
|
func TestMigrateTranslations_LargeBatch(t *testing.T) {
|
|
index := initBleveIndexForTest(t)
|
|
defer func() { _ = index.Close() }()
|
|
|
|
// Create 100 translations
|
|
translations := make([]domain.Translation, 100)
|
|
for i := 0; i < 100; i++ {
|
|
translations[i] = domain.Translation{
|
|
BaseModel: domain.BaseModel{ID: uint(i + 1)},
|
|
Title: "Test Translation",
|
|
Content: "Content",
|
|
Language: "en",
|
|
Status: domain.TranslationStatusPublished,
|
|
TranslatableID: uint(i + 1),
|
|
TranslatableType: "works",
|
|
}
|
|
}
|
|
|
|
repo := &mockTranslationRepository{translations: translations}
|
|
logger := getTestLogger()
|
|
|
|
stats, err := migrateTranslations(
|
|
context.Background(),
|
|
repo,
|
|
index,
|
|
50, // Batch size smaller than total
|
|
nil,
|
|
logger,
|
|
)
|
|
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, stats)
|
|
assert.Equal(t, 100, stats.TotalIndexed)
|
|
assert.Equal(t, 0, stats.TotalErrors)
|
|
}
|
|
|
|
func TestMigrateTranslations_RepositoryError(t *testing.T) {
|
|
index := initBleveIndexForTest(t)
|
|
defer func() { _ = index.Close() }()
|
|
|
|
repo := &mockTranslationRepository{
|
|
translations: []domain.Translation{},
|
|
err: assert.AnError,
|
|
}
|
|
logger := getTestLogger()
|
|
|
|
stats, err := migrateTranslations(
|
|
context.Background(),
|
|
repo,
|
|
index,
|
|
10,
|
|
nil,
|
|
logger,
|
|
)
|
|
|
|
assert.Error(t, err)
|
|
assert.Nil(t, stats)
|
|
}
|
|
|
|
func TestIndexBatch_EmptyBatch(t *testing.T) {
|
|
index := initBleveIndexForTest(t)
|
|
defer func() { _ = index.Close() }()
|
|
|
|
err := indexBatch(index, []domain.Translation{})
|
|
assert.NoError(t, err) // Empty batch should not error
|
|
}
|
|
|
|
func TestIndexBatch_WithTranslatorID(t *testing.T) {
|
|
index := initBleveIndexForTest(t)
|
|
defer func() { _ = index.Close() }()
|
|
|
|
translatorID := uint(123)
|
|
translations := []domain.Translation{
|
|
{
|
|
BaseModel: domain.BaseModel{ID: 1},
|
|
Title: "Test",
|
|
Content: "Content",
|
|
Language: "en",
|
|
Status: domain.TranslationStatusPublished,
|
|
TranslatableID: 100,
|
|
TranslatableType: "works",
|
|
TranslatorID: &translatorID,
|
|
},
|
|
}
|
|
|
|
err := indexBatch(index, translations)
|
|
assert.NoError(t, err)
|
|
|
|
// Verify document is indexed
|
|
doc, err := index.Document("translation_1")
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, doc)
|
|
}
|
|
|
|
func TestCheckpoint_InvalidJSON(t *testing.T) {
|
|
// Test loading invalid checkpoint file
|
|
// This would require mocking file system, but for now we test the happy path
|
|
// Invalid JSON handling is tested implicitly through file operations
|
|
}
|