summaryrefslogtreecommitdiff
path: root/internal/cli/flags_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-07-20 23:10:50 +0300
committerPaul Buetow <paul@buetow.org>2025-07-20 23:10:50 +0300
commit9c12e879c5d6833ce50f5b6d646ccce03a78db31 (patch)
tree206906b551d595b35d00586b6cc5bf9e1f3fe7f8 /internal/cli/flags_test.go
parente580fb57a29ec3c3f3e180b20cfa6ec28687689b (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.go99
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)
+ }
+ })
+ }
+}