@@ -11,7 +11,6 @@ import (
1111"github.com/github/github-mcp-server/pkg/translations"
1212"github.com/google/go-github/v79/github"
1313"github.com/google/jsonschema-go/jsonschema"
14- "github.com/migueleliasweb/go-github-mock/src/mock"
1514"github.com/stretchr/testify/assert"
1615"github.com/stretchr/testify/require"
1716)
@@ -77,24 +76,18 @@ func Test_ListGists(t *testing.T) {
7776}{
7877{
7978name :"list authenticated user's gists" ,
80- mockedClient :mock .NewMockedHTTPClient (
81- mock .WithRequestMatch (
82- mock .GetGists ,
83- mockGists ,
84- ),
85- ),
79+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
80+ GetGists :mockResponse (t ,http .StatusOK ,mockGists ),
81+ }),
8682requestArgs :map [string ]interface {}{},
8783expectError :false ,
8884expectedGists :mockGists ,
8985},
9086{
9187name :"list specific user's gists" ,
92- mockedClient :mock .NewMockedHTTPClient (
93- mock .WithRequestMatchHandler (
94- mock .GetUsersGistsByUsername ,
95- mockResponse (t ,http .StatusOK ,mockGists ),
96- ),
97- ),
88+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
89+ GetUsersGistsByUsername :mockResponse (t ,http .StatusOK ,mockGists ),
90+ }),
9891requestArgs :map [string ]interface {}{
9992"username" :"testuser" ,
10093},
@@ -103,18 +96,15 @@ func Test_ListGists(t *testing.T) {
10396},
10497{
10598name :"list gists with pagination and since parameter" ,
106- mockedClient :mock .NewMockedHTTPClient (
107- mock .WithRequestMatchHandler (
108- mock .GetGists ,
109- expectQueryParams (t ,map [string ]string {
110- "since" :"2023-01-01T00:00:00Z" ,
111- "page" :"2" ,
112- "per_page" :"5" ,
113- }).andThen (
114- mockResponse (t ,http .StatusOK ,mockGists ),
115- ),
99+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
100+ GetGists :expectQueryParams (t ,map [string ]string {
101+ "since" :"2023-01-01T00:00:00Z" ,
102+ "page" :"2" ,
103+ "per_page" :"5" ,
104+ }).andThen (
105+ mockResponse (t ,http .StatusOK ,mockGists ),
116106),
117- ),
107+ } ),
118108requestArgs :map [string ]interface {}{
119109"since" :"2023-01-01T00:00:00Z" ,
120110"page" :float64 (2 ),
@@ -125,12 +115,9 @@ func Test_ListGists(t *testing.T) {
125115},
126116{
127117name :"invalid since parameter" ,
128- mockedClient :mock .NewMockedHTTPClient (
129- mock .WithRequestMatch (
130- mock .GetGists ,
131- mockGists ,
132- ),
133- ),
118+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
119+ GetGists :mockResponse (t ,http .StatusOK ,mockGists ),
120+ }),
134121requestArgs :map [string ]interface {}{
135122"since" :"invalid-date" ,
136123},
@@ -139,15 +126,12 @@ func Test_ListGists(t *testing.T) {
139126},
140127{
141128name :"list gists fails with error" ,
142- mockedClient :mock .NewMockedHTTPClient (
143- mock .WithRequestMatchHandler (
144- mock .GetGists ,
145- http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
129+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
130+ GetGists :http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
146131w .WriteHeader (http .StatusUnauthorized )
147132_ ,_ = w .Write ([]byte (`{"message": "Requires authentication"}` ))
148133}),
149- ),
150- ),
134+ }),
151135requestArgs :map [string ]interface {}{},
152136expectError :true ,
153137expectedErrMsg :"failed to list gists" ,
@@ -242,12 +226,9 @@ func Test_GetGist(t *testing.T) {
242226}{
243227{
244228name :"Successful fetching different gist" ,
245- mockedClient :mock .NewMockedHTTPClient (
246- mock .WithRequestMatchHandler (
247- mock .GetGistsByGistId ,
248- mockResponse (t ,http .StatusOK ,mockGist ),
249- ),
250- ),
229+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
230+ GetGistsByGistID :mockResponse (t ,http .StatusOK ,mockGist ),
231+ }),
251232requestArgs :map [string ]interface {}{
252233"gist_id" :"gist1" ,
253234},
@@ -256,15 +237,12 @@ func Test_GetGist(t *testing.T) {
256237},
257238{
258239name :"gist_id parameter missing" ,
259- mockedClient :mock .NewMockedHTTPClient (
260- mock .WithRequestMatchHandler (
261- mock .GetGistsByGistId ,
262- http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
240+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
241+ GetGistsByGistID :http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
263242w .WriteHeader (http .StatusUnprocessableEntity )
264243_ ,_ = w .Write ([]byte (`{"message": "Invalid Request"}` ))
265244}),
266- ),
267- ),
245+ }),
268246requestArgs :map [string ]interface {}{},
269247expectError :true ,
270248expectedErrMsg :"missing required parameter: gist_id" ,
@@ -361,12 +339,9 @@ func Test_CreateGist(t *testing.T) {
361339}{
362340{
363341name :"create gist successfully" ,
364- mockedClient :mock .NewMockedHTTPClient (
365- mock .WithRequestMatchHandler (
366- mock .PostGists ,
367- mockResponse (t ,http .StatusCreated ,createdGist ),
368- ),
369- ),
342+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
343+ PostGists :mockResponse (t ,http .StatusCreated ,createdGist ),
344+ }),
370345requestArgs :map [string ]interface {}{
371346"filename" :"test.go" ,
372347"content" :"package main\n \n func main() {\n \t fmt.Println(\" Hello, Gist!\" )\n }" ,
@@ -378,7 +353,7 @@ func Test_CreateGist(t *testing.T) {
378353},
379354{
380355name :"missing required filename" ,
381- mockedClient :mock . NewMockedHTTPClient ( ),
356+ mockedClient :MockHTTPClientWithHandlers ( map [ string ]http. HandlerFunc {} ),
382357requestArgs :map [string ]interface {}{
383358"content" :"test content" ,
384359"description" :"Test Gist" ,
@@ -388,7 +363,7 @@ func Test_CreateGist(t *testing.T) {
388363},
389364{
390365name :"missing required content" ,
391- mockedClient :mock . NewMockedHTTPClient ( ),
366+ mockedClient :MockHTTPClientWithHandlers ( map [ string ]http. HandlerFunc {} ),
392367requestArgs :map [string ]interface {}{
393368"filename" :"test.go" ,
394369"description" :"Test Gist" ,
@@ -398,15 +373,12 @@ func Test_CreateGist(t *testing.T) {
398373},
399374{
400375name :"api returns error" ,
401- mockedClient :mock .NewMockedHTTPClient (
402- mock .WithRequestMatchHandler (
403- mock .PostGists ,
404- http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
376+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
377+ PostGists :http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
405378w .WriteHeader (http .StatusUnauthorized )
406379_ ,_ = w .Write ([]byte (`{"message": "Requires authentication"}` ))
407380}),
408- ),
409- ),
381+ }),
410382requestArgs :map [string ]interface {}{
411383"filename" :"test.go" ,
412384"content" :"package main" ,
@@ -506,12 +478,9 @@ func Test_UpdateGist(t *testing.T) {
506478}{
507479{
508480name :"update gist successfully" ,
509- mockedClient :mock .NewMockedHTTPClient (
510- mock .WithRequestMatchHandler (
511- mock .PatchGistsByGistId ,
512- mockResponse (t ,http .StatusOK ,updatedGist ),
513- ),
514- ),
481+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
482+ PatchGistsByGistID :mockResponse (t ,http .StatusOK ,updatedGist ),
483+ }),
515484requestArgs :map [string ]interface {}{
516485"gist_id" :"existing-gist-id" ,
517486"filename" :"updated.go" ,
@@ -523,7 +492,7 @@ func Test_UpdateGist(t *testing.T) {
523492},
524493{
525494name :"missing required gist_id" ,
526- mockedClient :mock . NewMockedHTTPClient ( ),
495+ mockedClient :MockHTTPClientWithHandlers ( map [ string ]http. HandlerFunc {} ),
527496requestArgs :map [string ]interface {}{
528497"filename" :"updated.go" ,
529498"content" :"updated content" ,
@@ -534,7 +503,7 @@ func Test_UpdateGist(t *testing.T) {
534503},
535504{
536505name :"missing required filename" ,
537- mockedClient :mock . NewMockedHTTPClient ( ),
506+ mockedClient :MockHTTPClientWithHandlers ( map [ string ]http. HandlerFunc {} ),
538507requestArgs :map [string ]interface {}{
539508"gist_id" :"existing-gist-id" ,
540509"content" :"updated content" ,
@@ -545,7 +514,7 @@ func Test_UpdateGist(t *testing.T) {
545514},
546515{
547516name :"missing required content" ,
548- mockedClient :mock . NewMockedHTTPClient ( ),
517+ mockedClient :MockHTTPClientWithHandlers ( map [ string ]http. HandlerFunc {} ),
549518requestArgs :map [string ]interface {}{
550519"gist_id" :"existing-gist-id" ,
551520"filename" :"updated.go" ,
@@ -556,15 +525,12 @@ func Test_UpdateGist(t *testing.T) {
556525},
557526{
558527name :"api returns error" ,
559- mockedClient :mock .NewMockedHTTPClient (
560- mock .WithRequestMatchHandler (
561- mock .PatchGistsByGistId ,
562- http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
528+ mockedClient :MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
529+ PatchGistsByGistID :http .HandlerFunc (func (w http.ResponseWriter ,_ * http.Request ) {
563530w .WriteHeader (http .StatusNotFound )
564531_ ,_ = w .Write ([]byte (`{"message": "Not Found"}` ))
565532}),
566- ),
567- ),
533+ }),
568534requestArgs :map [string ]interface {}{
569535"gist_id" :"nonexistent-gist-id" ,
570536"filename" :"updated.go" ,