create_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package project_test
  2. import (
  3. "testing"
  4. "github.com/porter-dev/porter/api/server/handlers/project"
  5. "github.com/porter-dev/porter/api/server/shared"
  6. "github.com/porter-dev/porter/api/server/shared/apitest"
  7. "github.com/porter-dev/porter/api/types"
  8. "github.com/porter-dev/porter/internal/repository/test"
  9. )
  10. func TestCreateProjectSuccessful(t *testing.T) {
  11. req, rr := apitest.GetRequestAndRecorder(
  12. t,
  13. string(types.HTTPVerbPost),
  14. "/api/projects",
  15. &types.CreateProjectRequest{
  16. Name: "test-project",
  17. },
  18. )
  19. config := apitest.LoadConfig(t)
  20. user := apitest.CreateTestUser(t, config, true)
  21. req = apitest.WithAuthenticatedUser(t, req, user)
  22. handler := project.NewProjectCreateHandler(
  23. config,
  24. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  25. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  26. )
  27. handler.ServeHTTP(rr, req)
  28. expProject := &types.CreateProjectResponse{
  29. ID: 1,
  30. Name: "test-project",
  31. Roles: []*types.Role{
  32. {
  33. Kind: types.RoleAdmin,
  34. UserID: user.ID,
  35. ProjectID: 1,
  36. },
  37. },
  38. }
  39. gotProject := &types.CreateProjectResponse{}
  40. apitest.AssertResponseExpected(t, rr, expProject, gotProject)
  41. }
  42. func TestFailingDecoderValidator(t *testing.T) {
  43. req, rr := apitest.GetRequestAndRecorder(
  44. t,
  45. string(types.HTTPVerbPost),
  46. "/api/projects",
  47. &types.CreateProjectRequest{
  48. Name: "test-project",
  49. },
  50. )
  51. config := apitest.LoadConfig(t)
  52. user := apitest.CreateTestUser(t, config, true)
  53. req = apitest.WithAuthenticatedUser(t, req, user)
  54. handler := project.NewProjectCreateHandler(
  55. config,
  56. apitest.NewFailingDecoderValidator(config),
  57. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  58. )
  59. handler.ServeHTTP(rr, req)
  60. apitest.AssertResponseInternalServerError(t, rr)
  61. }
  62. func TestFailingCreateMethod(t *testing.T) {
  63. req, rr := apitest.GetRequestAndRecorder(
  64. t,
  65. string(types.HTTPVerbPost),
  66. "/api/projects",
  67. &types.CreateProjectRequest{
  68. Name: "test-project",
  69. },
  70. )
  71. config := apitest.LoadConfig(t, test.CreateProjectMethod)
  72. user := apitest.CreateTestUser(t, config, true)
  73. req = apitest.WithAuthenticatedUser(t, req, user)
  74. handler := project.NewProjectCreateHandler(
  75. config,
  76. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  77. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  78. )
  79. handler.ServeHTTP(rr, req)
  80. apitest.AssertResponseInternalServerError(t, rr)
  81. }
  82. func TestFailingCreateRoleMethod(t *testing.T) {
  83. req, rr := apitest.GetRequestAndRecorder(
  84. t,
  85. string(types.HTTPVerbPost),
  86. "/api/projects",
  87. &types.CreateProjectRequest{
  88. Name: "test-project",
  89. },
  90. )
  91. config := apitest.LoadConfig(t, test.CreateProjectRoleMethod)
  92. user := apitest.CreateTestUser(t, config, true)
  93. req = apitest.WithAuthenticatedUser(t, req, user)
  94. handler := project.NewProjectCreateHandler(
  95. config,
  96. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  97. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  98. )
  99. handler.ServeHTTP(rr, req)
  100. apitest.AssertResponseInternalServerError(t, rr)
  101. }
  102. func TestFailingReadMethod(t *testing.T) {
  103. req, rr := apitest.GetRequestAndRecorder(
  104. t,
  105. string(types.HTTPVerbPost),
  106. "/api/projects",
  107. &types.CreateProjectRequest{
  108. Name: "test-project",
  109. },
  110. )
  111. config := apitest.LoadConfig(t, test.ReadProjectMethod)
  112. user := apitest.CreateTestUser(t, config, true)
  113. req = apitest.WithAuthenticatedUser(t, req, user)
  114. handler := project.NewProjectCreateHandler(
  115. config,
  116. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  117. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  118. )
  119. handler.ServeHTTP(rr, req)
  120. apitest.AssertResponseInternalServerError(t, rr)
  121. }