github.com/section/sectionctl@v1.12.3/commands/login_test.go (about) 1 package commands 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 "net/http/httptest" 8 "net/url" 9 "strings" 10 "testing" 11 12 "github.com/section/sectionctl/api" 13 "github.com/section/sectionctl/credentials" 14 "github.com/stretchr/testify/assert" 15 "github.com/zalando/go-keyring" 16 ) 17 18 func TestCommandsLoginValidatesGoodCredentials(t *testing.T) { 19 assert := assert.New(t) 20 keyring.MockInit() 21 22 // Setup 23 var called bool 24 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 25 called = true 26 w.WriteHeader(http.StatusOK) 27 fmt.Fprint(w, "{}") 28 })) 29 30 ur, err := url.Parse(ts.URL) 31 assert.NoError(err) 32 api.PrefixURI = ur 33 34 in := strings.NewReader("s3cr3t\n") 35 var out bytes.Buffer 36 cmd := LoginCmd{ 37 in: in, 38 out: &out, 39 } 40 41 // Invoke 42 err = cmd.Run() 43 44 // Test 45 assert.NoError(err) 46 assert.True(called) 47 } 48 49 func TestCommandsLoginValidatesBadCredentials(t *testing.T) { 50 assert := assert.New(t) 51 keyring.MockInit() 52 53 // Setup 54 var called bool 55 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 56 called = true 57 w.WriteHeader(http.StatusUnauthorized) 58 })) 59 60 ur, err := url.Parse(ts.URL) 61 assert.NoError(err) 62 api.PrefixURI = ur 63 64 in := strings.NewReader("s3cr3t\n") 65 var out bytes.Buffer 66 cmd := LoginCmd{ 67 in: in, 68 out: &out, 69 } 70 71 // Invoke 72 err = cmd.Run() 73 74 // Test 75 assert.Error(err) 76 assert.True(called) 77 assert.Contains(err.Error(), "unauthorized") 78 } 79 80 func TestCommandsLoginUsesAlreadySetAPIToken(t *testing.T) { 81 assert := assert.New(t) 82 keyring.MockInit() 83 api.Token = "s3cr3t-" + t.Name() 84 85 // Setup 86 var called bool 87 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 88 called = true 89 token := r.Header.Get("section-token") 90 if assert.Equal(token, api.Token) { 91 w.WriteHeader(http.StatusOK) 92 fmt.Fprint(w, "{}") 93 } else { 94 w.WriteHeader(http.StatusBadRequest) 95 } 96 })) 97 98 ur, err := url.Parse(ts.URL) 99 assert.NoError(err) 100 api.PrefixURI = ur 101 102 cmd := LoginCmd{ 103 in: &bytes.Buffer{}, 104 out: &bytes.Buffer{}, 105 } 106 107 108 // Invoke 109 err = cmd.Run() 110 111 // Test 112 assert.NoError(err) 113 assert.True(called) 114 115 c, err := credentials.Read(api.PrefixURI.Host) 116 assert.NoError(err) 117 assert.Equal(c, api.Token) 118 }