create_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. CapiProvisionerEnabled: true,
  39. SimplifiedViewEnabled: true,
  40. HelmValuesEnabled: false,
  41. EnvGroupEnabled: false,
  42. }
  43. gotProject := &types.CreateProjectResponse{}
  44. apitest.AssertResponseExpected(t, rr, expProject, gotProject)
  45. }
  46. func TestFailingDecoderValidator(t *testing.T) {
  47. req, rr := apitest.GetRequestAndRecorder(
  48. t,
  49. string(types.HTTPVerbPost),
  50. "/api/projects",
  51. &types.CreateProjectRequest{
  52. Name: "test-project",
  53. },
  54. )
  55. config := apitest.LoadConfig(t)
  56. user := apitest.CreateTestUser(t, config, true)
  57. req = apitest.WithAuthenticatedUser(t, req, user)
  58. handler := project.NewProjectCreateHandler(
  59. config,
  60. apitest.NewFailingDecoderValidator(config),
  61. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  62. )
  63. handler.ServeHTTP(rr, req)
  64. apitest.AssertResponseInternalServerError(t, rr)
  65. }
  66. func TestFailingCreateMethod(t *testing.T) {
  67. req, rr := apitest.GetRequestAndRecorder(
  68. t,
  69. string(types.HTTPVerbPost),
  70. "/api/projects",
  71. &types.CreateProjectRequest{
  72. Name: "test-project",
  73. },
  74. )
  75. config := apitest.LoadConfig(t, test.CreateProjectMethod)
  76. user := apitest.CreateTestUser(t, config, true)
  77. req = apitest.WithAuthenticatedUser(t, req, user)
  78. handler := project.NewProjectCreateHandler(
  79. config,
  80. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  81. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  82. )
  83. handler.ServeHTTP(rr, req)
  84. apitest.AssertResponseInternalServerError(t, rr)
  85. }
  86. func TestFailingCreateRoleMethod(t *testing.T) {
  87. req, rr := apitest.GetRequestAndRecorder(
  88. t,
  89. string(types.HTTPVerbPost),
  90. "/api/projects",
  91. &types.CreateProjectRequest{
  92. Name: "test-project",
  93. },
  94. )
  95. config := apitest.LoadConfig(t, test.CreateProjectRoleMethod)
  96. user := apitest.CreateTestUser(t, config, true)
  97. req = apitest.WithAuthenticatedUser(t, req, user)
  98. handler := project.NewProjectCreateHandler(
  99. config,
  100. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  101. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  102. )
  103. handler.ServeHTTP(rr, req)
  104. apitest.AssertResponseInternalServerError(t, rr)
  105. }
  106. func TestFailingReadMethod(t *testing.T) {
  107. req, rr := apitest.GetRequestAndRecorder(
  108. t,
  109. string(types.HTTPVerbPost),
  110. "/api/projects",
  111. &types.CreateProjectRequest{
  112. Name: "test-project",
  113. },
  114. )
  115. config := apitest.LoadConfig(t, test.ReadProjectMethod)
  116. user := apitest.CreateTestUser(t, config, true)
  117. req = apitest.WithAuthenticatedUser(t, req, user)
  118. handler := project.NewProjectCreateHandler(
  119. config,
  120. shared.NewDefaultRequestDecoderValidator(config.Logger, config.Alerter),
  121. shared.NewDefaultResultWriter(config.Logger, config.Alerter),
  122. )
  123. handler.ServeHTTP(rr, req)
  124. apitest.AssertResponseInternalServerError(t, rr)
  125. }