helpers_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. lr "github.com/porter-dev/porter/internal/logger"
  10. "github.com/porter-dev/porter/internal/repository"
  11. "github.com/porter-dev/porter/internal/repository/test"
  12. "github.com/porter-dev/porter/server/api"
  13. "github.com/porter-dev/porter/server/router"
  14. "helm.sh/helm/v3/pkg/storage"
  15. sessionstore "github.com/porter-dev/porter/internal/auth"
  16. vr "github.com/porter-dev/porter/internal/validator"
  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, _ := http.NewRequest(
  36. "POST",
  37. "/api/users",
  38. strings.NewReader(`{"email":"`+email+`","password":"`+pw+`"}`),
  39. )
  40. t.req = req
  41. t.execute()
  42. if cookies := t.rr.Result().Cookies(); len(cookies) > 0 {
  43. t.cookie = cookies[0]
  44. }
  45. t.reset()
  46. }
  47. func newTester(canQuery bool, storage *storage.Storage) *tester {
  48. appConf := config.Conf{
  49. Debug: true,
  50. Server: config.ServerConf{
  51. Port: 8080,
  52. CookieName: "porter",
  53. CookieSecret: []byte("secret"),
  54. TimeoutRead: time.Second * 5,
  55. TimeoutWrite: time.Second * 10,
  56. TimeoutIdle: time.Second * 15,
  57. },
  58. // unimportant here
  59. Db: config.DBConf{},
  60. // set the helm config to testing
  61. Helm: config.HelmGlobalConf{
  62. IsTesting: true,
  63. },
  64. }
  65. logger := lr.NewConsole(appConf.Debug)
  66. validator := vr.New()
  67. repo := test.NewRepository(canQuery)
  68. store, _ := sessionstore.NewStore(repo, appConf.Server)
  69. app := api.New(logger, repo, validator, store, &appConf.Helm, appConf.Server.CookieName)
  70. app.HelmTestStorageDriver = storage
  71. r := router.New(app, store, appConf.Server.CookieName)
  72. return &tester{
  73. app: app,
  74. repo: repo,
  75. store: store,
  76. router: r,
  77. req: nil,
  78. rr: httptest.NewRecorder(),
  79. cookie: nil,
  80. }
  81. }