github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/apiv3/route/authenticator_test.go (about) 1 package route 2 3 import ( 4 "net/http" 5 "testing" 6 7 "github.com/evergreen-ci/evergreen" 8 "github.com/evergreen-ci/evergreen/apiv3" 9 "github.com/evergreen-ci/evergreen/apiv3/servicecontext" 10 "github.com/evergreen-ci/evergreen/model" 11 "github.com/evergreen-ci/evergreen/model/user" 12 "github.com/gorilla/context" 13 . "github.com/smartystreets/goconvey/convey" 14 ) 15 16 func TestAdminAuthenticator(t *testing.T) { 17 Convey("When there is an http request, "+ 18 "a project ref, authenticator, and a service context", t, func() { 19 req, err := http.NewRequest(evergreen.MethodGet, "/", nil) 20 So(err, ShouldBeNil) 21 projectRef := model.ProjectRef{} 22 serviceContext := &servicecontext.MockServiceContext{} 23 author := ProjectAdminAuthenticator{} 24 Convey("When authenticating", func() { 25 26 Reset(func() { 27 context.Clear(req) 28 }) 29 30 Convey("if user is in the admins, should succeed", func() { 31 projectRef.Admins = []string{"test_user"} 32 ctx := model.Context{ 33 ProjectRef: &projectRef, 34 } 35 36 u := user.DBUser{ 37 Id: "test_user", 38 } 39 context.Set(req, RequestUser, &u) 40 context.Set(req, RequestContext, &ctx) 41 So(author.Authenticate(serviceContext, req), ShouldBeNil) 42 }) 43 Convey("if user is in the super users, should succeed", func() { 44 superUsers := []string{"test_user"} 45 projectRef.Admins = []string{"other_user"} 46 ctx := model.Context{ 47 ProjectRef: &projectRef, 48 } 49 serviceContext.SetSuperUsers(superUsers) 50 51 u := user.DBUser{ 52 Id: "test_user", 53 } 54 context.Set(req, RequestUser, &u) 55 context.Set(req, RequestContext, &ctx) 56 So(author.Authenticate(serviceContext, req), ShouldBeNil) 57 }) 58 Convey("if user is not in the admin and not a super user, should error", func() { 59 superUsers := []string{"other_user"} 60 serviceContext.SetSuperUsers(superUsers) 61 62 projectRef.Admins = []string{"other_user"} 63 ctx := model.Context{ 64 ProjectRef: &projectRef, 65 } 66 67 u := user.DBUser{ 68 Id: "test_user", 69 } 70 context.Set(req, RequestUser, &u) 71 context.Set(req, RequestContext, &ctx) 72 err := author.Authenticate(serviceContext, req) 73 74 errToResemble := apiv3.APIError{ 75 StatusCode: http.StatusNotFound, 76 Message: "Not found", 77 } 78 So(err, ShouldResemble, errToResemble) 79 }) 80 }) 81 }) 82 83 } 84 func TestSuperUserAuthenticator(t *testing.T) { 85 Convey("When there is an http request, "+ 86 "an authenticator, and a service context", t, func() { 87 req, err := http.NewRequest(evergreen.MethodGet, "/", nil) 88 So(err, ShouldBeNil) 89 serviceContext := &servicecontext.MockServiceContext{} 90 author := SuperUserAuthenticator{} 91 Convey("When authenticating", func() { 92 93 Reset(func() { 94 context.Clear(req) 95 }) 96 97 Convey("if user is in the superusers, should succeed", func() { 98 superUsers := []string{"test_user"} 99 serviceContext.SetSuperUsers(superUsers) 100 101 u := user.DBUser{ 102 Id: "test_user", 103 } 104 context.Set(req, RequestUser, &u) 105 So(author.Authenticate(serviceContext, req), ShouldBeNil) 106 }) 107 Convey("if user is not in the superusers, should error", func() { 108 superUsers := []string{"other_user"} 109 serviceContext.SetSuperUsers(superUsers) 110 111 u := user.DBUser{ 112 Id: "test_user", 113 } 114 context.Set(req, RequestUser, &u) 115 err := author.Authenticate(serviceContext, req) 116 117 errToResemble := apiv3.APIError{ 118 StatusCode: http.StatusNotFound, 119 Message: "Not found", 120 } 121 So(err, ShouldResemble, errToResemble) 122 123 }) 124 }) 125 }) 126 127 }