package library import ( "sort" "testing" "github.com/fsnotify/fsnotify" ) func TestClassifyEvent(t *testing.T) { tests := []struct { name string op fsnotify.Op isDir bool isAudio bool want watchAction }{ {"create audio file enqueues", fsnotify.Create, false, true, watchEnqueueFile}, {"write audio file enqueues", fsnotify.Write, false, true, watchEnqueueFile}, {"create non-audio file ignored", fsnotify.Create, false, false, watchIgnore}, {"create directory scans it", fsnotify.Create, true, false, watchScanDir}, {"write on directory ignored", fsnotify.Write, true, false, watchIgnore}, {"remove audio file ignored (no pruning)", fsnotify.Remove, false, true, watchIgnore}, {"rename audio file ignored", fsnotify.Rename, false, true, watchIgnore}, {"chmod audio file ignored", fsnotify.Chmod, false, true, watchIgnore}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := classifyEvent(tt.op, tt.isDir, tt.isAudio); got != tt.want { t.Fatalf("classifyEvent(%v, dir=%v, audio=%v) = %v, want %v", tt.op, tt.isDir, tt.isAudio, got, tt.want) } }) } } func TestDrainPending(t *testing.T) { t.Run("empty set returns nil", func(t *testing.T) { if got := drainPending(map[string]struct{}{}); got != nil { t.Fatalf("drainPending(empty) = %v, want nil", got) } }) t.Run("returns paths and clears the set", func(t *testing.T) { pending := map[string]struct{}{ "/music/a.mp3": {}, "/music/b.flac": {}, } got := drainPending(pending) sort.Strings(got) want := []string{"/music/a.mp3", "/music/b.flac"} if len(got) != len(want) || got[0] != want[0] || got[1] != want[1] { t.Fatalf("drainPending = %v, want %v", got, want) } if len(pending) != 0 { t.Fatalf("pending not cleared: %v", pending) } }) }