login_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package user_test
  2. import (
  3. "fmt"
  4. "net/http"
  5. "testing"
  6. "github.com/porter-dev/porter/api/server/handlers/user"
  7. "github.com/porter-dev/porter/api/server/shared"
  8. "github.com/porter-dev/porter/api/server/shared/apitest"
  9. "github.com/porter-dev/porter/api/types"
  10. "github.com/porter-dev/porter/internal/repository/test"
  11. )
  12. func TestLoginUserSuccessful(t *testing.T) {
  13. req, rr := apitest.GetRequestAndRecorder(
  14. t,
  15. string(types.HTTPVerbPost),
  16. "/api/login",
  17. &types.LoginUserRequest{
  18. Email: "test@test.it",
  19. Password: "hello",
  20. },
  21. )
  22. config := apitest.LoadConfig(t)
  23. apitest.CreateTestUser(t, config, true)
  24. handler := user.NewUserLoginHandler(
  25. config,
  26. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  27. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  28. )
  29. handler.ServeHTTP(rr, req)
  30. expUser := &types.LoginUserResponse{
  31. ID: 1,
  32. Email: "test@test.it",
  33. EmailVerified: true,
  34. }
  35. gotUser := &types.LoginUserResponse{}
  36. apitest.AssertResponseExpected(t, rr, expUser, gotUser)
  37. }
  38. func TestLoginUserIncorrectPassword(t *testing.T) {
  39. req, rr := apitest.GetRequestAndRecorder(
  40. t,
  41. string(types.HTTPVerbPost),
  42. "/api/login",
  43. &types.LoginUserRequest{
  44. Email: "test@test.it",
  45. Password: "hello1",
  46. },
  47. )
  48. config := apitest.LoadConfig(t)
  49. apitest.CreateTestUser(t, config, true)
  50. handler := user.NewUserLoginHandler(
  51. config,
  52. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  53. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  54. )
  55. handler.ServeHTTP(rr, req)
  56. apitest.AssertResponseError(t, rr, http.StatusUnauthorized, &types.ExternalError{
  57. Error: fmt.Sprintf("incorrect password"),
  58. })
  59. }
  60. func TestLoginUserBadEmail(t *testing.T) {
  61. req, rr := apitest.GetRequestAndRecorder(
  62. t,
  63. string(types.HTTPVerbPost),
  64. "/api/login",
  65. &types.LoginUserRequest{
  66. Email: "test",
  67. Password: "hello1",
  68. },
  69. )
  70. config := apitest.LoadConfig(t)
  71. apitest.CreateTestUser(t, config, true)
  72. handler := user.NewUserLoginHandler(
  73. config,
  74. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  75. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  76. )
  77. handler.ServeHTTP(rr, req)
  78. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  79. Error: fmt.Sprintf("validation failed on field 'Email' on condition 'email'"),
  80. })
  81. }
  82. func TestLoginUserEmptyPassword(t *testing.T) {
  83. req, rr := apitest.GetRequestAndRecorder(
  84. t,
  85. string(types.HTTPVerbPost),
  86. "/api/login",
  87. &types.LoginUserRequest{
  88. Email: "test@test.it",
  89. Password: "",
  90. },
  91. )
  92. config := apitest.LoadConfig(t)
  93. apitest.CreateTestUser(t, config, true)
  94. handler := user.NewUserLoginHandler(
  95. config,
  96. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  97. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  98. )
  99. handler.ServeHTTP(rr, req)
  100. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  101. Error: fmt.Sprintf("validation failed on field 'Password' on condition 'required'"),
  102. })
  103. }
  104. func TestLoginUserNotExist(t *testing.T) {
  105. req, rr := apitest.GetRequestAndRecorder(
  106. t,
  107. string(types.HTTPVerbPost),
  108. "/api/login",
  109. &types.LoginUserRequest{
  110. Email: "test@example.com",
  111. Password: "hello",
  112. },
  113. )
  114. config := apitest.LoadConfig(t)
  115. apitest.CreateTestUser(t, config, true)
  116. handler := user.NewUserLoginHandler(
  117. config,
  118. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  119. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  120. )
  121. handler.ServeHTTP(rr, req)
  122. apitest.AssertResponseForbidden(t, rr)
  123. }
  124. func TestLoginUserFailingReadUserByEmailMethod(t *testing.T) {
  125. req, rr := apitest.GetRequestAndRecorder(
  126. t,
  127. string(types.HTTPVerbPost),
  128. "/api/login",
  129. &types.LoginUserRequest{
  130. Email: "test@test.it",
  131. Password: "hello",
  132. },
  133. )
  134. config := apitest.LoadConfig(t, test.ReadUserByEmailMethod)
  135. apitest.CreateTestUser(t, config, true)
  136. handler := user.NewUserLoginHandler(
  137. config,
  138. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  139. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  140. )
  141. handler.ServeHTTP(rr, req)
  142. apitest.AssertResponseInternalServerError(t, rr)
  143. }