helpers_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package api_test
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "strings"
  6. "time"
  7. "github.com/go-chi/chi"
  8. "github.com/porter-dev/porter/internal/config"
  9. "github.com/porter-dev/porter/internal/helm"
  10. "github.com/porter-dev/porter/internal/kubernetes"
  11. lr "github.com/porter-dev/porter/internal/logger"
  12. "github.com/porter-dev/porter/internal/repository"
  13. memory "github.com/porter-dev/porter/internal/repository/memory"
  14. "github.com/porter-dev/porter/server/api"
  15. "github.com/porter-dev/porter/server/router"
  16. "github.com/porter-dev/porter/internal/auth/sessionstore"
  17. )
  18. type tester struct {
  19. app *api.App
  20. repo *repository.Repository
  21. store *sessionstore.PGStore
  22. router *chi.Mux
  23. req *http.Request
  24. rr *httptest.ResponseRecorder
  25. cookie *http.Cookie
  26. }
  27. func (t *tester) execute() {
  28. t.router.ServeHTTP(t.rr, t.req)
  29. }
  30. func (t *tester) reset() {
  31. t.rr = httptest.NewRecorder()
  32. t.req = nil
  33. }
  34. func (t *tester) createUserSession(email string, pw string) {
  35. req, err := http.NewRequest(
  36. "POST",
  37. "/api/users",
  38. strings.NewReader(`{"email":"`+email+`","password":"`+pw+`"}`),
  39. )
  40. if err != nil {
  41. panic(err)
  42. }
  43. t.req = req
  44. t.execute()
  45. if cookies := t.rr.Result().Cookies(); len(cookies) > 0 {
  46. t.cookie = cookies[0]
  47. }
  48. t.reset()
  49. }
  50. func newTester(canQuery bool) *tester {
  51. appConf := config.Conf{
  52. Debug: true,
  53. Server: config.ServerConf{
  54. Port: 8080,
  55. CookieName: "porter",
  56. CookieSecrets: []string{"secret"},
  57. TimeoutRead: time.Second * 5,
  58. TimeoutWrite: time.Second * 10,
  59. TimeoutIdle: time.Second * 15,
  60. IsTesting: true,
  61. TokenGeneratorSecret: "secret",
  62. BasicLoginEnabled: true,
  63. },
  64. // unimportant here
  65. Db: config.DBConf{},
  66. // set the helm config to testing
  67. K8s: config.K8sConf{
  68. IsTesting: true,
  69. },
  70. }
  71. logger := lr.NewConsole(appConf.Debug)
  72. repo := memory.NewRepository(canQuery)
  73. store, _ := sessionstore.NewStore(repo, appConf.Server)
  74. k8sAgent := kubernetes.GetAgentTesting()
  75. app, _ := api.New(&api.AppConfig{
  76. Logger: logger,
  77. Repository: repo,
  78. ServerConf: appConf.Server,
  79. TestAgents: &api.TestAgents{
  80. HelmAgent: helm.GetAgentTesting(&helm.Form{}, nil, logger, k8sAgent),
  81. HelmTestStorageDriver: helm.StorageMap["memory"](nil, nil, ""),
  82. K8sAgent: k8sAgent,
  83. },
  84. })
  85. r := router.New(app)
  86. return &tester{
  87. app: app,
  88. repo: repo,
  89. store: store,
  90. router: r,
  91. req: nil,
  92. rr: httptest.NewRecorder(),
  93. cookie: nil,
  94. }
  95. }