Needed work for the test suite to start working again.

master
Zed A. Shaw 3 weeks ago
parent 5ff799f5e7
commit 7f304f9950
  1. 11
      Makefile
  2. 7
      admin/table/db.go
  3. 6
      auth/handlers.go
  4. 13
      common/web.go
  5. 2
      config/settings.go
  6. 2
      config_example.json
  7. 2
      main.go
  8. 28
      tests/admin_test.go
  9. 16
      tests/admin_ui_test.go
  10. 2
      tests/base_test.go
  11. 13
      tests/tools.go

@ -12,17 +12,16 @@ cmds:
go build -o bin/fgen ./tools/cmd/fgen go build -o bin/fgen ./tools/cmd/fgen
go build -o bin/qmgr ./tools/cmd/qmgr go build -o bin/qmgr ./tools/cmd/qmgr
go build -o bin/mailer ./tools/cmd/mailer go build -o bin/mailer ./tools/cmd/mailer
go test MY/webapp/tests -c -o bin/
site: site:
go tool ssgod go tool ssgod
test: site test: cmds site
go test MY/webapp/tests -c ./bin/tests.test
./tests.test
test_only: test_only: cmds site
go test . -c -o ./bin/tests.test -test.run $(TEST)
./tests.test -test.run TestSomePage
migrate_up: migrate_up:
goose sqlite3 db.sqlite3 -dir migrations up goose sqlite3 db.sqlite3 -dir migrations up

@ -52,7 +52,12 @@ func SelectTable(table string, limit uint64, page uint64) ([]any, error) {
var results []any var results []any
the_type := data.Models()[table] the_type := data.Models()[table]
sql_query, args, err := sq.Select("*").Limit(limit).Offset(limit * page).From(table).ToSql() sql_query, args, err := sq.Select("*").
Limit(limit).
Offset(limit * page).
From(table).
ToSql()
if err != nil { return results, err } if err != nil { return results, err }
rows, err := data.DB.Queryx(sql_query, args...) rows, err := data.DB.Queryx(sql_query, args...)

@ -5,6 +5,7 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
sq "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel"
"fmt"
"MY/webapp/data" "MY/webapp/data"
. "MY/webapp/common" . "MY/webapp/common"
) )
@ -46,7 +47,10 @@ func PostApiLogin(c *fiber.Ctx) error {
if(err != nil) { return IfErrNil(err, c) } if(err != nil) { return IfErrNil(err, c) }
pass_good, err := LoginUser(&user, login) pass_good, err := LoginUser(&user, login)
if err != nil { return IfErrNil(err, c) } if err != nil {
fmt.Println("!!!!!!!!!!!!!!! YOU SUCK, make this show a form/login error.")
return c.Redirect("/login/")
}
if pass_good { if pass_good {
sess, err := STORE.Get(c) sess, err := STORE.Get(c)

@ -11,12 +11,18 @@ import (
var STORE *session.Store var STORE *session.Store
func GenPageId(path string) string {
return strings.ReplaceAll(path, "/", "-") + "-page"
}
func AddAuthedPage(app *fiber.App, must_admin bool, url string, view string) { func AddAuthedPage(app *fiber.App, must_admin bool, url string, view string) {
handler := func(c *fiber.Ctx) error { handler := func(c *fiber.Ctx) error {
_, err := AuthCheck(c, must_admin) _, err := AuthCheck(c, must_admin)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
params := c.AllParams()
params["PageId"] = GenPageId(url)
return c.Render(view, c.AllParams()) return c.Render(view, params)
} }
app.Get(url, handler) app.Get(url, handler)
@ -24,6 +30,9 @@ func AddAuthedPage(app *fiber.App, must_admin bool, url string, view string) {
func AddPage(app *fiber.App, url string, view string) { func AddPage(app *fiber.App, url string, view string) {
handler := func(c *fiber.Ctx) error { handler := func(c *fiber.Ctx) error {
params := c.AllParams()
params["PageId"] = GenPageId(url)
return c.Render(view, c.AllParams()) return c.Render(view, c.AllParams())
} }
@ -31,7 +40,7 @@ func AddPage(app *fiber.App, url string, view string) {
} }
func Page(path string) (func(c *fiber.Ctx) error) { func Page(path string) (func(c *fiber.Ctx) error) {
page_id := strings.ReplaceAll(path, "/", "-") + "-page" page_id := GenPageId(path)
return func (c *fiber.Ctx) error { return func (c *fiber.Ctx) error {
return c.Render(path, fiber.Map{"PageId": page_id}) return c.Render(path, fiber.Map{"PageId": page_id})

@ -11,7 +11,7 @@ type config struct {
Admin string Admin string
Views string Views string
Layouts string Layouts string
Port string HostPort string
} }
Database struct { Database struct {
Driver string Driver string

@ -3,7 +3,7 @@
"Admin": "admin", "Admin": "admin",
"Views": "./views", "Views": "./views",
"Layouts": "layouts/main", "Layouts": "layouts/main",
"Port": ":7001" "HostPort": ":7001"
}, },
"Database": { "Database": {
"Driver": "sqlite3", "Driver": "sqlite3",

@ -55,7 +55,7 @@ func main() {
// this sets up graceful shutdown // this sets up graceful shutdown
go func() { go func() {
if err := app.Listen(config.Settings.Server.Port); err != nil { if err := app.Listen(config.Settings.Server.HostPort); err != nil {
log.Panic(err) log.Panic(err)
} }
}() }()

@ -3,10 +3,11 @@ package tests
import ( import (
"testing" "testing"
"fmt" "fmt"
"strings"
"reflect" "reflect"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"MY/webapp/data" "MY/webapp/data"
"MY/webapp/admin" admin "MY/webapp/admin/table"
sq "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel"
) )
@ -16,11 +17,11 @@ func TestAdminIndexPage(t *testing.T) {
table := "user" table := "user"
model := models[table] model := models[table]
fmt.Printf("\n------\ntable=%s; model=%s\n", table, model.Name())
fields := reflect.VisibleFields(model) fields := reflect.VisibleFields(model)
for _, field := range fields { for _, field := range fields {
fmt.Println("\t", field.Name, field.Type, field.Tag) assert.NotEqual(field.Name, "")
assert.NotEqual(field.Tag, "")
} }
for i := 0; i < 87; i++ { for i := 0; i < 87; i++ {
@ -37,30 +38,30 @@ func TestAdminIndexPage(t *testing.T) {
assert.NoError(err) assert.NoError(err)
id, count, err := admin.Insert(table, val) id, count, err := admin.Insert(table, val)
assert.Equal(count, 1) assert.Equal(count, int64(1))
assert.NotEqual(id, 0) assert.NotEqual(id, int64(0))
assert.NoError(err, email) assert.NoError(err, email)
} }
all_rows, err := admin.SelectTable(table, model, 20, 20 * 3) all_rows, err := admin.SelectTable(table, 20, 2)
assert.NoError(err) assert.NoError(err)
for i, row := range all_rows { fmt.Println("row", i, row) }
assert.Equal(20, len(all_rows)) assert.Equal(20, len(all_rows))
first_row := all_rows[0].(*data.User) first_row := all_rows[0].(*data.User)
result, err := admin.Get(table, model, int64(first_row.Id)) result, err := admin.Get(table, int64(first_row.Id))
if err != nil { fmt.Println("ERROR", err) } if err != nil { fmt.Println("ERROR", err) }
fmt.Println("TABLE: ", result)
id := result.FieldByName("Id") id := result.FieldByName("Id")
result, err = admin.Get(table, model, id.Int()) result, err = admin.Get(table, id.Int())
assert.NoError(err) assert.NoError(err)
fmt.Println("BEFORE: ", result) username := result.FieldByName("Username").String()
// only remove test users
if strings.HasPrefix(username, "test") {
result.FieldByName("Username").SetString("joeblow") result.FieldByName("Username").SetString("joeblow")
result.FieldByName("Email").SetString("what@what.com") result.FieldByName("Email").SetString("what@what.com")
fmt.Println("AFTER: ", result)
err = admin.Update(table, result) err = admin.Update(table, result)
assert.NoError(err, ) assert.NoError(err, )
@ -68,3 +69,4 @@ func TestAdminIndexPage(t *testing.T) {
err = admin.Delete(table, id.Int()) err = admin.Delete(table, id.Int())
assert.NoError(err) assert.NoError(err)
} }
}

@ -2,14 +2,26 @@ package tests
import ( import (
"testing" "testing"
"time"
// "github.com/stretchr/testify/require" // "github.com/stretchr/testify/require"
// "MY/webapp/data" // "MY/webapp/data"
// sq "github.com/Masterminds/squirrel" // sq "github.com/Masterminds/squirrel"
) )
func TestTableListing(t *testing.T) { func TestTableListing(t *testing.T) {
z, cancel := Setup(t, 2); z, cancel := Setup(t, 2 * time.Second);
defer cancel(); defer cancel();
z.GoTo("/admin/table", `[data-testid="live-index-page"]`) // confirm redirect if not logged in
z.GoTo("/admin/table/", `[data-testid="index-page"]`)
// now log in and go to admin
z.GoTo("/login/", `[data-testid="login-index-page"]`)
z.TypeIn(`#username`, `admin`)
z.TypeIn(`#password`, `testing123`)
z.ClickOn(`#login-submit`)
z.WaitFor(`[data-testid="index-page"]`)
z.GoTo("/admin/table/", `[data-testid="admin-table--page"]`)
} }

@ -14,7 +14,7 @@ func deleteTestUser(username string) {
func TestLogin(t *testing.T) { func TestLogin(t *testing.T) {
deleteTestUser("testerzed") deleteTestUser("testerzed")
z, cancel := Setup(t, 5) z, cancel := Setup(t, 5000)
defer cancel() defer cancel()
z.GoTo("/register/", `[data-testid="register-index-page"]`) z.GoTo("/register/", `[data-testid="register-index-page"]`)

@ -9,8 +9,13 @@ import (
"runtime" "runtime"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
browser "github.com/chromedp/chromedp" browser "github.com/chromedp/chromedp"
"MY/webapp/config"
) )
func init() {
config.Load("config.json")
}
type ZedBrowser struct { type ZedBrowser struct {
ctx context.Context ctx context.Context
require *require.Assertions require *require.Assertions
@ -25,12 +30,16 @@ func (z *ZedBrowser) ClickOn(id string) {
browser.Click(id)) browser.Click(id))
z.require.NoError(err) z.require.NoError(err)
z.require.Equal(resp.Status, int64(200)) z.require.Equal(int64(200), resp.Status)
} }
func (z *ZedBrowser) GoTo(path string, expect string) { func (z *ZedBrowser) GoTo(path string, expect string) {
url := fmt.Sprintf(`http://%s%s`, config.Settings.Server.HostPort, path)
fmt.Println("URL: ", url)
err := browser.Run(z.ctx, err := browser.Run(z.ctx,
browser.Navigate(fmt.Sprintf(`http://127.0.0.1:5002%s`, path)), browser.Navigate(url),
browser.WaitVisible(`body > footer`), browser.WaitVisible(`body > footer`),
browser.WaitVisible(expect)) browser.WaitVisible(expect))
z.require.NoError(err) z.require.NoError(err)

Loading…
Cancel
Save