11package rye
22
33import (
4+ "fmt"
45 "net/http"
56 "net/http/httptest"
7+ "net/url"
68
79 . "github.com/onsi/ginkgo"
810 . "github.com/onsi/gomega"
@@ -14,39 +16,48 @@ var _ = Describe("AccessToken Middleware", func() {
1416 request * http.Request
1517 response * httptest.ResponseRecorder
1618
17- tokenHeaderName = "at-hname"
18- token1 , token2 string
19+ testHandler func (http.ResponseWriter , * http.Request ) * Response
20+
21+ token1 , token2 string
1922 )
2023
2124 BeforeEach (func () {
2225 response = httptest .NewRecorder ()
23- request = & http.Request {
24- Header : map [string ][]string {},
25- }
2626
2727 token1 = "test1"
2828 token2 = "test2"
2929 })
3030
31- Describe ("handle" , func () {
31+ Context ("header token" , func () {
32+ var (
33+ tokenHeaderName = "at-hname"
34+ )
35+
36+ BeforeEach (func () {
37+ testHandler = NewMiddlewareAccessToken (tokenHeaderName , []string {token1 , token2 })
38+ request = & http.Request {
39+ Header : map [string ][]string {},
40+ }
41+ })
42+
3243 Context ("when a valid token is used" , func () {
3344 It ("should return nil" , func () {
3445 request .Header .Add (tokenHeaderName , token1 )
35- resp := NewMiddlewareAccessToken ( tokenHeaderName , [] string { token1 , token2 }) (response , request )
46+ resp := testHandler (response , request )
3647 Expect (resp ).To (BeNil ())
3748 })
3849
3950 It ("should return nil" , func () {
4051 request .Header .Add (tokenHeaderName , token2 )
41- resp := NewMiddlewareAccessToken ( tokenHeaderName , [] string { token1 , token2 }) (response , request )
52+ resp := testHandler (response , request )
4253 Expect (resp ).To (BeNil ())
4354 })
4455 })
4556
4657 Context ("when an invalid token is used" , func () {
4758 It ("should return an error" , func () {
4859 request .Header .Add (tokenHeaderName , "blah" )
49- resp := NewMiddlewareAccessToken ( tokenHeaderName , [] string { token1 , token2 }) (response , request )
60+ resp := testHandler (response , request )
5061 Expect (resp ).ToNot (BeNil ())
5162 Expect (resp .Err ).To (HaveOccurred ())
5263 Expect (resp .Error ()).To (ContainSubstring ("invalid access token" ))
@@ -56,7 +67,7 @@ var _ = Describe("AccessToken Middleware", func() {
5667
5768 Context ("when no token header exists" , func () {
5869 It ("should return an error" , func () {
59- resp := NewMiddlewareAccessToken ( tokenHeaderName , [] string { token1 , token2 }) (response , request )
70+ resp := testHandler (response , request )
6071 Expect (resp ).ToNot (BeNil ())
6172 Expect (resp .Err ).To (HaveOccurred ())
6273 Expect (resp .Error ()).To (ContainSubstring ("No access token found" ))
@@ -67,12 +78,117 @@ var _ = Describe("AccessToken Middleware", func() {
6778 Context ("when token header is blank" , func () {
6879 It ("should return an error" , func () {
6980 request .Header .Add (tokenHeaderName , "" )
70- resp := NewMiddlewareAccessToken ( tokenHeaderName , [] string { token1 , token2 }) (response , request )
81+ resp := testHandler (response , request )
7182 Expect (resp ).ToNot (BeNil ())
7283 Expect (resp .Err ).To (HaveOccurred ())
7384 Expect (resp .Error ()).To (ContainSubstring ("No access token found" ))
7485 Expect (resp .StatusCode ).To (Equal (http .StatusUnauthorized ))
7586 })
7687 })
7788 })
89+
90+ Context ("query param token" , func () {
91+ var (
92+ qParamName string
93+ qParams string
94+ )
95+
96+ BeforeEach (func () {
97+ qParamName = "token"
98+ testHandler = NewMiddlewareAccessQueryToken (qParamName , []string {token1 , token2 })
99+ })
100+
101+ JustBeforeEach (func () {
102+ u , err := url .Parse (fmt .Sprintf ("http://doesntmatter.io/blah?%s" , qParams ))
103+ Expect (err ).ToNot (HaveOccurred ())
104+
105+ request = & http.Request {
106+ URL : u ,
107+ }
108+ })
109+
110+ Context ("when a valid token is used" , func () {
111+ BeforeEach (func () {
112+ qParams = fmt .Sprintf ("%s=%s" , qParamName , token1 )
113+ })
114+
115+ It ("should return nil" , func () {
116+ resp := testHandler (response , request )
117+ Expect (resp ).To (BeNil ())
118+ })
119+ })
120+
121+ Context ("when the other valid token is used" , func () {
122+ BeforeEach (func () {
123+ qParams = fmt .Sprintf ("%s=%s" , qParamName , token2 )
124+ })
125+
126+ It ("should return nil" , func () {
127+ resp := testHandler (response , request )
128+ Expect (resp ).To (BeNil ())
129+ })
130+ })
131+
132+ Context ("when an invalid token is used" , func () {
133+ BeforeEach (func () {
134+ qParams = fmt .Sprintf ("%s=blah" , qParamName )
135+ })
136+
137+ It ("should return an error" , func () {
138+ resp := testHandler (response , request )
139+ Expect (resp ).ToNot (BeNil ())
140+ Expect (resp .Err ).To (HaveOccurred ())
141+ Expect (resp .Error ()).To (ContainSubstring ("invalid access token" ))
142+ Expect (resp .StatusCode ).To (Equal (http .StatusUnauthorized ))
143+ })
144+ })
145+
146+ Context ("when no token param exists" , func () {
147+ BeforeEach (func () {
148+ qParams = "something=else"
149+ })
150+
151+ It ("should return an error" , func () {
152+ resp := testHandler (response , request )
153+ Expect (resp ).ToNot (BeNil ())
154+ Expect (resp .Err ).To (HaveOccurred ())
155+ Expect (resp .Error ()).To (ContainSubstring ("No access token found" ))
156+ Expect (resp .StatusCode ).To (Equal (http .StatusUnauthorized ))
157+ })
158+ })
159+
160+ Context ("when token param is blank" , func () {
161+ BeforeEach (func () {
162+ qParams = fmt .Sprintf ("%s=''" , qParamName )
163+ })
164+
165+ It ("should return an error" , func () {
166+ resp := testHandler (response , request )
167+ Expect (resp ).ToNot (BeNil ())
168+ Expect (resp .Err ).To (HaveOccurred ())
169+ Expect (resp .Error ()).To (ContainSubstring ("invalid access token" ))
170+ Expect (resp .StatusCode ).To (Equal (http .StatusUnauthorized ))
171+ })
172+ })
173+
174+ Context ("when no query params" , func () {
175+ JustBeforeEach (func () {
176+ u , err := url .Parse ("http://doesntmatter.io/blah" )
177+ Expect (err ).ToNot (HaveOccurred ())
178+
179+ request = & http.Request {
180+ URL : u ,
181+ }
182+ })
183+
184+ It ("should return an error" , func () {
185+ resp := testHandler (response , request )
186+ Expect (resp ).ToNot (BeNil ())
187+ Expect (resp .Err ).To (HaveOccurred ())
188+ Expect (resp .Error ()).To (ContainSubstring ("No access token found" ))
189+ Expect (resp .StatusCode ).To (Equal (http .StatusUnauthorized ))
190+ })
191+ })
192+
193+ })
78194})
0 commit comments