package processor
import (
"bytes"
"context"
"errors"
"fmt"
"io"
"os"
"path/filepath"
"strings"
"testing"
"codeberg.org/snonux/totalrecall/internal/audio"
"codeberg.org/snonux/totalrecall/internal/cli"
"codeberg.org/snonux/totalrecall/internal/gui"
"codeberg.org/snonux/totalrecall/internal/image"
"codeberg.org/snonux/totalrecall/internal/phonetic"
"github.com/spf13/viper"
)
type stubImageSearcher struct {
lastPrompt string
searchErr error
downloadErr error
promptCallback func(string)
}
func (s *stubImageSearcher) Search(ctx context.Context, opts *image.SearchOptions) ([]image.SearchResult, error) {
if s.searchErr != nil {
return nil, s.searchErr
}
s.lastPrompt = "stub nanobanana prompt"
if s.promptCallback != nil {
s.promptCallback(s.lastPrompt)
}
return []image.SearchResult{
{
ID: "stub-image",
URL: "data:image/png;base64,AAAA",
ThumbnailURL: "data:image/png;base64,AAAA",
Width: 1,
Height: 1,
Description: "stub image",
Attribution: "stub attribution",
Source: "nanobanana",
},
}, nil
}
func (s *stubImageSearcher) Download(ctx context.Context, url string) (io.ReadCloser, error) {
if s.downloadErr != nil {
return nil, s.downloadErr
}
return io.NopCloser(strings.NewReader("mock image data")), nil
}
func (s *stubImageSearcher) GetAttribution(result *image.SearchResult) string {
return result.Attribution
}
func (s *stubImageSearcher) Name() string {
return "nanobanana"
}
func (s *stubImageSearcher) GetLastPrompt() string {
return s.lastPrompt
}
func (s *stubImageSearcher) SetPromptCallback(callback func(string)) {
s.promptCallback = callback
}
type fakeAudioProvider struct {
generateCalls int
texts []string
outputFiles []string
lastText string
lastOutputFile string
generateFunc func(text, outputFile string) error
}
func (f *fakeAudioProvider) GenerateAudio(_ context.Context, text, outputFile string) error {
f.generateCalls++
f.texts = append(f.texts, text)
f.outputFiles = append(f.outputFiles, outputFile)
f.lastText = text
f.lastOutputFile = outputFile
if f.generateFunc != nil {
return f.generateFunc(text, outputFile)
}
return nil
}
func (f *fakeAudioProvider) Name()
|