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  }