create_test.go 3.7 KB

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