github.com/saucelabs/saucectl@v0.175.1/internal/http/webdriver_test.go (about) 1 package http 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "net/http" 8 "net/http/httptest" 9 "reflect" 10 "testing" 11 12 "github.com/saucelabs/saucectl/internal/job" 13 ) 14 15 func TestWebdriver_StartJob(t *testing.T) { 16 type args struct { 17 ctx context.Context 18 jobStarterPayload job.StartOptions 19 } 20 type fields struct { 21 HTTPClient *http.Client 22 URL string 23 } 24 tests := []struct { 25 name string 26 fields fields 27 args args 28 want string 29 wantErr error 30 serverFunc func(w http.ResponseWriter, r *http.Request) // what shall the mock server respond with 31 }{ 32 { 33 name: "Happy path", 34 args: args{ 35 ctx: context.TODO(), 36 jobStarterPayload: job.StartOptions{ 37 User: "fake-user", 38 AccessKey: "fake-access-key", 39 BrowserName: "fake-browser-name", 40 Name: "fake-test-name", 41 Framework: "fake-framework", 42 Build: "fake-buildname", 43 Tags: nil, 44 }, 45 }, 46 want: "fake-job-id", 47 wantErr: nil, 48 serverFunc: func(w http.ResponseWriter, r *http.Request) { 49 w.WriteHeader(201) 50 _ = json.NewEncoder(w).Encode(sessionStartResponse{ 51 SessionID: "fake-job-id", 52 }) 53 }, 54 }, 55 { 56 name: "Non 2xx status code", 57 args: args{ 58 ctx: context.TODO(), 59 jobStarterPayload: job.StartOptions{}, 60 }, 61 want: "", 62 wantErr: fmt.Errorf("job start failed (401): go away"), 63 serverFunc: func(w http.ResponseWriter, r *http.Request) { 64 w.WriteHeader(401) 65 _, _ = w.Write([]byte("go away")) 66 }, 67 }, 68 { 69 name: "Unknown error", 70 args: args{ 71 ctx: context.TODO(), 72 jobStarterPayload: job.StartOptions{}, 73 }, 74 want: "", 75 wantErr: fmt.Errorf("job start failed (500): internal server error"), 76 serverFunc: func(w http.ResponseWriter, r *http.Request) { 77 w.WriteHeader(500) 78 _, err := w.Write([]byte("internal server error")) 79 if err != nil { 80 t.Errorf("failed to write response: %v", err) 81 } 82 }, 83 }, 84 } 85 for _, tt := range tests { 86 t.Run(tt.name, func(t *testing.T) { 87 server := httptest.NewServer(http.HandlerFunc(tt.serverFunc)) 88 defer server.Close() 89 90 c := &Webdriver{ 91 HTTPClient: server.Client(), 92 URL: server.URL, 93 } 94 95 got, _, err := c.StartJob(tt.args.ctx, tt.args.jobStarterPayload) 96 if (err != nil) && !reflect.DeepEqual(err, tt.wantErr) { 97 t.Errorf("StartJob() error = %v, wantErr %v", err, tt.wantErr) 98 return 99 } 100 if !reflect.DeepEqual(got, tt.want) { 101 t.Errorf("StartJob() got = %v, want %v", got, tt.want) 102 } 103 }) 104 } 105 }