create_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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 TestCreateUserSuccessful(t *testing.T) {
  13. req, rr := apitest.GetRequestAndRecorder(
  14. t,
  15. string(types.HTTPVerbPost),
  16. "/api/users",
  17. &types.CreateUserRequest{
  18. Email: "test@test.it",
  19. Password: "somepassword",
  20. },
  21. )
  22. config := apitest.LoadConfig(t)
  23. handler := user.NewUserCreateHandler(
  24. config,
  25. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  26. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  27. )
  28. handler.ServeHTTP(rr, req)
  29. expUser := &types.CreateUserResponse{
  30. ID: 1,
  31. Email: "test@test.it",
  32. EmailVerified: false,
  33. }
  34. gotUser := &types.CreateUserResponse{}
  35. apitest.AssertResponseExpected(t, rr, expUser, gotUser)
  36. }
  37. func TestCreateUserBadEmail(t *testing.T) {
  38. req, rr := apitest.GetRequestAndRecorder(
  39. t,
  40. string(types.HTTPVerbPost),
  41. "/api/users",
  42. &types.CreateUserRequest{
  43. Email: "notanemail",
  44. Password: "somepassword",
  45. },
  46. )
  47. config := apitest.LoadConfig(t)
  48. handler := user.NewUserCreateHandler(
  49. config,
  50. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  51. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  52. )
  53. handler.ServeHTTP(rr, req)
  54. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  55. Error: fmt.Sprintf("validation failed on field 'Email' on condition 'email'"),
  56. })
  57. }
  58. func TestCreateUserMissingField(t *testing.T) {
  59. req, rr := apitest.GetRequestAndRecorder(
  60. t,
  61. string(types.HTTPVerbPost),
  62. "/api/users",
  63. &types.CreateUserRequest{
  64. Email: "test@test.it",
  65. },
  66. )
  67. config := apitest.LoadConfig(t)
  68. handler := user.NewUserCreateHandler(
  69. config,
  70. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  71. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  72. )
  73. handler.ServeHTTP(rr, req)
  74. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  75. Error: fmt.Sprintf("validation failed on field 'Password' on condition 'required'"),
  76. })
  77. }
  78. func TestCreateUserSameEmail(t *testing.T) {
  79. req, rr := apitest.GetRequestAndRecorder(
  80. t,
  81. string(types.HTTPVerbPost),
  82. "/api/users",
  83. &types.CreateUserRequest{
  84. Email: "test@test.it",
  85. Password: "somepassword",
  86. },
  87. )
  88. config := apitest.LoadConfig(t)
  89. // create the existing user
  90. apitest.CreateTestUser(t, config, true)
  91. handler := user.NewUserCreateHandler(
  92. config,
  93. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  94. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  95. )
  96. handler.ServeHTTP(rr, req)
  97. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  98. Error: fmt.Sprintf("email already taken"),
  99. })
  100. }
  101. func TestFailingCreateUserMethod(t *testing.T) {
  102. req, rr := apitest.GetRequestAndRecorder(
  103. t,
  104. string(types.HTTPVerbPost),
  105. "/api/users",
  106. &types.CreateUserRequest{
  107. Email: "test@test.it",
  108. Password: "somepassword",
  109. },
  110. )
  111. config := apitest.LoadConfig(t, test.CreateUserMethod)
  112. handler := user.NewUserCreateHandler(
  113. config,
  114. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  115. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  116. )
  117. handler.ServeHTTP(rr, req)
  118. apitest.AssertResponseInternalServerError(t, rr)
  119. }
  120. func TestFailingCreateSessionMethod(t *testing.T) {
  121. req, rr := apitest.GetRequestAndRecorder(
  122. t,
  123. string(types.HTTPVerbPost),
  124. "/api/users",
  125. &types.CreateUserRequest{
  126. Email: "test@test.it",
  127. Password: "somepassword",
  128. },
  129. )
  130. config := apitest.LoadConfig(t, test.CreateSessionMethod)
  131. handler := user.NewUserCreateHandler(
  132. config,
  133. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  134. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  135. )
  136. handler.ServeHTTP(rr, req)
  137. apitest.AssertResponseInternalServerError(t, rr)
  138. }