fix(utils): prevent nil pointer panic in ResolvePartialID (#1132)

Add nil check at start of ResolvePartialID to return a proper error
instead of panicking when storage interface is nil.

Root cause: When bd refile (or other commands) is called with a nil
storage, calling store.SearchIssues() panics with SIGSEGV. This can
happen when routing fails to initialize storage properly.

Now returns: "cannot resolve issue ID <id>: storage is nil"

Fixes: bd-7ypor

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Nicolas Suzor
2026-01-17 18:00:56 +10:00
committed by GitHub
parent aee86dfae2
commit c8187137f5
2 changed files with 19 additions and 0 deletions

View File

@@ -316,6 +316,21 @@ func TestResolvePartialID_NoConfig(t *testing.T) {
}
}
func TestResolvePartialID_NilStorage(t *testing.T) {
ctx := context.Background()
// Test that nil storage returns an error instead of panicking
_, err := ResolvePartialID(ctx, nil, "bd-123")
if err == nil {
t.Fatal("ResolvePartialID with nil storage should return error, got nil")
}
expectedMsg := "storage is nil"
if !contains(err.Error(), expectedMsg) {
t.Errorf("ResolvePartialID error = %q; want error containing %q", err.Error(), expectedMsg)
}
}
func TestExtractIssuePrefix(t *testing.T) {
tests := []struct {
name string