github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/repo/deploy-key/add/add_test.go (about) 1 package add 2 3 import ( 4 "net/http" 5 "testing" 6 7 "github.com/ungtb10d/cli/v2/internal/ghrepo" 8 "github.com/ungtb10d/cli/v2/pkg/httpmock" 9 "github.com/ungtb10d/cli/v2/pkg/iostreams" 10 ) 11 12 func Test_addRun(t *testing.T) { 13 tests := []struct { 14 name string 15 opts AddOptions 16 isTTY bool 17 stdin string 18 httpStubs func(t *testing.T, reg *httpmock.Registry) 19 wantStdout string 20 wantStderr string 21 wantErr bool 22 }{ 23 { 24 name: "add from stdin", 25 isTTY: true, 26 opts: AddOptions{ 27 KeyFile: "-", 28 Title: "my sacred key", 29 AllowWrite: false, 30 }, 31 stdin: "PUBKEY\n", 32 httpStubs: func(t *testing.T, reg *httpmock.Registry) { 33 reg.Register( 34 httpmock.REST("POST", "repos/OWNER/REPO/keys"), 35 httpmock.RESTPayload(200, `{}`, func(payload map[string]interface{}) { 36 if title := payload["title"].(string); title != "my sacred key" { 37 t.Errorf("POST title %q, want %q", title, "my sacred key") 38 } 39 if key := payload["key"].(string); key != "PUBKEY\n" { 40 t.Errorf("POST key %q, want %q", key, "PUBKEY\n") 41 } 42 if isReadOnly := payload["read_only"].(bool); !isReadOnly { 43 t.Errorf("POST read_only %v, want %v", isReadOnly, true) 44 } 45 })) 46 }, 47 wantStdout: "✓ Deploy key added to OWNER/REPO\n", 48 wantStderr: "", 49 wantErr: false, 50 }, 51 } 52 53 for _, tt := range tests { 54 t.Run(tt.name, func(t *testing.T) { 55 ios, stdin, stdout, stderr := iostreams.Test() 56 stdin.WriteString(tt.stdin) 57 ios.SetStdinTTY(tt.isTTY) 58 ios.SetStdoutTTY(tt.isTTY) 59 ios.SetStderrTTY(tt.isTTY) 60 61 reg := &httpmock.Registry{} 62 if tt.httpStubs != nil { 63 tt.httpStubs(t, reg) 64 } 65 66 opts := tt.opts 67 opts.IO = ios 68 opts.BaseRepo = func() (ghrepo.Interface, error) { return ghrepo.New("OWNER", "REPO"), nil } 69 opts.HTTPClient = func() (*http.Client, error) { return &http.Client{Transport: reg}, nil } 70 71 err := addRun(&opts) 72 if (err != nil) != tt.wantErr { 73 t.Errorf("addRun() return error: %v", err) 74 return 75 } 76 77 if stdout.String() != tt.wantStdout { 78 t.Errorf("wants stdout %q, got %q", tt.wantStdout, stdout.String()) 79 } 80 if stderr.String() != tt.wantStderr { 81 t.Errorf("wants stderr %q, got %q", tt.wantStderr, stderr.String()) 82 } 83 }) 84 } 85 }