package tests import ( "context" "fmt" "math/rand" "net/http" "net/http/httptest" "strings" "testing" "time" "github.com/mikestefanello/pagoda/ent" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/gorilla/sessions" "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" ) // NewContext creates a new Echo context for tests using an HTTP test request and response recorder func NewContext(e *echo.Echo, url string) (echo.Context, *httptest.ResponseRecorder) { req := httptest.NewRequest(http.MethodGet, url, strings.NewReader("")) rec := httptest.NewRecorder() return e.NewContext(req, rec), rec } // InitSession initializes a session for a given Echo context func InitSession(ctx echo.Context) { mw := session.Middleware(sessions.NewCookieStore([]byte("secret"))) _ = ExecuteMiddleware(ctx, mw) } // ExecuteMiddleware executes a middleware function on a given Echo context func ExecuteMiddleware(ctx echo.Context, mw echo.MiddlewareFunc) error { handler := mw(func(c echo.Context) error { return nil }) return handler(ctx) } // AssertHTTPErrorCode asserts an HTTP status code on a given Echo HTTP error func AssertHTTPErrorCode(t *testing.T, err error, code int) { httpError, ok := err.(*echo.HTTPError) require.True(t, ok) assert.Equal(t, code, httpError.Code) } // CreateUser creates a random user entity func CreateUser(orm *ent.Client) (*ent.User, error) { seed := fmt.Sprintf("%d-%d", time.Now().UnixMilli(), rand.Intn(1000000)) return orm.User. Create(). SetEmail(fmt.Sprintf("testuser-%s@localhost.localhost", seed)). SetPassword("password"). SetName(fmt.Sprintf("Test User %s", seed)). Save(context.Background()) }