diff options
| author | Paul Buetow <paul@buetow.org> | 2025-07-20 23:10:50 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-07-20 23:10:50 +0300 |
| commit | 9c12e879c5d6833ce50f5b6d646ccce03a78db31 (patch) | |
| tree | 206906b551d595b35d00586b6cc5bf9e1f3fe7f8 /internal/cli/flags_test.go | |
| parent | e580fb57a29ec3c3f3e180b20cfa6ec28687689b (diff) | |
test: add comprehensive test coverage for refactored packages
Add test suites for all newly created packages from the main.go refactoring:
- batch: 100% coverage - file reading, parsing, edge cases
- cli: 96.7% coverage - command setup, flags, configuration
- translation: 92% coverage - API integration, caching, errors
- phonetic: 87.5% coverage - API fetching, file operations
- models: 77.3% coverage - model listing functionality
- processor: 18% coverage - basic tests (limited by API dependencies)
Total: 1159 lines of test code across 7 new test files
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
Diffstat (limited to 'internal/cli/flags_test.go')
| -rw-r--r-- | internal/cli/flags_test.go | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/internal/cli/flags_test.go b/internal/cli/flags_test.go new file mode 100644 index 0000000..d308bb7 --- /dev/null +++ b/internal/cli/flags_test.go @@ -0,0 +1,99 @@ +package cli + +import ( + "reflect" + "testing" +) + +func TestNewFlags(t *testing.T) { + flags := NewFlags() + + // Test default values + tests := []struct { + name string + got interface{} + expected interface{} + }{ + {"AudioFormat", flags.AudioFormat, "mp3"}, + {"ImageAPI", flags.ImageAPI, "openai"}, + {"DeckName", flags.DeckName, "Bulgarian Vocabulary"}, + {"OpenAIModel", flags.OpenAIModel, "gpt-4o-mini-tts"}, + {"OpenAISpeed", flags.OpenAISpeed, 0.9}, + {"OpenAIImageModel", flags.OpenAIImageModel, "dall-e-3"}, + {"OpenAIImageSize", flags.OpenAIImageSize, "1024x1024"}, + {"OpenAIImageQuality", flags.OpenAIImageQuality, "standard"}, + {"OpenAIImageStyle", flags.OpenAIImageStyle, "natural"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if !reflect.DeepEqual(tt.got, tt.expected) { + t.Errorf("%s = %v, want %v", tt.name, tt.got, tt.expected) + } + }) + } + + // Test boolean defaults (should be false) + boolTests := []struct { + name string + value bool + }{ + {"SkipAudio", flags.SkipAudio}, + {"SkipImages", flags.SkipImages}, + {"GenerateAnki", flags.GenerateAnki}, + {"AnkiCSV", flags.AnkiCSV}, + {"ListModels", flags.ListModels}, + {"AllVoices", flags.AllVoices}, + {"GUIMode", flags.GUIMode}, + } + + for _, tt := range boolTests { + t.Run(tt.name, func(t *testing.T) { + if tt.value != false { + t.Errorf("%s = %v, want false", tt.name, tt.value) + } + }) + } + + // Test string defaults (should be empty) + stringTests := []struct { + name string + value string + }{ + {"CfgFile", flags.CfgFile}, + {"OutputDir", flags.OutputDir}, + {"BatchFile", flags.BatchFile}, + {"OpenAIVoice", flags.OpenAIVoice}, + {"OpenAIInstruction", flags.OpenAIInstruction}, + } + + for _, tt := range stringTests { + t.Run(tt.name, func(t *testing.T) { + if tt.value != "" { + t.Errorf("%s = %v, want empty string", tt.name, tt.value) + } + }) + } +} + +func TestFlagsStructure(t *testing.T) { + // Test that Flags struct has all expected fields + flags := &Flags{} + flagsType := reflect.TypeOf(*flags) + + expectedFields := []string{ + "CfgFile", "OutputDir", "AudioFormat", "ImageAPI", "BatchFile", + "SkipAudio", "SkipImages", "GenerateAnki", "AnkiCSV", "DeckName", + "ListModels", "AllVoices", "GUIMode", + "OpenAIModel", "OpenAIVoice", "OpenAISpeed", "OpenAIInstruction", + "OpenAIImageModel", "OpenAIImageSize", "OpenAIImageQuality", "OpenAIImageStyle", + } + + for _, fieldName := range expectedFields { + t.Run("has_field_"+fieldName, func(t *testing.T) { + if _, ok := flagsType.FieldByName(fieldName); !ok { + t.Errorf("Flags struct missing field: %s", fieldName) + } + }) + } +} |
