Parent directory

auth_test.go

2038 bytes
 1package auth
 2
 3import (
 4	"net/http"
 5	"net/http/httptest"
 6	"testing"
 7
 8	"github.com/gin-gonic/gin"
 9	"github.com/stretchr/testify/suite"
10
11	"github.com/TheEdgeOfRage/ytrssil-api/config"
12)
13
14type AuthTestSuite struct {
15	suite.Suite
16
17	cfg    config.Config
18	server *http.Server
19	engine *gin.Engine
20}
21
22func TestAuthTestSuite(t *testing.T) {
23	suite.Run(t, new(AuthTestSuite))
24}
25
26func (s *AuthTestSuite) SetupSuite() {
27	s.cfg = config.TestConfig()
28
29	gin.SetMode(gin.TestMode)
30	s.engine = gin.New()
31	s.engine.Use(
32		gin.Recovery(),
33		APIAuthMiddleware(s.cfg.AuthToken),
34	)
35	s.engine.GET("/", func(c *gin.Context) {
36		c.String(http.StatusOK, "OK")
37	})
38
39	s.server = &http.Server{Handler: s.engine}
40}
41
42func (s *AuthTestSuite) TestSuccessfulAuthentication() {
43	w := httptest.NewRecorder()
44	req, _ := http.NewRequest("GET", "/", nil)
45	req.Header["Authorization"] = []string{"foo"}
46	s.server.Handler.ServeHTTP(w, req)
47
48	s.Equal(http.StatusOK, w.Code)
49	s.Equal("OK", w.Body.String())
50}
51
52func (s *AuthTestSuite) TestMissingAuthorizationHeader() {
53	w := httptest.NewRecorder()
54	req, _ := http.NewRequest("GET", "/", nil)
55	s.server.Handler.ServeHTTP(w, req)
56
57	s.Equal(http.StatusUnauthorized, w.Code)
58	s.Equal(`{"error":"missing Authorization header"}`, w.Body.String())
59}
60
61func (s *AuthTestSuite) TestWrongCredentials() {
62	w := httptest.NewRecorder()
63	req, _ := http.NewRequest("GET", "/", nil)
64	req.Header["Authorization"] = []string{"bar"}
65	s.server.Handler.ServeHTTP(w, req)
66
67	s.Equal(http.StatusUnauthorized, w.Code)
68	s.Equal(`{"error":"invalid auth token"}`, w.Body.String())
69}
70
71func (s *AuthTestSuite) TestPageAuthenticationStopsHandler() {
72	engine := gin.New()
73	handlerCalled := false
74	engine.Use(PageAuthMiddleware(s.cfg.AuthToken))
75	engine.POST("/", func(c *gin.Context) {
76		handlerCalled = true
77		c.Status(http.StatusNoContent)
78	})
79
80	w := httptest.NewRecorder()
81	req, _ := http.NewRequest(http.MethodPost, "/", nil)
82	engine.ServeHTTP(w, req)
83
84	s.Equal(http.StatusFound, w.Code)
85	s.Equal("/auth", w.Header().Get("Location"))
86	s.False(handlerCalled)
87}