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  }