95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
package middleware
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
 | 
						|
	middlewareapi "github.com/oauth2-proxy/oauth2-proxy/pkg/apis/middleware"
 | 
						|
	. "github.com/onsi/ginkgo"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
)
 | 
						|
 | 
						|
var _ = Describe("Scope Suite", func() {
 | 
						|
	Context("NewScope", func() {
 | 
						|
		var request, nextRequest *http.Request
 | 
						|
		var rw http.ResponseWriter
 | 
						|
 | 
						|
		BeforeEach(func() {
 | 
						|
			var err error
 | 
						|
			request, err = http.NewRequest("", "http://127.0.0.1/", nil)
 | 
						|
			Expect(err).ToNot(HaveOccurred())
 | 
						|
 | 
						|
			rw = httptest.NewRecorder()
 | 
						|
 | 
						|
			handler := NewScope()(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
						|
				nextRequest = r
 | 
						|
				w.WriteHeader(200)
 | 
						|
			}))
 | 
						|
			handler.ServeHTTP(rw, request)
 | 
						|
		})
 | 
						|
 | 
						|
		It("does not add a scope to the original request", func() {
 | 
						|
			Expect(request.Context().Value(requestScopeKey)).To(BeNil())
 | 
						|
		})
 | 
						|
 | 
						|
		It("cannot load a scope from the original request using GetRequestScope", func() {
 | 
						|
			Expect(GetRequestScope(request)).To(BeNil())
 | 
						|
		})
 | 
						|
 | 
						|
		It("adds a scope to the request for the next handler", func() {
 | 
						|
			Expect(nextRequest.Context().Value(requestScopeKey)).ToNot(BeNil())
 | 
						|
		})
 | 
						|
 | 
						|
		It("can load a scope from the next handler's request using GetRequestScope", func() {
 | 
						|
			Expect(GetRequestScope(nextRequest)).ToNot(BeNil())
 | 
						|
		})
 | 
						|
	})
 | 
						|
 | 
						|
	Context("GetRequestScope", func() {
 | 
						|
		var request *http.Request
 | 
						|
 | 
						|
		BeforeEach(func() {
 | 
						|
			var err error
 | 
						|
			request, err = http.NewRequest("", "http://127.0.0.1/", nil)
 | 
						|
			Expect(err).ToNot(HaveOccurred())
 | 
						|
		})
 | 
						|
 | 
						|
		Context("with a scope", func() {
 | 
						|
			var scope *middlewareapi.RequestScope
 | 
						|
 | 
						|
			BeforeEach(func() {
 | 
						|
				scope = &middlewareapi.RequestScope{}
 | 
						|
				contextWithScope := context.WithValue(request.Context(), requestScopeKey, scope)
 | 
						|
				request = request.WithContext(contextWithScope)
 | 
						|
			})
 | 
						|
 | 
						|
			It("returns the scope", func() {
 | 
						|
				s := GetRequestScope(request)
 | 
						|
				Expect(s).ToNot(BeNil())
 | 
						|
				Expect(s).To(Equal(scope))
 | 
						|
			})
 | 
						|
 | 
						|
			Context("if the scope is then modified", func() {
 | 
						|
				BeforeEach(func() {
 | 
						|
					Expect(scope.SaveSession).To(BeFalse())
 | 
						|
					scope.SaveSession = true
 | 
						|
				})
 | 
						|
 | 
						|
				It("returns the updated session", func() {
 | 
						|
					s := GetRequestScope(request)
 | 
						|
					Expect(s).ToNot(BeNil())
 | 
						|
					Expect(s).To(Equal(scope))
 | 
						|
					Expect(s.SaveSession).To(BeTrue())
 | 
						|
				})
 | 
						|
			})
 | 
						|
		})
 | 
						|
 | 
						|
		Context("without a scope", func() {
 | 
						|
			It("returns nil", func() {
 | 
						|
				Expect(GetRequestScope(request)).To(BeNil())
 | 
						|
			})
 | 
						|
		})
 | 
						|
	})
 | 
						|
})
 |