diff --git a/tests/admin_test.go b/tests/admin_test.go index 3199e2b..c3cc8bc 100644 --- a/tests/admin_test.go +++ b/tests/admin_test.go @@ -9,9 +9,9 @@ import ( sq "github.com/Masterminds/squirrel" ) -func SelectTable(table string, the_type reflect.Type) ([]reflect.Value, error) { +func SelectTable(table string, the_type reflect.Type, limit uint64, offset uint64) ([]reflect.Value, error) { var results []reflect.Value - sql_query, args, err := sq.Select("*").From(table).ToSql() + sql_query, args, err := sq.Select("*").Limit(limit).Offset(offset).From(table).ToSql() if err != nil { return results, err } rows, err := data.DB.Queryx(sql_query, args...) @@ -48,12 +48,33 @@ func Delete(table string, id int64) error { return err } +func Insert(table string, value reflect.Value) error { + type_of := value.Type() + field_num := value.NumField() + var columns []string + var values []interface{} + + for i := 0; i < field_num; i++ { + field := value.Field(i) + tag := type_of.Field(i).Tag.Get("db") + if tag == "id" { continue } + columns = append(columns, tag) + values = append(values, field.Interface()) + } + + builder := sq.Insert(table).Columns(columns...).Values(values...) + sql_query, args, err := builder.ToSql() + + _, err = data.DB.Exec(sql_query, args...) + + return err +} + func Update(table string, value reflect.Value) error { builder := sq.Update(table) type_of := value.Type() field_num := value.NumField() - fmt.Printf("value has %d fields", field_num) for i := 0; i < field_num; i++ { field := value.Field(i) @@ -62,7 +83,6 @@ func Update(table string, value reflect.Value) error { // skip update of id to avoid replacing it if tag == "id" { continue } - fmt.Printf("\nset %v to %v", tag, field.Interface()) builder = builder.Set(tag, field.Interface()) } @@ -70,8 +90,6 @@ func Update(table string, value reflect.Value) error { sql_query, args, err := builder.ToSql() - fmt.Println("SQL: sql_query", sql_query, args, err) - _, err = data.DB.Exec(sql_query, args...) return err @@ -89,7 +107,23 @@ func TestAdminIndexPage(t *testing.T) { fmt.Println("\t", field.Name, field.Type, field.Tag) } - all_rows, err := SelectTable(table, model) + for i := 0; i < 87; i++ { + val := reflect.New(model).Elem() + email := fmt.Sprintf("test%d@test.com", i) + val.FieldByName("Email").SetString(email) + val.FieldByName("Username").SetString(fmt.Sprintf("zed%d@zed.com", i)) + val.FieldByName("Password").SetString("garbage") + + sql_query, args, err := sq.Delete(table).Where("email", email).ToSql() + data.DB.Exec(sql_query, args...) + + err = Insert(table, val) + if err != nil { fmt.Println("INSERT", err) } + } + + all_rows, err := SelectTable(table, model, 20, 20 * 3) + for i, row := range all_rows { fmt.Println("row", i, row) } + if err != nil { fmt.Println("ERROR", err) } first_row := all_rows[0]