@@ -2,6 +2,7 @@ package github
22
33import (
44 "context"
5+ "encoding/json"
56 "errors"
67 "fmt"
78 "testing"
@@ -20,16 +21,18 @@ func TestRepositoryResourceCompletionHandler(t *testing.T) {
2021 wantErr bool
2122 }{
2223 {
23- name : "non-resource completion request" ,
24+ name : "prompt completion request" ,
2425 request : & mcp.CompleteRequest {
2526 Params : & mcp.CompleteParams {
2627 Ref : & mcp.CompleteReference {
27- Type : "something-else " ,
28+ Type : "ref/prompt " ,
2829 },
2930 },
3031 },
31- expected : nil ,
32- wantErr : false ,
32+ expected : & mcp.CompleteResult {
33+ Completion : mcp.CompletionResultDetails {Values : []string {}},
34+ },
35+ wantErr : false ,
3336 },
3437 {
3538 name : "invalid ref type" ,
@@ -40,8 +43,10 @@ func TestRepositoryResourceCompletionHandler(t *testing.T) {
4043 },
4144 },
4245 },
43- expected : nil ,
44- wantErr : false ,
46+ expected : & mcp.CompleteResult {
47+ Completion : mcp.CompletionResultDetails {Values : []string {}},
48+ },
49+ wantErr : false ,
4550 },
4651 {
4752 name : "unknown argument" ,
@@ -65,6 +70,7 @@ func TestRepositoryResourceCompletionHandler(t *testing.T) {
6570 for _ , tt := range tests {
6671 t .Run (tt .name , func (t * testing.T ) {
6772 getClient := func (_ context.Context ) (* github.Client , error ) {
73+ assert .Equal (t , "ref/resource" , tt .request .Params .Ref .Type , "non-resource completions must not fetch a client" )
6874 return & github.Client {}, nil
6975 }
7076
@@ -77,10 +83,45 @@ func TestRepositoryResourceCompletionHandler(t *testing.T) {
7783 require .NoError (t , err )
7884 }
7985 assert .Equal (t , tt .expected , result )
86+ if ! tt .wantErr {
87+ require .NotNil (t , result )
88+ data , err := json .Marshal (result )
89+ require .NoError (t , err )
90+ assert .JSONEq (t , `{"completion":{"values":[]}}` , string (data ))
91+ }
8092 })
8193 }
8294}
8395
96+ func TestRepositoryResourceCompletionHandler_EmptyResults (t * testing.T ) {
97+ const argumentName = "owner"
98+ originalResolver := RepositoryResourceArgumentResolvers [argumentName ]
99+ RepositoryResourceArgumentResolvers [argumentName ] = func (context.Context , * github.Client , map [string ]string , string ) ([]string , error ) {
100+ return nil , nil
101+ }
102+ t .Cleanup (func () {
103+ RepositoryResourceArgumentResolvers [argumentName ] = originalResolver
104+ })
105+
106+ handler := RepositoryResourceCompletionHandler (func (context.Context ) (* github.Client , error ) {
107+ return & github.Client {}, nil
108+ })
109+ result , err := handler (t .Context (), & mcp.CompleteRequest {
110+ Params : & mcp.CompleteParams {
111+ Ref : & mcp.CompleteReference {Type : "ref/resource" },
112+ Argument : mcp.CompleteParamsArgument {Name : argumentName },
113+ },
114+ })
115+
116+ require .NoError (t , err )
117+ require .NotNil (t , result )
118+ assert .Equal (t , []string {}, result .Completion .Values )
119+ assert .Equal (t , 0 , result .Completion .Total )
120+ data , err := json .Marshal (result )
121+ require .NoError (t , err )
122+ assert .JSONEq (t , `{"completion":{"values":[]}}` , string (data ))
123+ }
124+
84125func TestRepositoryResourceCompletionHandler_GetClientError (t * testing.T ) {
85126 getClient := func (_ context.Context ) (* github.Client , error ) {
86127 return nil , errors .New ("client error" )
0 commit comments