helpers_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. sessionstore "github.com/porter-dev/porter/internal/auth"
  15. vr "github.com/porter-dev/porter/internal/validator"
  16. )
  17. type tester struct {
  18. app *api.App
  19. repo *repository.Repository
  20. store *sessionstore.PGStore
  21. router *chi.Mux
  22. req *http.Request
  23. rr *httptest.ResponseRecorder
  24. cookie *http.Cookie
  25. }
  26. func (t *tester) execute() {
  27. t.router.ServeHTTP(t.rr, t.req)
  28. }
  29. func (t *tester) reset() {
  30. t.rr = httptest.NewRecorder()
  31. t.req = nil
  32. }
  33. func (t *tester) createUserSession(email string, pw string) {
  34. req, _ := http.NewRequest(
  35. "POST",
  36. "/api/users",
  37. strings.NewReader(`{"email":"`+email+`","password":"`+pw+`"}`),
  38. )
  39. t.req = req
  40. t.execute()
  41. if cookies := t.rr.Result().Cookies(); len(cookies) > 0 {
  42. t.cookie = cookies[0]
  43. }
  44. t.reset()
  45. }
  46. func newTester(canQuery bool) *tester {
  47. appConf := config.Conf{
  48. Debug: true,
  49. Server: config.ServerConf{
  50. Port: 8080,
  51. CookieName: "porter",
  52. CookieSecret: []byte("secret"),
  53. TimeoutRead: time.Second * 5,
  54. TimeoutWrite: time.Second * 10,
  55. TimeoutIdle: time.Second * 15,
  56. },
  57. // unimportant here
  58. Db: config.DBConf{},
  59. // set the helm config to testing
  60. K8s: config.K8sConf{
  61. IsTesting: true,
  62. },
  63. }
  64. logger := lr.NewConsole(appConf.Debug)
  65. validator := vr.New()
  66. repo := test.NewRepository(canQuery)
  67. store, _ := sessionstore.NewStore(repo, appConf.Server)
  68. app := api.New(logger, nil, repo, validator, store, appConf.Server.CookieName, true, nil)
  69. r := router.New(app, store, appConf.Server.CookieName, appConf.Server.StaticFilePath, repo)
  70. return &tester{
  71. app: app,
  72. repo: repo,
  73. store: store,
  74. router: r,
  75. req: nil,
  76. rr: httptest.NewRecorder(),
  77. cookie: nil,
  78. }
  79. }