package snapshot import ( "errors" "fmt" "os" "runtime" "strings" "testing" ) func TestWrapPermissionError(t *testing.T) { // Non-permission errors pass through unchanged. plain := errors.New("disk on fire") if got := wrapPermissionError("/some/path", plain); got != plain { t.Errorf("non-permission error should pass through, got %v", got) } // Permission errors get remediation instructions. permErr := fmt.Errorf("open /x: %w", os.ErrPermission) wrapped := wrapPermissionError("/Users/u/Library/Calendars", permErr) if !errors.Is(wrapped, os.ErrPermission) { t.Error("wrapped error should still match os.ErrPermission") } if !strings.Contains(wrapped.Error(), "/Users/u/Library/Calendars") { t.Error("wrapped error should name the offending path") } if runtime.GOOS == "darwin" { if !strings.Contains(wrapped.Error(), "Full Disk Access") { t.Errorf("macOS permission error should mention Full Disk Access:\n%s", wrapped.Error()) } if !strings.Contains(wrapped.Error(), "System Settings") { t.Errorf("macOS permission error should point at System Settings:\n%s", wrapped.Error()) } } else { if !strings.Contains(wrapped.Error(), "--skip-errors") { t.Errorf("non-macOS permission error should mention --skip-errors:\n%s", wrapped.Error()) } } }