auth_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package auth
  2. import (
  3. "net/http"
  4. "net/url"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestUnauthorized(t *testing.T) {
  9. setup(t)
  10. defer teardown()
  11. a := assert.New(t)
  12. resp := testClient.GetBody("/profile", nil)
  13. a.Equal(http.StatusUnauthorized, resp.Code)
  14. a.NotEqual(0, resp.Body.Len())
  15. }
  16. func TestLogin_emptyVals(t *testing.T) {
  17. setup(t)
  18. defer teardown()
  19. a := assert.New(t)
  20. vals := url.Values{}
  21. resp := testClient.PostForm("/login", vals)
  22. a.Equal(http.StatusBadRequest, resp.Code)
  23. }
  24. func TestLogin_badLogin(t *testing.T) {
  25. setup(t)
  26. defer teardown()
  27. a := assert.New(t)
  28. vals := url.Values{
  29. "user": {"false"},
  30. "pass": {"false"},
  31. }
  32. called := false
  33. testAuthProvider.checkMock = func(u, p string) (interface{}, error) {
  34. called = true
  35. return nil, ErrBadLogin
  36. }
  37. resp := testClient.PostForm("/login", vals)
  38. a.Equal(http.StatusBadRequest, resp.Code)
  39. a.True(called)
  40. a.Contains(resp.Body.String(), ErrBadLogin.Error())
  41. }
  42. func TestLogin_workingLogin(t *testing.T) {
  43. setup(t)
  44. defer teardown()
  45. a := assert.New(t)
  46. vals := url.Values{
  47. "user": {"testUser"},
  48. "pass": {"testPassw"},
  49. }
  50. called := false
  51. testAuthProvider.checkMock = func(u, p string) (interface{}, error) {
  52. called = true
  53. if !(u == "testUser" && p == "testPassw") {
  54. return nil, ErrBadLogin
  55. }
  56. return 23, nil
  57. }
  58. resp := testClient.PostForm("/login", vals)
  59. a.Equal(http.StatusSeeOther, resp.Code)
  60. a.Equal("/landingRedir", resp.Header().Get("Location"))
  61. a.True(called)
  62. newCookie := resp.Header().Get("Set-Cookie")
  63. a.Contains(newCookie, defaultSessionName)
  64. }
  65. func TestLogin_workingLoginAndRestrictedAcc(t *testing.T) {
  66. setup(t)
  67. defer teardown()
  68. a := assert.New(t)
  69. vals := url.Values{
  70. "user": {"testUser"},
  71. "pass": {"testPassw"},
  72. }
  73. called := false
  74. testAuthProvider.checkMock = func(u, p string) (interface{}, error) {
  75. called = true
  76. if !(u == "testUser" && p == "testPassw") {
  77. return nil, ErrBadLogin
  78. }
  79. return 23, nil
  80. }
  81. resp := testClient.PostForm("/login", vals)
  82. a.Equal(http.StatusSeeOther, resp.Code)
  83. a.True(called)
  84. newCookie := resp.Header().Get("Set-Cookie")
  85. a.Contains(newCookie, defaultSessionName)
  86. resp2 := testClient.GetBody("/profile", &http.Header{"Cookie": []string{newCookie}})
  87. a.Equal(http.StatusOK, resp2.Code)
  88. }
  89. func TestLogin_workingLoginAndLogout(t *testing.T) {
  90. setup(t)
  91. defer teardown()
  92. a := assert.New(t)
  93. vals := url.Values{
  94. "user": {"testUser"},
  95. "pass": {"testPassw"},
  96. }
  97. called := false
  98. testAuthProvider.checkMock = func(u, p string) (interface{}, error) {
  99. called = true
  100. if !(u == "testUser" && p == "testPassw") {
  101. return nil, ErrBadLogin
  102. }
  103. return 23, nil
  104. }
  105. resp := testClient.PostForm("/login", vals)
  106. a.Equal(http.StatusSeeOther, resp.Code)
  107. a.True(called)
  108. newCookie := resp.Header().Get("Set-Cookie")
  109. a.Contains(newCookie, defaultSessionName)
  110. resp2 := testClient.GetBody("/logout", &http.Header{"Cookie": []string{newCookie}})
  111. logoutCookie := resp2.Header().Get("Set-Cookie")
  112. a.Equal("/landingRedir", resp2.Header().Get("Location"))
  113. a.NotEqual("", logoutCookie)
  114. a.NotEqual(newCookie, logoutCookie)
  115. resp3 := testClient.GetBody("/profile", &http.Header{"Cookie": []string{logoutCookie}})
  116. a.Equal(http.StatusUnauthorized, resp3.Code)
  117. a.Equal("Not Authorized\n", resp3.Body.String(), "Body %q", resp3.Body.String())
  118. }