github.com/kvattikuti/drone@v0.2.1-0.20140603034306-d400229a327a/pkg/handler/testing/handler_test.go (about) 1 package testing 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 8 . "github.com/drone/drone/pkg/database/testing" 9 "github.com/drone/drone/pkg/handler" 10 . "github.com/drone/drone/pkg/model" 11 12 "github.com/bmizerany/pat" 13 . "github.com/smartystreets/goconvey/convey" 14 ) 15 16 func TestRepoHandler(t *testing.T) { 17 Setup() 18 defer Teardown() 19 20 m := pat.New() 21 22 Convey("Repo Handler", t, func() { 23 m.Get("/:host/:owner/:name", handler.RepoHandler(dummyUserRepo)) 24 Convey("Public repo can be viewed without login", func() { 25 req, err := http.NewRequest("GET", "/bitbucket.org/drone/test", nil) 26 So(err, ShouldBeNil) 27 rec := httptest.NewRecorder() 28 m.ServeHTTP(rec, req) 29 So(rec.Code, ShouldEqual, 200) 30 }) 31 Convey("Public repo can be viewed by another user", func() { 32 req, err := http.NewRequest("GET", "/bitbucket.org/drone/test", nil) 33 So(err, ShouldBeNil) 34 rec := httptest.NewRecorder() 35 setUserSession(rec, req, "cavepig@gmail.com") 36 m.ServeHTTP(rec, req) 37 So(rec.Code, ShouldEqual, 200) 38 }) 39 40 Convey("Private repo can not be viewed without login", func() { 41 req, err := http.NewRequest("GET", "/github.com/drone/drone", nil) 42 So(err, ShouldBeNil) 43 rec := httptest.NewRecorder() 44 m.ServeHTTP(rec, req) 45 So(rec.Code, ShouldEqual, 303) 46 }) 47 Convey("Private repo can not be viewed by a non team member", func() { 48 req, err := http.NewRequest("GET", "/github.com/drone/drone", nil) 49 So(err, ShouldBeNil) 50 rec := httptest.NewRecorder() 51 setUserSession(rec, req, "rick@el.to.ro") 52 m.ServeHTTP(rec, req) 53 So(rec.Code, ShouldEqual, 404) 54 }) 55 }) 56 } 57 58 func dummyUserRepo(w http.ResponseWriter, r *http.Request, u *User, repo *Repo) error { 59 return handler.RenderText(w, http.StatusText(http.StatusOK), http.StatusOK) 60 } 61 62 func setUserSession(w http.ResponseWriter, r *http.Request, username string) { 63 handler.SetCookie(w, r, "_sess", username) 64 resp := http.Response{Header: w.Header()} 65 for _, v := range resp.Cookies() { 66 r.AddCookie(v) 67 } 68 }