44 "encoding/json"
55 "net/http"
66 "net/http/httptest"
7+ "strings"
78 "testing"
89)
910
@@ -14,9 +15,9 @@ func TestDoltHubProvider_Fork(t *testing.T) {
1415 body string
1516 wantError bool
1617 }{
17- {"success" , 200 , `{"status":"ok" }` , false },
18- {"already exists" , 409 , `{"message":"already exists" }` , false },
19- {"forbidden" , 403 , `{"message":"forbidden"}` , true },
18+ {"success" , 200 , `{"data":{"createFork":{"forkOperationName":"op-123"}} }` , false },
19+ {"already exists" , 200 , `{"errors":[{" message":"database has already been forked"}] }` , false },
20+ {"forbidden" , 200 , `{"errors":[{" message":"forbidden"}] }` , true },
2021 }
2122
2223 for _ , tt := range tests {
@@ -25,29 +26,40 @@ func TestDoltHubProvider_Fork(t *testing.T) {
2526 if r .Method != "POST" {
2627 t .Errorf ("expected POST, got %s" , r .Method )
2728 }
28- if r . URL . Path != "/database/fork" {
29- t . Errorf ( "expected /database/fork, got %s" , r . URL . Path )
30- }
31- if r . Header . Get ( "authorization" ) != "token test-token" {
32- t .Errorf ("expected auth header , got %q" , r . Header . Get ( "authorization" ) )
29+
30+ // Verify cookie auth.
31+ cookie := r . Header . Get ( "Cookie" )
32+ if ! strings . Contains ( cookie , "dolthubToken= test-token") {
33+ t .Errorf ("expected dolthubToken cookie , got %q" , cookie )
3334 }
3435
35- var body map [string ]string
36- if err := json .NewDecoder (r .Body ).Decode (& body ); err != nil {
36+ // Verify GraphQL request body.
37+ var gqlReq graphqlRequest
38+ if err := json .NewDecoder (r .Body ).Decode (& gqlReq ); err != nil {
3739 t .Errorf ("decoding request body: %v" , err )
3840 }
39- if body ["from_owner" ] != "steveyegge" {
40- t .Errorf ("from_owner = %q, want %q" , body ["from_owner" ], "steveyegge" )
41+ if ! strings .Contains (gqlReq .Query , "createFork" ) {
42+ t .Errorf ("query should contain createFork, got %q" , gqlReq .Query )
43+ }
44+ vars := gqlReq .Variables
45+ if vars ["parentOwnerName" ] != "steveyegge" {
46+ t .Errorf ("parentOwnerName = %q, want %q" , vars ["parentOwnerName" ], "steveyegge" )
47+ }
48+ if vars ["parentRepoName" ] != "wl-commons" {
49+ t .Errorf ("parentRepoName = %q, want %q" , vars ["parentRepoName" ], "wl-commons" )
50+ }
51+ if vars ["ownerName" ] != "alice-dev" {
52+ t .Errorf ("ownerName = %q, want %q" , vars ["ownerName" ], "alice-dev" )
4153 }
4254
4355 w .WriteHeader (tt .statusCode )
4456 _ , _ = w .Write ([]byte (tt .body ))
4557 }))
4658 defer server .Close ()
4759
48- oldBase := dolthubAPIBase
49- dolthubAPIBase = server .URL
50- defer func () { dolthubAPIBase = oldBase }()
60+ oldURL := dolthubGraphQLURL
61+ dolthubGraphQLURL = server .URL
62+ defer func () { dolthubGraphQLURL = oldURL }()
5163
5264 provider := NewDoltHubProvider ("test-token" )
5365 err := provider .Fork ("steveyegge" , "wl-commons" , "alice-dev" )
@@ -61,6 +73,24 @@ func TestDoltHubProvider_Fork(t *testing.T) {
6173 }
6274}
6375
76+ func TestDoltHubProvider_Fork_HTTPError (t * testing.T ) {
77+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , _ * http.Request ) {
78+ w .WriteHeader (500 )
79+ _ , _ = w .Write ([]byte ("internal server error" ))
80+ }))
81+ defer server .Close ()
82+
83+ oldURL := dolthubGraphQLURL
84+ dolthubGraphQLURL = server .URL
85+ defer func () { dolthubGraphQLURL = oldURL }()
86+
87+ provider := NewDoltHubProvider ("test-token" )
88+ err := provider .Fork ("org" , "db" , "fork-org" )
89+ if err == nil {
90+ t .Error ("expected error for HTTP 500" )
91+ }
92+ }
93+
6494func TestDoltHubProvider_DatabaseURL (t * testing.T ) {
6595 provider := NewDoltHubProvider ("token" )
6696 got := provider .DatabaseURL ("steveyegge" , "wl-commons" )
0 commit comments