From 128a981f91954b1c2f09b4da0c6e584b9b652ad4 Mon Sep 17 00:00:00 2001 From: Antoine Aflalo <197810+Belphemur@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:10:50 -0400 Subject: [PATCH] test: add test for convert command --- cmd/convert_cbz_command_test.go | 101 ++++++++++++++++++++++++++++++++ converter/converter.go | 4 +- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 cmd/convert_cbz_command_test.go diff --git a/cmd/convert_cbz_command_test.go b/cmd/convert_cbz_command_test.go new file mode 100644 index 0000000..b0553d4 --- /dev/null +++ b/cmd/convert_cbz_command_test.go @@ -0,0 +1,101 @@ +package cmd + +import ( + "github.com/belphemur/CBZOptimizer/converter" + "github.com/belphemur/CBZOptimizer/converter/constant" + "github.com/belphemur/CBZOptimizer/packer" + "github.com/spf13/cobra" + "log" + "os" + "path/filepath" + "strings" + "testing" + "time" +) + +// MockConverter is a mock implementation of the Converter interface +type MockConverter struct{} + +func (m *MockConverter) Format() constant.ConversionFormat { + return constant.WebP +} + +func (m *MockConverter) ConvertChapter(chapter *packer.Chapter, quality uint8, progress func(string)) (*packer.Chapter, error) { + // Simulate conversion by setting the IsConverted flag + chapter.IsConverted = true + chapter.ConvertedTime = time.Now() + return chapter, nil +} + +func (m *MockConverter) PrepareConverter() error { + return nil +} + +func TestConvertCbzCommand(t *testing.T) { + // Create a temporary directory for testing + tempDir, err := os.MkdirTemp("", "test_cbz") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(tempDir) // Clean up the temp directory when done + + // Locate the testdata directory + testdataDir := filepath.Join("../testdata") + if _, err := os.Stat(testdataDir); os.IsNotExist(err) { + t.Fatalf("testdata directory not found") + } + + // Copy sample CBZ files from testdata to the temporary directory + err = filepath.Walk(testdataDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() && strings.HasSuffix(strings.ToLower(info.Name()), ".cbz") { + destPath := filepath.Join(tempDir, info.Name()) + data, err := os.ReadFile(path) + if err != nil { + return err + } + return os.WriteFile(destPath, data, info.Mode()) + } + return nil + }) + if err != nil { + t.Fatalf("Failed to copy sample files: %v", err) + } + + // Mock the converter.Get function + originalGet := converter.Get + converter.Get = func(format constant.ConversionFormat) (converter.Converter, error) { + return &MockConverter{}, nil + } + defer func() { converter.Get = originalGet }() + + // Set up the command + cmd := &cobra.Command{ + Use: "optimize", + } + cmd.Flags().Uint8P("quality", "q", 85, "Quality for conversion (0-100)") + cmd.Flags().IntP("parallelism", "n", 2, "Number of chapters to convert in parallel") + cmd.Flags().BoolP("override", "o", false, "Override the original CBZ files") + + // Execute the command + err = ConvertCbzCommand(cmd, []string{tempDir}) + if err != nil { + t.Fatalf("Command execution failed: %v", err) + } + + // Verify the results + err = filepath.Walk(tempDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() && strings.HasSuffix(info.Name(), "_converted.cbz") { + t.Logf("Converted file found: %s", path) + } + return nil + }) + if err != nil { + t.Fatalf("Error verifying converted files: %v", err) + } +} diff --git a/converter/converter.go b/converter/converter.go index 4d12caf..10c2afc 100644 --- a/converter/converter.go +++ b/converter/converter.go @@ -27,7 +27,9 @@ func Available() []constant.ConversionFormat { // Get returns a packer by name. // If the packer is not available, an error is returned. -func Get(name constant.ConversionFormat) (Converter, error) { +var Get = getConverter + +func getConverter(name constant.ConversionFormat) (Converter, error) { if converter, ok := converters[name]; ok { return converter, nil }