create_test.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package user_test
  2. import (
  3. "net/http"
  4. "testing"
  5. "github.com/porter-dev/porter/api/server/handlers/user"
  6. "github.com/porter-dev/porter/api/server/shared"
  7. "github.com/porter-dev/porter/api/server/shared/apitest"
  8. "github.com/porter-dev/porter/api/types"
  9. "github.com/porter-dev/porter/internal/repository/test"
  10. )
  11. func TestCreateUserSuccessful(t *testing.T) {
  12. req, rr := apitest.GetRequestAndRecorder(
  13. t,
  14. string(types.HTTPVerbPost),
  15. "/api/users",
  16. &types.CreateUserRequest{
  17. FirstName: "Mister",
  18. LastName: "Porter",
  19. CompanyName: "Porter Technologies, Inc.",
  20. Email: "mrp@porter.run",
  21. Password: "somepassword",
  22. },
  23. )
  24. config := apitest.LoadConfig(t)
  25. handler := user.NewUserCreateHandler(
  26. config,
  27. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  28. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  29. )
  30. handler.ServeHTTP(rr, req)
  31. expUser := &types.CreateUserResponse{
  32. ID: 1,
  33. FirstName: "Mister",
  34. LastName: "Porter",
  35. CompanyName: "Porter Technologies, Inc.",
  36. Email: "mrp@porter.run",
  37. EmailVerified: false,
  38. }
  39. gotUser := &types.CreateUserResponse{}
  40. apitest.AssertResponseExpected(t, rr, expUser, gotUser)
  41. }
  42. func TestCreateUserBadEmail(t *testing.T) {
  43. req, rr := apitest.GetRequestAndRecorder(
  44. t,
  45. string(types.HTTPVerbPost),
  46. "/api/users",
  47. &types.CreateUserRequest{
  48. FirstName: "Mister",
  49. LastName: "Porter",
  50. CompanyName: "Porter Technologies, Inc.",
  51. Email: "notanemail",
  52. Password: "somepassword",
  53. },
  54. )
  55. config := apitest.LoadConfig(t)
  56. handler := user.NewUserCreateHandler(
  57. config,
  58. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  59. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  60. )
  61. handler.ServeHTTP(rr, req)
  62. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  63. Error: "validation failed on field 'Email' on condition 'email'",
  64. })
  65. }
  66. func TestCreateUserMissingField(t *testing.T) {
  67. req, rr := apitest.GetRequestAndRecorder(
  68. t,
  69. string(types.HTTPVerbPost),
  70. "/api/users",
  71. &types.CreateUserRequest{
  72. FirstName: "Mister",
  73. LastName: "Porter",
  74. CompanyName: "Porter Technologies, Inc.",
  75. Email: "mrp@porter.run",
  76. },
  77. )
  78. config := apitest.LoadConfig(t)
  79. handler := user.NewUserCreateHandler(
  80. config,
  81. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  82. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  83. )
  84. handler.ServeHTTP(rr, req)
  85. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  86. Error: "validation failed on field 'Password' on condition 'required'",
  87. })
  88. }
  89. func TestCreateUserSameEmail(t *testing.T) {
  90. req, rr := apitest.GetRequestAndRecorder(
  91. t,
  92. string(types.HTTPVerbPost),
  93. "/api/users",
  94. &types.CreateUserRequest{
  95. FirstName: "Mister",
  96. LastName: "Porter",
  97. CompanyName: "Porter Technologies, Inc.",
  98. Email: "mrp@porter.run",
  99. Password: "somepassword",
  100. },
  101. )
  102. config := apitest.LoadConfig(t)
  103. // create the existing user
  104. apitest.CreateTestUser(t, config, true)
  105. handler := user.NewUserCreateHandler(
  106. config,
  107. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  108. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  109. )
  110. handler.ServeHTTP(rr, req)
  111. apitest.AssertResponseError(t, rr, http.StatusBadRequest, &types.ExternalError{
  112. Error: "email already taken",
  113. })
  114. }
  115. func TestFailingCreateUserMethod(t *testing.T) {
  116. req, rr := apitest.GetRequestAndRecorder(
  117. t,
  118. string(types.HTTPVerbPost),
  119. "/api/users",
  120. &types.CreateUserRequest{
  121. FirstName: "Mister",
  122. LastName: "Porter",
  123. CompanyName: "Porter Technologies, Inc.",
  124. Email: "mrp@porter.run",
  125. Password: "somepassword",
  126. },
  127. )
  128. config := apitest.LoadConfig(t, test.CreateUserMethod)
  129. handler := user.NewUserCreateHandler(
  130. config,
  131. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  132. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  133. )
  134. handler.ServeHTTP(rr, req)
  135. apitest.AssertResponseInternalServerError(t, rr)
  136. }
  137. func TestFailingCreateSessionMethod(t *testing.T) {
  138. req, rr := apitest.GetRequestAndRecorder(
  139. t,
  140. string(types.HTTPVerbPost),
  141. "/api/users",
  142. &types.CreateUserRequest{
  143. FirstName: "Mister",
  144. LastName: "Porter",
  145. CompanyName: "Porter Technologies, Inc.",
  146. Email: "mrp@porter.run",
  147. Password: "somepassword",
  148. },
  149. )
  150. config := apitest.LoadConfig(t, test.CreateSessionMethod)
  151. handler := user.NewUserCreateHandler(
  152. config,
  153. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  154. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  155. )
  156. handler.ServeHTTP(rr, req)
  157. apitest.AssertResponseInternalServerError(t, rr)
  158. }