diff --git a/Makefile b/Makefile index 0099869..d146838 100644 --- a/Makefile +++ b/Makefile @@ -12,17 +12,16 @@ cmds: go build -o bin/fgen ./tools/cmd/fgen go build -o bin/qmgr ./tools/cmd/qmgr go build -o bin/mailer ./tools/cmd/mailer + go test MY/webapp/tests -c -o bin/ site: go tool ssgod -test: site - go test MY/webapp/tests -c - ./tests.test +test: cmds site + ./bin/tests.test -test_only: - go test . -c -o - ./tests.test -test.run TestSomePage +test_only: cmds site + ./bin/tests.test -test.run $(TEST) migrate_up: goose sqlite3 db.sqlite3 -dir migrations up diff --git a/admin/table/db.go b/admin/table/db.go index b4e65d7..c305fb6 100644 --- a/admin/table/db.go +++ b/admin/table/db.go @@ -52,7 +52,12 @@ func SelectTable(table string, limit uint64, page uint64) ([]any, error) { var results []any 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 } rows, err := data.DB.Queryx(sql_query, args...) diff --git a/auth/handlers.go b/auth/handlers.go index 4d1070a..bb07af6 100644 --- a/auth/handlers.go +++ b/auth/handlers.go @@ -5,6 +5,7 @@ import ( _ "github.com/mattn/go-sqlite3" sq "github.com/Masterminds/squirrel" + "fmt" "MY/webapp/data" . "MY/webapp/common" ) @@ -46,7 +47,10 @@ func PostApiLogin(c *fiber.Ctx) error { if(err != nil) { return IfErrNil(err, c) } 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 { sess, err := STORE.Get(c) diff --git a/common/web.go b/common/web.go index 27d2e1f..e1f8173 100644 --- a/common/web.go +++ b/common/web.go @@ -11,12 +11,18 @@ import ( 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) { handler := func(c *fiber.Ctx) error { _, err := AuthCheck(c, must_admin) 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) @@ -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) { handler := func(c *fiber.Ctx) error { + params := c.AllParams() + params["PageId"] = GenPageId(url) + 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) { - page_id := strings.ReplaceAll(path, "/", "-") + "-page" + page_id := GenPageId(path) return func (c *fiber.Ctx) error { return c.Render(path, fiber.Map{"PageId": page_id}) diff --git a/config/settings.go b/config/settings.go index 21e9a20..180cb89 100644 --- a/config/settings.go +++ b/config/settings.go @@ -11,7 +11,7 @@ type config struct { Admin string Views string Layouts string - Port string + HostPort string } Database struct { Driver string diff --git a/config_example.json b/config_example.json index 8d6fd1a..2e89446 100644 --- a/config_example.json +++ b/config_example.json @@ -3,7 +3,7 @@ "Admin": "admin", "Views": "./views", "Layouts": "layouts/main", - "Port": ":7001" + "HostPort": ":7001" }, "Database": { "Driver": "sqlite3", diff --git a/main.go b/main.go index 178e43e..5c9098b 100644 --- a/main.go +++ b/main.go @@ -55,7 +55,7 @@ func main() { // this sets up graceful shutdown 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) } }() diff --git a/tests/admin_test.go b/tests/admin_test.go index 60405bf..3deb552 100644 --- a/tests/admin_test.go +++ b/tests/admin_test.go @@ -3,10 +3,11 @@ package tests import ( "testing" "fmt" + "strings" "reflect" "github.com/stretchr/testify/require" "MY/webapp/data" - "MY/webapp/admin" + admin "MY/webapp/admin/table" sq "github.com/Masterminds/squirrel" ) @@ -16,11 +17,11 @@ func TestAdminIndexPage(t *testing.T) { table := "user" model := models[table] - fmt.Printf("\n------\ntable=%s; model=%s\n", table, model.Name()) fields := reflect.VisibleFields(model) 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++ { @@ -37,34 +38,35 @@ func TestAdminIndexPage(t *testing.T) { assert.NoError(err) id, count, err := admin.Insert(table, val) - assert.Equal(count, 1) - assert.NotEqual(id, 0) + assert.Equal(count, int64(1)) + assert.NotEqual(id, int64(0)) 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) - - for i, row := range all_rows { fmt.Println("row", i, row) } assert.Equal(20, len(all_rows)) + 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) } - fmt.Println("TABLE: ", result) id := result.FieldByName("Id") - result, err = admin.Get(table, model, id.Int()) + result, err = admin.Get(table, id.Int()) assert.NoError(err) - fmt.Println("BEFORE: ", result) - result.FieldByName("Username").SetString("joeblow") - result.FieldByName("Email").SetString("what@what.com") - fmt.Println("AFTER: ", result) + username := result.FieldByName("Username").String() - err = admin.Update(table, result) - assert.NoError(err, ) + // only remove test users + if strings.HasPrefix(username, "test") { + result.FieldByName("Username").SetString("joeblow") + result.FieldByName("Email").SetString("what@what.com") - err = admin.Delete(table, id.Int()) - assert.NoError(err) + err = admin.Update(table, result) + assert.NoError(err, ) + + err = admin.Delete(table, id.Int()) + assert.NoError(err) + } } diff --git a/tests/admin_ui_test.go b/tests/admin_ui_test.go index dd8b64c..674b1ff 100644 --- a/tests/admin_ui_test.go +++ b/tests/admin_ui_test.go @@ -2,14 +2,26 @@ package tests import ( "testing" + "time" // "github.com/stretchr/testify/require" // "MY/webapp/data" // sq "github.com/Masterminds/squirrel" ) func TestTableListing(t *testing.T) { - z, cancel := Setup(t, 2); + z, cancel := Setup(t, 2 * time.Second); 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"]`) } diff --git a/tests/base_test.go b/tests/base_test.go index 59a1825..d0f279f 100644 --- a/tests/base_test.go +++ b/tests/base_test.go @@ -14,7 +14,7 @@ func deleteTestUser(username string) { func TestLogin(t *testing.T) { deleteTestUser("testerzed") - z, cancel := Setup(t, 5) + z, cancel := Setup(t, 5000) defer cancel() z.GoTo("/register/", `[data-testid="register-index-page"]`) diff --git a/tests/tools.go b/tests/tools.go index 74a19fc..148809e 100644 --- a/tests/tools.go +++ b/tests/tools.go @@ -9,8 +9,13 @@ import ( "runtime" "github.com/stretchr/testify/require" browser "github.com/chromedp/chromedp" + "MY/webapp/config" ) +func init() { + config.Load("config.json") +} + type ZedBrowser struct { ctx context.Context require *require.Assertions @@ -25,14 +30,18 @@ func (z *ZedBrowser) ClickOn(id string) { browser.Click(id)) 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) { + url := fmt.Sprintf(`http://%s%s`, config.Settings.Server.HostPort, path) + + fmt.Println("URL: ", url) + err := browser.Run(z.ctx, - browser.Navigate(fmt.Sprintf(`http://127.0.0.1:5002%s`, path)), - browser.WaitVisible(`body > footer`), - browser.WaitVisible(expect)) + browser.Navigate(url), + browser.WaitVisible(`body > footer`), + browser.WaitVisible(expect)) z.require.NoError(err) }