diff --git a/pages/live/index.html b/pages/live/index.html index b84a30d..3cf5d0a 100644 --- a/pages/live/index.html +++ b/pages/live/index.html @@ -23,13 +23,13 @@ Submit a Link - - - + + + - + diff --git a/public/live/index.html b/public/live/index.html index bf64212..8f038bc 100644 --- a/public/live/index.html +++ b/public/live/index.html @@ -48,13 +48,13 @@ Submit a Link - - - + + + - + diff --git a/tests/base_test.go b/tests/base_test.go index 02ba307..77d046f 100644 --- a/tests/base_test.go +++ b/tests/base_test.go @@ -2,8 +2,7 @@ package tests import ( "testing" - "github.com/stretchr/testify/require" - browser "github.com/chromedp/chromedp" + // "github.com/stretchr/testify/require" "zedshaw.games/webapp/data" sq "github.com/Masterminds/squirrel" ) @@ -14,71 +13,58 @@ func deleteTestUser(username string) { } func TestLogin(t *testing.T) { - require := require.New(t) deleteTestUser("testerzed") - - ctx, cancel := Setup(5); defer cancel() - - Run(require, ctx, - browser.Navigate(`http://127.0.0.1:5002/register/`), - browser.WaitVisible(`body > footer`), - browser.WaitVisible(`[data-testid="register-index-page"]`), - browser.SendKeys(`#username`, `testerzed`), - browser.SendKeys(`#email`, `zed@test.com`), - browser.SendKeys(`#password`, `iamdumb`), - browser.Click(`#register-submit`, browser.NodeVisible), - browser.WaitVisible(`body > footer`), - browser.WaitVisible(`[data-testid="login-index-page"]`)) - - Run(require, ctx, - browser.Navigate(`http://127.0.0.1:5002/login/`), - browser.WaitVisible(`body > footer`), - browser.WaitVisible(`[data-testid="login-index-page"]`), - browser.SendKeys(`#username`, `testerzed`), - browser.SendKeys(`#password`, `iamdumb`), - browser.Click(`#login-submit`, browser.NodeVisible), - browser.WaitVisible(`body > footer`), - browser.WaitVisible(`[data-testid="index-page"]`)) + z, cancel := Setup(t, 5) + defer cancel() + + z.GoTo("/register/", `[data-testid="register-index-page"]`) + z.TypeIn(`#username`, `testerzed`) + z.TypeIn(`#email`, `zed@test.com`) + z.TypeIn(`#password`, `iamdumbass`) + z.ClickOn(`#register-submit`) + z.WaitFor(`[data-testid="login-index-page"]`) + + z.GoTo("/login/", `[data-testid="login-index-page"]`) + z.TypeIn(`#username`, `testerzed`) + z.TypeIn(`#password`, `iamdumbass`) + z.ClickOn(`#login-submit`) + z.WaitFor(`[data-testid="index-page"]`) /// delete the user here deleteTestUser("testerzed") } - func TestStreamsPage(t *testing.T) { - require := require.New(t) + z, cancel := Setup(t, 2) + defer cancel() - ctx, cancel := Setup(2); - defer cancel(); - - GoTo(require, ctx, "/", `#streams`) - ClickOn(require, ctx, `#streams`) - WaitFor(require, ctx, `[data-testid="stream-index-page"]`) - ExpectText(require, ctx, `#page-title`, "Past Streams") + z.GoTo("/", `#streams`) + z.ClickOn(`#streams`) + z.WaitFor(`[data-testid="stream-index-page"]`) + z.ExpectText(`#page-title`, "Past Streams") } func TestLivePage(t *testing.T) { - require := require.New(t) - - ctx, cancel := Setup(2); + z, cancel := Setup(t, 2); defer cancel(); - GoTo(require, ctx, "/", `#live`) - ClickOn(require, ctx, `#live`) - WaitFor(require, ctx, `[data-testid="live-index-page"]`) + z.GoTo("/", `#live`) + z.ClickOn(`#live`) + z.WaitFor(`[data-testid="live-index-page"]`) + z.TypeIn("#url", "https://test.com/") + z.TypeIn("#description", "A test URL.") + z.ClickOn(`#submit`) } func TestGamePage(t *testing.T) { - require := require.New(t) - - ctx, cancel := Setup(2); + z, cancel := Setup(t, 2); defer cancel(); - GoTo(require, ctx, "/", `#game`) - ClickOn(require, ctx, `#game`) - WaitFor(require, ctx, `[data-testid="game-index-page"]`) - ExpectText(require, ctx, `#page-title`, "Zed's Trash Ass Games") - ClickOn(require, ctx, `[data-testid="game-link"]`) + z.GoTo("/", `#game`) + z.ClickOn(`#game`) + z.WaitFor(`[data-testid="game-index-page"]`) + z.ExpectText(`#page-title`, "Zed's Trash Ass Games") + z.ClickOn(`[data-testid="game-link"]`) } func TestMain(m *testing.M) { diff --git a/tests/tools.go b/tests/tools.go index 5abda7d..36168d8 100644 --- a/tests/tools.go +++ b/tests/tools.go @@ -1,60 +1,75 @@ package tests import ( - "context" - "log" - "time" - "runtime" - "github.com/stretchr/testify/require" - browser "github.com/chromedp/chromedp" + "testing" + "context" + "fmt" + "log" + "time" + "runtime" + "github.com/stretchr/testify/require" + browser "github.com/chromedp/chromedp" ) -func Setup(timeout time.Duration) (context.Context, context.CancelFunc) { - opts := append(browser.DefaultExecAllocatorOptions[:], - browser.Flag("headless", runtime.GOOS == "windows"),) - - ctx, cancel := browser.NewExecAllocator(context.Background(), opts...) - - ctx, _ = browser.NewContext(ctx, browser.WithLogf(log.Printf)) - - ctx, _ = context.WithTimeout(ctx, timeout * time.Second) - - return ctx, cancel +type ZedBrowser struct { + ctx context.Context + require *require.Assertions } -func ClickOn(require *require.Assertions, ctx context.Context, id string) { - err := browser.Run(ctx, browser.WaitVisible(id),) - require.NoError(err) +func (z *ZedBrowser) ClickOn(id string) { + err := browser.Run(z.ctx, browser.WaitVisible(id),) + z.require.NoError(err) - resp, err := browser.RunResponse(ctx, - browser.WaitVisible(id), - browser.Click(id)) + resp, err := browser.RunResponse(z.ctx, + browser.WaitVisible(id), + browser.Click(id)) - require.NoError(err) - require.Equal(resp.Status, int64(200)) + z.require.NoError(err) + z.require.Equal(resp.Status, int64(200)) } -func GoTo(require *require.Assertions, ctx context.Context, path string, expect string) { - err := browser.Run(ctx, - browser.Navigate(`http://127.0.0.1:5002`), +func (z *ZedBrowser) GoTo(path string, expect string) { + err := browser.Run(z.ctx, + browser.Navigate(fmt.Sprintf(`http://127.0.0.1:5002%s`, path)), browser.WaitVisible(`body > footer`), browser.WaitVisible(expect)) - require.NoError(err) + z.require.NoError(err) } -func WaitFor(require *require.Assertions, ctx context.Context, expect string) { - err := browser.Run(ctx, browser.WaitVisible(expect)) - require.NoError(err) +func (z *ZedBrowser) WaitFor(expect string) { + err := browser.Run(z.ctx, browser.WaitVisible(expect)) + z.require.NoError(err) } -func ExpectText(require *require.Assertions, ctx context.Context, target string, expect string) { - var extracted string - err := browser.Run(ctx, browser.Text(target, &extracted)) - require.NoError(err) - require.Equal(expect, extracted) +func (z *ZedBrowser) ExpectText(target string, expect string) { + var extracted string + err := browser.Run(z.ctx, browser.Text(target, &extracted)) + z.require.NoError(err) + z.require.Equal(expect, extracted) } -func Run(require *require.Assertions, ctx context.Context, actions ...browser.Action) { - err := browser.Run(ctx, actions...) - require.NoError(err) +func (z *ZedBrowser) Run(actions ...browser.Action) { + err := browser.Run(z.ctx, actions...) + z.require.NoError(err) +} + +func (z *ZedBrowser) TypeIn(id string, text string) { + z.WaitFor(id) + err := browser.Run(z.ctx, browser.SendKeys(id, text)) + z.require.NoError(err) +} + +func Setup(t *testing.T, timeout time.Duration) (*ZedBrowser, context.CancelFunc) { + opts := append(browser.DefaultExecAllocatorOptions[:], + browser.Flag("headless", runtime.GOOS == "windows"),) + + ctx, cancel := browser.NewExecAllocator(context.Background(), opts...) + + ctx, _ = browser.NewContext(ctx, browser.WithLogf(log.Printf)) + + ctx, _ = context.WithTimeout(ctx, timeout * time.Second) + + req := require.New(t) + + return &ZedBrowser{ctx, req}, cancel }