Versions in this module Expand all Collapse all v0 v0.1.8 May 21, 2026 v0.1.7 May 20, 2026 Changes in this version type WSMessageLogger + func (wl *WSMessageLogger) FindSentMessage(pattern string) (WSMessage, bool) + func (wl *WSMessageLogger) WaitForSentMessage(pattern string, timeout time.Duration) (WSMessage, error) v0.1.6 May 2, 2026 Changes in this version type WSMessageLogger + func RecordWSFrames(ctx context.Context) *WSMessageLogger v0.1.5 Apr 27, 2026 v0.1.4 Apr 26, 2026 v0.1.3 Apr 10, 2026 Changes in this version + func GetClientCSS() []byte + func ServeCSS(w http.ResponseWriter, r *http.Request) + func ValidatePicoCSS() chromedp.Action + func ValidateScreenshotWithLLM(t *testing.T, ctx context.Context, pageDescription string) + type VisualIssue struct + Category string + Description string + Severity string v0.1.2 Apr 5, 2026 v0.1.1 Apr 2, 2026 Changes in this version + func CleanupAllTestContainers() + func CleanupChromeContainers() + func CleanupTestContainers() + func GenerateTestAppName(prefix string) string + func GetAWSCredentials() (accessKeyID, secretAccessKey, bucket, region string, err error) + func GetChromeTestURL(port int) string + func GetClientLibraryJS() []byte + func GetFlyAPIToken() (string, error) + func GetFreePort() (port int, err error) + func HasCredentials(provider Provider) bool + func IsTestAppName(name string) bool + func RequireAWSCredentials(t *stdtesting.T) + func RequireCredentials(t *stdtesting.T, provider Provider) + func RequireFlyCredentials(t *stdtesting.T) + func ServeClientLibrary(w http.ResponseWriter, r *http.Request) + func SetupUpdateEventListener() chromedp.Action + func StartDockerChrome(t *testing.T, debugPort int) error + func StartTestServer(t *testing.T, mainPath string, port int) *exec.Cmd + func StopDockerChrome(t *testing.T, debugPort int) + func ValidateAppName(name string) error + func ValidateCredentials(provider Provider) error + func ValidateNoTemplateExpressions(selector string) chromedp.Action + func WaitFor(condition string, timeout time.Duration) chromedp.Action + func WaitForActionResponse(actionName string, timeout time.Duration) chromedp.Action + func WaitForCount(selector string, expectedCount int, timeout time.Duration) chromedp.Action + func WaitForMessageCount(expectedCount int, timeout time.Duration) chromedp.Action + func WaitForServer(t *testing.T, serverURL string, timeout time.Duration) + func WaitForText(selector, text string, timeout time.Duration) chromedp.Action + func WaitForUpdateEvent(actionName string, timeout time.Duration) chromedp.Action + func WaitForWebSocketReady(timeout time.Duration) chromedp.Action + type Assert struct + func NewAssert(test *E2ETest) *Assert + func (a *Assert) AttributeValue(selector, attribute, expectedValue string) error + func (a *Assert) ElementCount(selector string, expectedCount int) error + func (a *Assert) ElementExists(selector string) error + func (a *Assert) ElementHidden(selector string) error + func (a *Assert) ElementNotExists(selector string) error + func (a *Assert) ElementVisible(selector string) error + func (a *Assert) FormFieldValue(selector, expectedValue string) error + func (a *Assert) HasClass(selector, className string) error + func (a *Assert) NoConsoleErrors() error + func (a *Assert) NoTemplateErrors() error + func (a *Assert) NotHasClass(selector, className string) error + func (a *Assert) PageContains(text string) error + func (a *Assert) PageNotContains(text string) error + func (a *Assert) TableRowCount(expectedCount int) error + func (a *Assert) TextContains(selector, expectedSubstring string) error + func (a *Assert) TextContent(selector, expectedText string) error + func (a *Assert) WebSocketConnected() error + type CRUDTester struct + func NewCRUDTester(test *E2ETest, resourcePath string) *CRUDTester + func (c *CRUDTester) Create(fields ...Field) error + func (c *CRUDTester) Delete(recordID string) error + func (c *CRUDTester) Edit(recordID string, fields ...Field) error + func (c *CRUDTester) GetTableRows() ([]map[string]string, error) + func (c *CRUDTester) VerifyExists(searchText string) error + func (c *CRUDTester) VerifyNotExists(searchText string) error + type ChromeMode string + const ChromeDocker + const ChromeLocal + const ChromeShared + type ConsoleLog struct + Args []string + Message string + Type string + type ConsoleLogger struct + func NewConsoleLogger() *ConsoleLogger + func (cl *ConsoleLogger) Clear() + func (cl *ConsoleLogger) Count() int + func (cl *ConsoleLogger) CountByType(logType string) int + func (cl *ConsoleLogger) FilterByType(logType string) []ConsoleLog + func (cl *ConsoleLogger) FindLog(pattern string) (ConsoleLog, bool) + func (cl *ConsoleLogger) GetErrors() []ConsoleLog + func (cl *ConsoleLogger) GetLogs() []ConsoleLog + func (cl *ConsoleLogger) GetWarnings() []ConsoleLog + func (cl *ConsoleLogger) HasErrors() bool + func (cl *ConsoleLogger) HasWarnings() bool + func (cl *ConsoleLogger) Print() + func (cl *ConsoleLogger) PrintErrors() + func (cl *ConsoleLogger) Start(ctx context.Context) + type DatabaseAssert struct + func NewDatabaseAssert(test *HTTPTest) *DatabaseAssert + func (d *DatabaseAssert) RecordCount(t *testing.T, table string, expected int) + func (d *DatabaseAssert) RecordDeleted(t *testing.T, table string, id interface{}) + func (d *DatabaseAssert) RecordExists(t *testing.T, table string, conditions map[string]interface{}) + func (d *DatabaseAssert) RecordNotExists(t *testing.T, table string, conditions map[string]interface{}) + type DeploymentOptions struct + AppDir string + AppName string + Kit string + Provider Provider + Region string + Resources []string + WithAuth bool + WithLitestream bool + WithS3Backup bool + type DeploymentTest struct + AppDir string + AppName string + AppURL string + DockerClient *providers.DockerClient + Provider Provider + Region string + T *stdtesting.T + func SetupDeployment(t *stdtesting.T, opts *DeploymentOptions) *DeploymentTest + func (dt *DeploymentTest) AddCleanup(fn func() error) + func (dt *DeploymentTest) Cleanup() error + func (dt *DeploymentTest) Deploy() error + func (dt *DeploymentTest) VerifyHealth() error + func (dt *DeploymentTest) VerifyWebSocket() error + type DockerChromeContext struct + ChromePort int + Context context.Context + func SetupDockerChrome(t *testing.T, timeout time.Duration) (*DockerChromeContext, func()) + type E2ETest struct + AppDir string + AppPath string + Cancel context.CancelFunc + ChromeMode ChromeMode + ChromePort int + Console *ConsoleLogger + Context context.Context + Server *ServerLogger + ServerCmd *exec.Cmd + ServerPort int + T *testing.T + WebSocket *WSMessageLogger + func Setup(t *testing.T, opts *SetupOptions) *E2ETest + func (e *E2ETest) Cleanup() + func (e *E2ETest) Navigate(path string) error + func (e *E2ETest) URL(path string) string + type Field interface + Fill func(ctx context.Context) error + Name func() string + Selector func() string + func BoolField(name string, value bool) Field + func FloatField(name string, value float64) Field + func IntField(name string, value int64) Field + func SelectField(name, value string) Field + func TextAreaField(name, value string) Field + func TextField(name, value string) Field + type HTTPAssert struct + Response *HTTPResponse + func NewHTTPAssert(resp *HTTPResponse) *HTTPAssert + func (a *HTTPAssert) Contains(t *testing.T, text string) + func (a *HTTPAssert) ContainsAll(t *testing.T, texts ...string) + func (a *HTTPAssert) ContentType(t *testing.T, expected string) + func (a *HTTPAssert) ContentTypeHTML(t *testing.T) + func (a *HTTPAssert) ContentTypeJSON(t *testing.T) + func (a *HTTPAssert) ElementCount(t *testing.T, selector string, expected int) + func (a *HTTPAssert) ElementText(t *testing.T, selector string, expectedText string) + func (a *HTTPAssert) ElementTextContains(t *testing.T, selector string, expectedSubstring string) + func (a *HTTPAssert) FormFieldValue(t *testing.T, fieldName string, expectedValue string) + func (a *HTTPAssert) HasCSRFToken(t *testing.T) + func (a *HTTPAssert) HasElement(t *testing.T, selector string) + func (a *HTTPAssert) HasFormField(t *testing.T, fieldName string) + func (a *HTTPAssert) HasHeader(t *testing.T, name string) + func (a *HTTPAssert) HasNoElement(t *testing.T, selector string) + func (a *HTTPAssert) Header(t *testing.T, name, expected string) + func (a *HTTPAssert) Matches(t *testing.T, pattern string) + func (a *HTTPAssert) NoTemplateErrors(t *testing.T) + func (a *HTTPAssert) NotContains(t *testing.T, text string) + func (a *HTTPAssert) RedirectTo(t *testing.T, expectedLocation string) + func (a *HTTPAssert) StatusBadRequest(t *testing.T) + func (a *HTTPAssert) StatusCode(t *testing.T, expected int) + func (a *HTTPAssert) StatusForbidden(t *testing.T) + func (a *HTTPAssert) StatusNotFound(t *testing.T) + func (a *HTTPAssert) StatusOK(t *testing.T) + func (a *HTTPAssert) StatusRedirect(t *testing.T) + func (a *HTTPAssert) StatusServerError(t *testing.T) + func (a *HTTPAssert) StatusUnauthorized(t *testing.T) + func (a *HTTPAssert) TableRowCount(t *testing.T, expected int) + type HTTPResponse struct + Body []byte + func (r *HTTPResponse) FindTemplateErrors() []string + func (r *HTTPResponse) HasTemplateErrors() bool + func (r *HTTPResponse) String() string + type HTTPSetupOptions struct + AppDir string + AppPath string + DB *sql.DB + Port int + Timeout time.Duration + type HTTPTest struct + AppDir string + AppPath string + BaseURL string + Client *http.Client + DB *sql.DB + Port int + Server *ServerLogger + ServerCmd *exec.Cmd + T *testing.T + func SetupHTTP(t *testing.T, opts *HTTPSetupOptions) *HTTPTest + func (h *HTTPTest) Cleanup() + func (h *HTTPTest) ClearCookies() + func (h *HTTPTest) DBPath() string + func (h *HTTPTest) Delete(path string) *HTTPResponse + func (h *HTTPTest) ExtractCSRFToken(resp *HTTPResponse) string + func (h *HTTPTest) FollowRedirect(resp *HTTPResponse) *HTTPResponse + func (h *HTTPTest) FollowRedirects(resp *HTTPResponse) *HTTPResponse + func (h *HTTPTest) Get(path string) *HTTPResponse + func (h *HTTPTest) GetCookie(name string) string + func (h *HTTPTest) GetWithHeaders(path string, headers map[string]string) *HTTPResponse + func (h *HTTPTest) OnCleanup(fn func()) + func (h *HTTPTest) PostForm(path string, data url.Values) *HTTPResponse + func (h *HTTPTest) PostJSON(path string, data interface{}) *HTTPResponse + func (h *HTTPTest) PostMultipart(path string, fields map[string]string, files map[string][]byte) *HTTPResponse + func (h *HTTPTest) SetCookie(name, value string) + func (h *HTTPTest) SetDB(db *sql.DB) + func (h *HTTPTest) SubmitForm(resp *HTTPResponse, formSelector string, values map[string]string) *HTTPResponse + func (h *HTTPTest) URL(path string) string + func (h *HTTPTest) WaitForServer(timeout time.Duration) error + type ModalTester struct + func NewModalTester(test *E2ETest) *ModalTester + func (m *ModalTester) ClickButton(text string) error + func (m *ModalTester) ClickSubmit() error + func (m *ModalTester) Close() error + func (m *ModalTester) CloseByAction(action string) error + func (m *ModalTester) FillForm(fields ...Field) error + func (m *ModalTester) GetText(selector string) (string, error) + func (m *ModalTester) Open() error + func (m *ModalTester) OpenByAction(action string) error + func (m *ModalTester) VerifyHidden() error + func (m *ModalTester) VerifyText(selector, expectedText string) error + func (m *ModalTester) VerifyVisible() error + func (m *ModalTester) WaitForClose(timeout time.Duration) error + func (m *ModalTester) WaitForOpen(timeout time.Duration) error + func (m *ModalTester) WithCloseSelector(selector string) *ModalTester + func (m *ModalTester) WithModalSelector(selector string) *ModalTester + func (m *ModalTester) WithOpenSelector(selector string) *ModalTester + type Provider string + const ProviderDigitalOcean + const ProviderDocker + const ProviderFly + const ProviderKubernetes + type SafeBuffer struct + func NewSafeBuffer() *SafeBuffer + func (b *SafeBuffer) Bytes() []byte + func (b *SafeBuffer) Reset() + func (b *SafeBuffer) String() string + func (b *SafeBuffer) Write(p []byte) (int, error) + type ServerLogger struct + func NewServerLogger() *ServerLogger + func (sl *ServerLogger) Clear() + func (sl *ServerLogger) Count() int + func (sl *ServerLogger) CountMatching(pattern string) int + func (sl *ServerLogger) FindLog(pattern string) (string, bool) + func (sl *ServerLogger) FindLogs(pattern string) []string + func (sl *ServerLogger) GetLastN(n int) []string + func (sl *ServerLogger) GetLogs() []string + func (sl *ServerLogger) HasLog(pattern string) bool + func (sl *ServerLogger) Print() + func (sl *ServerLogger) PrintLast(n int) + func (sl *ServerLogger) PrintMatching(pattern string) + func (sl *ServerLogger) Start() + func (sl *ServerLogger) Stop() + func (sl *ServerLogger) Writer() io.Writer + type SetupOptions struct + AppPath string + CaptureConsole bool + ChromeMode ChromeMode + ChromePath string + Port int + Timeout time.Duration + type SmokeTestOptions struct + MaxRetries int + RetryDelay time.Duration + SkipBrowser bool + Timeout time.Duration + func DefaultSmokeTestOptions() *SmokeTestOptions + type SmokeTestResult struct + Duration time.Duration + Error error + Name string + Passed bool + type SmokeTestSuite struct + AppURL string + Results []SmokeTestResult + TotalDuration time.Duration + func RunSmokeTests(appURL string, opts *SmokeTestOptions) (*SmokeTestSuite, error) + func (s *SmokeTestSuite) AllPassed() bool + func (s *SmokeTestSuite) PrintResults() + type TestCredentials struct + AWSAccessKeyID string + AWSSecretAccessKey string + DOAPIToken string + FlyAPIToken string + KubeConfig string + S3Bucket string + S3Region string + func LoadTestCredentials() (*TestCredentials, error) + type WSMessage struct + Data string + Direction string + Parsed map[string]interface{} + Timestamp time.Time + Type string + type WSMessageLogger struct + func NewWSMessageLogger() *WSMessageLogger + func (wl *WSMessageLogger) Clear() + func (wl *WSMessageLogger) Count() int + func (wl *WSMessageLogger) CountByDirection(direction string) int + func (wl *WSMessageLogger) CountMatching(pattern string) int + func (wl *WSMessageLogger) FindMessage(pattern string) (WSMessage, bool) + func (wl *WSMessageLogger) FindMessages(pattern string) []WSMessage + func (wl *WSMessageLogger) GetLastN(n int) []WSMessage + func (wl *WSMessageLogger) GetMessages() []WSMessage + func (wl *WSMessageLogger) GetMessagesSince(since time.Time) []WSMessage + func (wl *WSMessageLogger) GetReceived() []WSMessage + func (wl *WSMessageLogger) GetSent() []WSMessage + func (wl *WSMessageLogger) HasMessage(pattern string) bool + func (wl *WSMessageLogger) Print() + func (wl *WSMessageLogger) PrintLast(n int) + func (wl *WSMessageLogger) PrintMatching(pattern string) + func (wl *WSMessageLogger) Start(ctx context.Context) + func (wl *WSMessageLogger) WaitForMessage(pattern string, timeout time.Duration) (WSMessage, error)