mirror of
https://github.com/Belphemur/CBZOptimizer.git
synced 2026-07-21 19:05:39 +02:00
refactor(watch): extract testable maybeBackfillExistingArchives helper
Co-authored-by: Belphemur <197810+Belphemur@users.noreply.github.com>
This commit is contained in:
co-authored by
Belphemur
parent
1d981be21b
commit
d7782fdb25
@@ -115,9 +115,7 @@ func WatchCommand(_ *cobra.Command, args []string) error {
|
|||||||
if err := addRecursiveWatch(watcher, path); err != nil {
|
if err := addRecursiveWatch(watcher, path); err != nil {
|
||||||
return fmt.Errorf("failed to watch path %s: %w", path, err)
|
return fmt.Errorf("failed to watch path %s: %w", path, err)
|
||||||
}
|
}
|
||||||
if backfill {
|
maybeBackfillExistingArchives(backfill, path, debouncer.Trigger)
|
||||||
backfillExistingArchives(path, debouncer.Trigger)
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@@ -208,6 +206,17 @@ func backfillExistingArchives(rootPath string, process func(path string)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// maybeBackfillExistingArchives runs backfillExistingArchives against
|
||||||
|
// rootPath only when enabled is true. It exists as its own function (rather
|
||||||
|
// than inlining the `if` check at the call site) so the gating decision used
|
||||||
|
// by WatchCommand can be exercised directly in tests.
|
||||||
|
func maybeBackfillExistingArchives(enabled bool, rootPath string, process func(path string)) {
|
||||||
|
if !enabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
backfillExistingArchives(rootPath, process)
|
||||||
|
}
|
||||||
|
|
||||||
func shouldProcessWatchEvent(event fsnotify.Event) bool {
|
func shouldProcessWatchEvent(event fsnotify.Event) bool {
|
||||||
return event.Has(fsnotify.Create) || event.Has(fsnotify.Write) || event.Has(fsnotify.Rename)
|
return event.Has(fsnotify.Create) || event.Has(fsnotify.Write) || event.Has(fsnotify.Rename)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,11 +181,11 @@ func TestWatchCommandBackfillFlagDefaultsToFalse(t *testing.T) {
|
|||||||
assert.Equal(t, "bool", flag.Value.Type())
|
assert.Equal(t, "bool", flag.Value.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBackfillExistingArchivesOnlyInvokedWhenRequested(t *testing.T) {
|
func TestMaybeBackfillExistingArchivesOnlyInvokedWhenRequested(t *testing.T) {
|
||||||
root := t.TempDir()
|
root := t.TempDir()
|
||||||
require.NoError(t, os.WriteFile(filepath.Join(root, "chapter1.cbz"), []byte("data"), 0o644))
|
require.NoError(t, os.WriteFile(filepath.Join(root, "chapter1.cbz"), []byte("data"), 0o644))
|
||||||
|
|
||||||
runBackfill := func(backfill bool) []string {
|
runBackfill := func(enabled bool) []string {
|
||||||
var found []string
|
var found []string
|
||||||
var mu sync.Mutex
|
var mu sync.Mutex
|
||||||
process := func(path string) {
|
process := func(path string) {
|
||||||
@@ -193,11 +193,9 @@ func TestBackfillExistingArchivesOnlyInvokedWhenRequested(t *testing.T) {
|
|||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
found = append(found, path)
|
found = append(found, path)
|
||||||
}
|
}
|
||||||
// Mirrors the gating logic in WatchCommand: backfillExistingArchives
|
// This is the exact same gating call WatchCommand makes based on the
|
||||||
// must only run when the --backfill flag is set.
|
// --backfill flag value.
|
||||||
if backfill {
|
maybeBackfillExistingArchives(enabled, root, process)
|
||||||
backfillExistingArchives(root, process)
|
|
||||||
}
|
|
||||||
return found
|
return found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user