Added an alternate builder syntax and started using it in a few places.
This commit is contained in:
parent
fb8fa10570
commit
7ac3de8299
|
@ -75,7 +75,7 @@ func init() {
|
|||
acc := qgen.Builder.Accumulator()
|
||||
replyStmts = ReplyStmts{
|
||||
isLiked: acc.SimpleSelect("likes", "targetItem", "sentBy = ? and targetItem = ? and targetType = 'replies'", "", ""),
|
||||
createLike: acc.SimpleInsert("likes", "weight, targetItem, targetType, sentBy", "?,?,?,?"),
|
||||
createLike: acc.Insert("likes").Columns("weight, targetItem, targetType, sentBy").Fields("?,?,?,?").Prepare(),
|
||||
delete: acc.SimpleDelete("replies", "rid = ?"),
|
||||
addLikesToReply: acc.SimpleUpdate("replies", "likeCount = likeCount + ?", "rid = ?"),
|
||||
removeRepliesFromTopic: acc.SimpleUpdate("topics", "postCount = postCount - ?", "tid = ?"),
|
||||
|
|
|
@ -129,18 +129,19 @@ func init() {
|
|||
DbInits.Add(func() error {
|
||||
acc := qgen.Builder.Accumulator()
|
||||
topicStmts = TopicStmts{
|
||||
addRepliesToTopic: acc.SimpleUpdate("topics", "postCount = postCount + ?, lastReplyBy = ?, lastReplyAt = UTC_TIMESTAMP()", "tid = ?"),
|
||||
lock: acc.SimpleUpdate("topics", "is_closed = 1", "tid = ?"),
|
||||
unlock: acc.SimpleUpdate("topics", "is_closed = 0", "tid = ?"),
|
||||
stick: acc.SimpleUpdate("topics", "sticky = 1", "tid = ?"),
|
||||
unstick: acc.SimpleUpdate("topics", "sticky = 0", "tid = ?"),
|
||||
hasLikedTopic: acc.SimpleSelect("likes", "targetItem", "sentBy = ? and targetItem = ? and targetType = 'topics'", "", ""),
|
||||
createLike: acc.SimpleInsert("likes", "weight, targetItem, targetType, sentBy", "?,?,?,?"),
|
||||
addLikesToTopic: acc.SimpleUpdate("topics", "likeCount = likeCount + ?", "tid = ?"),
|
||||
delete: acc.SimpleDelete("topics", "tid = ?"),
|
||||
edit: acc.SimpleUpdate("topics", "title = ?, content = ?, parsed_content = ?", "tid = ?"),
|
||||
createActionReply: acc.SimpleInsert("replies", "tid, actionType, ipaddress, createdBy, createdAt, lastUpdated, content, parsed_content", "?,?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),'',''"),
|
||||
getTopicUser: acc.SimpleLeftJoin("topics", "users", "topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level", "topics.createdBy = users.uid", "tid = ?", "", ""),
|
||||
addRepliesToTopic: acc.Update("topics").Set("postCount = postCount + ?, lastReplyBy = ?, lastReplyAt = UTC_TIMESTAMP()").Where("tid = ?").Prepare(),
|
||||
lock: acc.Update("topics").Set("is_closed = 1").Where("tid = ?").Prepare(),
|
||||
unlock: acc.Update("topics").Set("is_closed = 0").Where("tid = ?").Prepare(),
|
||||
stick: acc.Update("topics").Set("sticky = 1").Where("tid = ?").Prepare(),
|
||||
unstick: acc.Update("topics").Set("sticky = 0").Where("tid = ?").Prepare(),
|
||||
hasLikedTopic: acc.Select("likes").Columns("targetItem").Where("sentBy = ? and targetItem = ? and targetType = 'topics'").Prepare(),
|
||||
createLike: acc.Insert("likes").Columns("weight, targetItem, targetType, sentBy").Fields("?,?,?,?").Prepare(),
|
||||
addLikesToTopic: acc.Update("topics").Set("likeCount = likeCount + ?").Where("tid = ?").Prepare(),
|
||||
delete: acc.Delete("topics").Where("tid = ?").Prepare(),
|
||||
edit: acc.Update("topics").Set("title = ?, content = ?, parsed_content = ?").Where("tid = ?").Prepare(),
|
||||
createActionReply: acc.Insert("replies").Columns("tid, actionType, ipaddress, createdBy, createdAt, lastUpdated, content, parsed_content").Fields("?,?,?,?,UTC_TIMESTAMP(),UTC_TIMESTAMP(),'',''").Prepare(),
|
||||
|
||||
getTopicUser: acc.SimpleLeftJoin("topics", "users", "topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level", "topics.createdBy = users.uid", "tid = ?", "", ""),
|
||||
}
|
||||
return acc.FirstError()
|
||||
})
|
||||
|
|
|
@ -1,24 +1,21 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
//"os"
|
||||
"bytes"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"log"
|
||||
"strconv"
|
||||
"strings"
|
||||
//"math/rand"
|
||||
"database/sql"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"./common"
|
||||
"./install/install"
|
||||
"./query_gen/lib"
|
||||
//"runtime/pprof"
|
||||
//_ "github.com/go-sql-driver/mysql"
|
||||
//"github.com/erikstmartin/go-testdb"
|
||||
//"github.com/husobee/vestigo"
|
||||
)
|
||||
|
||||
|
@ -75,16 +72,16 @@ func gloinit() (err error) {
|
|||
return err
|
||||
}
|
||||
|
||||
err = initDatabase()
|
||||
err = InitDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rstore, err = NewSQLReplyStore()
|
||||
common.Rstore, err = common.NewSQLReplyStore()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
prstore, err = NewSQLProfileReplyStore()
|
||||
common.Prstore, err = common.NewSQLProfileReplyStore()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -95,25 +92,29 @@ func gloinit() (err error) {
|
|||
// return err
|
||||
//}
|
||||
|
||||
err = initTemplates()
|
||||
err = common.InitTemplates()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dbProd.SetMaxOpenConns(64)
|
||||
|
||||
err = initPhrases()
|
||||
err = common.InitPhrases()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
log.Print("Loading the static files.")
|
||||
err = initStaticFiles()
|
||||
err = common.StaticFiles.Init()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
auth = NewDefaultAuth()
|
||||
|
||||
err = LoadWordFilters()
|
||||
common.Auth, err = common.NewDefaultAuth()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = common.LoadWordFilters()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -142,15 +143,15 @@ func BenchmarkTopicAdminRouteParallel(b *testing.B) {
|
|||
}
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
admin, err := users.Get(1)
|
||||
admin, err := common.Users.Get(1)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
if !admin.IsAdmin {
|
||||
b.Fatal("UID1 is not an admin")
|
||||
}
|
||||
adminUIDCookie := http.Cookie{Name: "uid", Value: "1", Path: "/", MaxAge: year}
|
||||
adminSessionCookie := http.Cookie{Name: "session", Value: admin.Session, Path: "/", MaxAge: year}
|
||||
adminUIDCookie := http.Cookie{Name: "uid", Value: "1", Path: "/", MaxAge: common.Year}
|
||||
adminSessionCookie := http.Cookie{Name: "session", Value: admin.Session, Path: "/", MaxAge: common.Year}
|
||||
|
||||
topicW := httptest.NewRecorder()
|
||||
topicReq := httptest.NewRequest("get", "/topic/1", bytes.NewReader(nil))
|
||||
|
@ -159,7 +160,7 @@ func BenchmarkTopicAdminRouteParallel(b *testing.B) {
|
|||
topicReqAdmin.AddCookie(&adminSessionCookie)
|
||||
|
||||
// Deal with the session stuff, etc.
|
||||
user, ok := PreRoute(topicW, topicReqAdmin)
|
||||
user, ok := common.PreRoute(topicW, topicReqAdmin)
|
||||
if !ok {
|
||||
b.Fatal("Mysterious error!")
|
||||
}
|
||||
|
@ -185,7 +186,7 @@ func BenchmarkTopicGuestRouteParallel(b *testing.B) {
|
|||
topicReq := httptest.NewRequest("get", "/topic/1", bytes.NewReader(nil))
|
||||
for pb.Next() {
|
||||
topicW.Body.Reset()
|
||||
routeTopicID(topicW, topicReq, guestUser)
|
||||
routeTopicID(topicW, topicReq, common.GuestUser)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -522,7 +523,7 @@ func BenchmarkQueryTopicParallel(b *testing.B) {
|
|||
}
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
var tu TopicUser
|
||||
var tu common.TopicUser
|
||||
for pb.Next() {
|
||||
err := db.QueryRow("select topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level from topics left join users ON topics.createdBy = users.uid where tid = ?", 1).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level)
|
||||
if err == ErrNoRows {
|
||||
|
@ -546,9 +547,15 @@ func BenchmarkQueryPreparedTopicParallel(b *testing.B) {
|
|||
}
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
var tu TopicUser
|
||||
var tu common.TopicUser
|
||||
|
||||
getTopicUser, err := qgen.Builder.SimpleLeftJoin("topics", "users", "topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level", "topics.createdBy = users.uid", "tid = ?", "", "")
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
||||
for pb.Next() {
|
||||
err := stmts.getTopicUser.QueryRow(1).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level)
|
||||
err := getTopicUser.QueryRow(1).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level)
|
||||
if err == ErrNoRows {
|
||||
b.Fatal("No rows found!")
|
||||
return
|
||||
|
@ -572,7 +579,7 @@ func BenchmarkUserGet(b *testing.B) {
|
|||
b.RunParallel(func(pb *testing.PB) {
|
||||
var err error
|
||||
for pb.Next() {
|
||||
_, err = users.Get(1)
|
||||
_, err = common.Users.Get(1)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
return
|
||||
|
@ -594,7 +601,7 @@ func BenchmarkUserBypassGet(b *testing.B) {
|
|||
b.RunParallel(func(pb *testing.PB) {
|
||||
var err error
|
||||
for pb.Next() {
|
||||
_, err = users.BypassGet(1)
|
||||
_, err = common.Users.BypassGet(1)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
return
|
||||
|
@ -605,7 +612,7 @@ func BenchmarkUserBypassGet(b *testing.B) {
|
|||
|
||||
func BenchmarkQueriesSerial(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
var tu TopicUser
|
||||
var tu common.TopicUser
|
||||
b.Run("topic", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
err := db.QueryRow("select topics.title, topics.content, topics.createdBy, topics.createdAt, topics.is_closed, topics.sticky, topics.parentID, topics.ipaddress, topics.postCount, topics.likeCount, users.name, users.avatar, users.group, users.url_prefix, users.url_name, users.level from topics left join users ON topics.createdBy = users.uid where tid = ?", 1).Scan(&tu.Title, &tu.Content, &tu.CreatedBy, &tu.CreatedAt, &tu.IsClosed, &tu.Sticky, &tu.ParentID, &tu.IPAddress, &tu.PostCount, &tu.LikeCount, &tu.CreatedByName, &tu.Avatar, &tu.Group, &tu.URLPrefix, &tu.URLName, &tu.Level)
|
||||
|
@ -637,7 +644,7 @@ func BenchmarkQueriesSerial(b *testing.B) {
|
|||
}
|
||||
})
|
||||
|
||||
var replyItem ReplyUser
|
||||
var replyItem common.ReplyUser
|
||||
var isSuperAdmin bool
|
||||
var group int
|
||||
b.Run("topic_replies_scan", func(b *testing.B) {
|
||||
|
@ -997,32 +1004,32 @@ func BenchmarkParserSerial(b *testing.B) {
|
|||
b.ReportAllocs()
|
||||
b.Run("empty_post", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = parseMessage("", 0, "")
|
||||
_ = common.ParseMessage("", 0, "")
|
||||
}
|
||||
})
|
||||
b.Run("short_post", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = parseMessage("Hey everyone, how's it going?", 0, "")
|
||||
_ = common.ParseMessage("Hey everyone, how's it going?", 0, "")
|
||||
}
|
||||
})
|
||||
b.Run("one_smily", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = parseMessage("Hey everyone, how's it going? :)", 0, "")
|
||||
_ = common.ParseMessage("Hey everyone, how's it going? :)", 0, "")
|
||||
}
|
||||
})
|
||||
b.Run("five_smilies", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = parseMessage("Hey everyone, how's it going? :):):):):)", 0, "")
|
||||
_ = common.ParseMessage("Hey everyone, how's it going? :):):):):)", 0, "")
|
||||
}
|
||||
})
|
||||
b.Run("ten_smilies", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = parseMessage("Hey everyone, how's it going? :):):):):):):):):):)", 0, "")
|
||||
_ = common.ParseMessage("Hey everyone, how's it going? :):):):):):):):):):)", 0, "")
|
||||
}
|
||||
})
|
||||
b.Run("twenty_smilies", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = parseMessage("Hey everyone, how's it going? :):):):):):):):):):):):):):):):):):):):)", 0, "")
|
||||
_ = common.ParseMessage("Hey everyone, how's it going? :):):):):):):):):):):):):):):):):):):):)", 0, "")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -1175,7 +1182,7 @@ func BenchmarkBBCodePluginWithFullParserSerial(b *testing.B) {
|
|||
}
|
||||
|
||||
func TestLevels(t *testing.T) {
|
||||
levels := getLevels(40)
|
||||
levels := common.GetLevels(40)
|
||||
for level, score := range levels {
|
||||
sscore := strconv.FormatFloat(score, 'f', -1, 64)
|
||||
t.Log("Level: " + strconv.Itoa(level) + " Score: " + sscore)
|
||||
|
|
123
misc_test.go
123
misc_test.go
|
@ -35,24 +35,24 @@ func TestUserStore(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if !pluginsInited {
|
||||
initPlugins()
|
||||
if !common.PluginsInited {
|
||||
common.InitPlugins()
|
||||
}
|
||||
|
||||
var err error
|
||||
users, err = NewMemoryUserStore(config.UserCacheCapacity)
|
||||
common.Users, err = common.NewMemoryUserStore(common.Config.UserCacheCapacity)
|
||||
expectNilErr(t, err)
|
||||
users.(UserCache).Flush()
|
||||
common.Users.(common.UserCache).Flush()
|
||||
userStoreTest(t, 2)
|
||||
users, err = NewSQLUserStore()
|
||||
common.Users, err = common.NewSQLUserStore()
|
||||
expectNilErr(t, err)
|
||||
userStoreTest(t, 3)
|
||||
}
|
||||
func userStoreTest(t *testing.T, newUserID int) {
|
||||
ucache, hasCache := common.Users.(UserCache)
|
||||
ucache, hasCache := common.Users.(common.UserCache)
|
||||
// Go doesn't have short-circuiting, so this'll allow us to do one liner tests
|
||||
if !hasCache {
|
||||
ucache = &NullUserStore{}
|
||||
ucache = &common.NullUserStore{}
|
||||
}
|
||||
expect(t, (!hasCache || ucache.Length() == 0), fmt.Sprintf("The initial ucache length should be zero, not %d", ucache.Length()))
|
||||
|
||||
|
@ -104,7 +104,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
}
|
||||
|
||||
// TODO: Lock onto the specific error type. Is this even possible without sacrificing the detailed information in the error message?
|
||||
var userList map[int]*User
|
||||
var userList map[int]*common.User
|
||||
userList, _ = common.Users.BulkGetMap([]int{-1})
|
||||
if len(userList) > 0 {
|
||||
t.Error("There shouldn't be any results for UID #-1")
|
||||
|
@ -135,7 +135,6 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
t.Error("We couldn't find UID #1 in the returned map")
|
||||
t.Error("userList", userList)
|
||||
}
|
||||
|
||||
if user.ID != 1 {
|
||||
t.Error("user.ID does not match the requested UID. Got '" + strconv.Itoa(user.ID) + "' instead.")
|
||||
}
|
||||
|
@ -151,10 +150,10 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
ucache.Flush()
|
||||
}
|
||||
|
||||
expect(t, !users.Exists(-1), "UID #-1 shouldn't exist")
|
||||
expect(t, !users.Exists(0), "UID #0 shouldn't exist")
|
||||
expect(t, !common.Users.Exists(-1), "UID #-1 shouldn't exist")
|
||||
expect(t, !common.Users.Exists(0), "UID #0 shouldn't exist")
|
||||
expect(t, common.Users.Exists(1), "UID #1 should exist")
|
||||
expect(t, !users.Exists(newUserID), fmt.Sprintf("UID #%d shouldn't exist", newUserID))
|
||||
expect(t, !common.Users.Exists(newUserID), fmt.Sprintf("UID #%d shouldn't exist", newUserID))
|
||||
|
||||
expect(t, !hasCache || ucache.Length() == 0, fmt.Sprintf("User cache length should be 0, not %d", ucache.Length()))
|
||||
expectIntToBeX(t, common.Users.GlobalCount(), 1, "The number of users should be one, not %d")
|
||||
|
@ -207,7 +206,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
expect(t, user.Group == config.DefaultGroup, fmt.Sprintf("Sam should be in group %d, not %d", config.DefaultGroup, user.Group))
|
||||
expect(t, user.Group == common.Config.DefaultGroup, fmt.Sprintf("Sam should be in group %d, not %d", common.Config.DefaultGroup, user.Group))
|
||||
|
||||
// Permanent ban
|
||||
duration, _ := time.ParseDuration("0")
|
||||
|
@ -215,7 +214,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
// TODO: Attempt a double ban, double activation, and double unban
|
||||
err = user.Ban(duration, 1)
|
||||
expectNilErr(t, err)
|
||||
expect(t, user.Group == config.DefaultGroup, fmt.Sprintf("Sam should be in group %d, not %d", config.DefaultGroup, user.Group))
|
||||
expect(t, user.Group == common.Config.DefaultGroup, fmt.Sprintf("Sam should be in group %d, not %d", common.Config.DefaultGroup, user.Group))
|
||||
|
||||
if hasCache {
|
||||
expectIntToBeX(t, ucache.Length(), 0, "User cache length should be 0, not %d")
|
||||
|
@ -235,13 +234,13 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, user.IsBanned, "Sam should be banned")
|
||||
|
||||
expectIntToBeX(t, user.Group, banGroup, "Sam should be in group %d")
|
||||
expectIntToBeX(t, user.Group, common.BanGroup, "Sam should be in group %d")
|
||||
|
||||
// TODO: Do tests against the scheduled updates table and the task system to make sure the ban exists there and gets revoked when it should
|
||||
|
||||
err = user.Unban()
|
||||
expectNilErr(t, err)
|
||||
expectIntToBeX(t, user.Group, banGroup, "Sam should still be in the ban group in this copy")
|
||||
expectIntToBeX(t, user.Group, common.BanGroup, "Sam should still be in the ban group in this copy")
|
||||
|
||||
if hasCache {
|
||||
expectIntToBeX(t, ucache.Length(), 0, "User cache length should be 0, not %d")
|
||||
|
@ -259,7 +258,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
expectIntToBeX(t, user.Group, config.DefaultGroup, "Sam should be back in group %d")
|
||||
expectIntToBeX(t, user.Group, common.Config.DefaultGroup, "Sam should be back in group %d")
|
||||
|
||||
var reportsForumID = 1
|
||||
var generalForumID = 2
|
||||
|
@ -270,12 +269,12 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
|
||||
err = user.ChangeGroup(1)
|
||||
expectNilErr(t, err)
|
||||
expect(t, user.Group == config.DefaultGroup, "Someone's mutated this pointer elsewhere")
|
||||
expect(t, user.Group == common.Config.DefaultGroup, "Someone's mutated this pointer elsewhere")
|
||||
|
||||
user, err = common.Users.Get(newUserID)
|
||||
recordMustExist(t, err, "Couldn't find UID #%d", newUserID)
|
||||
expectIntToBeX(t, user.ID, newUserID, "The UID of the user record should be %d")
|
||||
var user2 *User = getDummyUser()
|
||||
var user2 *common.User = common.BlankUser()
|
||||
*user2 = *user
|
||||
|
||||
expect(t, !user.IsSuperAdmin, "Sam should not be a super admin")
|
||||
|
@ -284,10 +283,10 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, user.IsMod, "Sam should be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
_, ferr := forumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
_, ferr := common.ForumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user.Perms.ViewTopic, "Admins should be able to access the reports forum")
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user2.Perms.ViewTopic, "Sam should be able to access the general forum")
|
||||
|
||||
|
@ -298,7 +297,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
user, err = common.Users.Get(newUserID)
|
||||
recordMustExist(t, err, "Couldn't find UID #%d", newUserID)
|
||||
expectIntToBeX(t, user.ID, newUserID, "The UID of the user record should be %d")
|
||||
user2 = getDummyUser()
|
||||
user2 = common.BlankUser()
|
||||
*user2 = *user
|
||||
|
||||
expect(t, !user.IsSuperAdmin, "Sam should not be a super admin")
|
||||
|
@ -307,10 +306,10 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, user.IsMod, "Sam should be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user.Perms.ViewTopic, "Mods should be able to access the reports forum")
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user2.Perms.ViewTopic, "Sam should be able to access the general forum")
|
||||
|
||||
|
@ -321,7 +320,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
user, err = common.Users.Get(newUserID)
|
||||
recordMustExist(t, err, "Couldn't find UID #%d", newUserID)
|
||||
expectIntToBeX(t, user.ID, newUserID, "The UID of the user record should be %d")
|
||||
user2 = getDummyUser()
|
||||
user2 = common.BlankUser()
|
||||
*user2 = *user
|
||||
|
||||
expect(t, !user.IsSuperAdmin, "Sam should not be a super admin")
|
||||
|
@ -330,10 +329,10 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, !user.Perms.ViewTopic, "Members shouldn't be able to access the reports forum")
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user2.Perms.ViewTopic, "Sam should be able to access the general forum")
|
||||
expect(t, user.Perms.ViewTopic != user2.Perms.ViewTopic, "user.Perms.ViewTopic and user2.Perms.ViewTopic should never match")
|
||||
|
@ -345,7 +344,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
user, err = common.Users.Get(newUserID)
|
||||
recordMustExist(t, err, "Couldn't find UID #%d", newUserID)
|
||||
expectIntToBeX(t, user.ID, newUserID, "The UID of the user record should be %d")
|
||||
user2 = getDummyUser()
|
||||
user2 = common.BlankUser()
|
||||
*user2 = *user
|
||||
|
||||
expect(t, !user.IsSuperAdmin, "Sam should not be a super admin")
|
||||
|
@ -354,10 +353,10 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, user.IsBanned, "Sam should be banned")
|
||||
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, !user.Perms.ViewTopic, "Members shouldn't be able to access the reports forum")
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user2.Perms.ViewTopic, "Sam should be able to access the general forum")
|
||||
|
||||
|
@ -368,7 +367,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
user, err = common.Users.Get(newUserID)
|
||||
recordMustExist(t, err, "Couldn't find UID #%d", newUserID)
|
||||
expectIntToBeX(t, user.ID, newUserID, "The UID of the user record should be %d")
|
||||
user2 = getDummyUser()
|
||||
user2 = common.BlankUser()
|
||||
*user2 = *user
|
||||
|
||||
expect(t, !user.IsSuperAdmin, "Sam should not be a super admin")
|
||||
|
@ -377,10 +376,10 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, !user.Perms.ViewTopic, "Members shouldn't be able to access the reports forum")
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user2.Perms.ViewTopic, "Sam should be able to access the general forum")
|
||||
|
||||
|
@ -391,7 +390,7 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
user, err = common.Users.Get(newUserID)
|
||||
recordMustExist(t, err, "Couldn't find UID #%d", newUserID)
|
||||
expectIntToBeX(t, user.ID, newUserID, "The UID of the user record should be %d")
|
||||
user2 = getDummyUser()
|
||||
user2 = common.BlankUser()
|
||||
*user2 = *user
|
||||
|
||||
expect(t, !user.IsSuperAdmin, "Sam should not be a super admin")
|
||||
|
@ -400,20 +399,20 @@ func userStoreTest(t *testing.T, newUserID int) {
|
|||
expect(t, !user.IsMod, "Sam should not be a mod")
|
||||
expect(t, !user.IsBanned, "Sam should not be banned")
|
||||
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest1, user, reportsForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, !user.Perms.ViewTopic, "Members shouldn't be able to access the reports forum")
|
||||
_, ferr = forumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
_, ferr = common.ForumUserCheck(dummyResponseRecorder, dummyRequest2, user2, generalForumID)
|
||||
expect(t, ferr == nil, "There shouldn't be any errors in forumUserCheck")
|
||||
expect(t, user2.Perms.ViewTopic, "Sam should be able to access the general forum")
|
||||
|
||||
err = user.ChangeGroup(config.DefaultGroup)
|
||||
err = user.ChangeGroup(common.Config.DefaultGroup)
|
||||
expectNilErr(t, err)
|
||||
expect(t, user.Group == 6, "Someone's mutated this pointer elsewhere")
|
||||
|
||||
err = user.Delete()
|
||||
expectNilErr(t, err)
|
||||
expect(t, !users.Exists(newUserID), fmt.Sprintf("UID #%d should no longer exist", newUserID))
|
||||
expect(t, !common.Users.Exists(newUserID), fmt.Sprintf("UID #%d should no longer exist", newUserID))
|
||||
|
||||
if hasCache {
|
||||
expectIntToBeX(t, ucache.Length(), 0, "User cache length should be 0, not %d")
|
||||
|
@ -456,39 +455,39 @@ func TestPermsMiddleware(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if !pluginsInited {
|
||||
initPlugins()
|
||||
if !common.PluginsInited {
|
||||
common.InitPlugins()
|
||||
}
|
||||
|
||||
dummyResponseRecorder := httptest.NewRecorder()
|
||||
bytesBuffer := bytes.NewBuffer([]byte(""))
|
||||
dummyRequest := httptest.NewRequest("", "/forum/1", bytesBuffer)
|
||||
user := getDummyUser()
|
||||
user := common.BlankUser()
|
||||
|
||||
ferr := SuperModOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
ferr := common.SuperModOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
expect(t, ferr != nil, "Blank users shouldn't be supermods")
|
||||
|
||||
user.IsSuperMod = false
|
||||
ferr = SuperModOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
ferr = common.SuperModOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
expect(t, ferr != nil, "Non-supermods shouldn't be allowed through supermod gates")
|
||||
|
||||
user.IsSuperMod = true
|
||||
ferr = SuperModOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
ferr = common.SuperModOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
expect(t, ferr == nil, "Supermods should be allowed through supermod gates")
|
||||
|
||||
// TODO: Loop over the Control Panel routes and make sure only supermods can get in
|
||||
|
||||
user = getDummyUser()
|
||||
user = common.BlankUser()
|
||||
|
||||
ferr = MemberOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
ferr = common.MemberOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
expect(t, ferr != nil, "Blank users shouldn't be considered loggedin")
|
||||
|
||||
user.Loggedin = false
|
||||
ferr = MemberOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
ferr = common.MemberOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
expect(t, ferr != nil, "Guests shouldn't be able to access member areas")
|
||||
|
||||
user.Loggedin = true
|
||||
ferr = MemberOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
ferr = common.MemberOnly(dummyResponseRecorder, dummyRequest, *user)
|
||||
expect(t, ferr == nil, "Logged in users should be able to access member areas")
|
||||
|
||||
// TODO: Loop over the /user/ routes and make sure only members can access the ones other than /user/username
|
||||
|
@ -501,20 +500,20 @@ func TestTopicStore(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if !pluginsInited {
|
||||
initPlugins()
|
||||
if !common.PluginsInited {
|
||||
common.InitPlugins()
|
||||
}
|
||||
|
||||
var err error
|
||||
topics, err = NewMemoryTopicStore(config.TopicCacheCapacity)
|
||||
common.Topics, err = common.NewMemoryTopicStore(common.Config.TopicCacheCapacity)
|
||||
expectNilErr(t, err)
|
||||
topicStoreTest(t)
|
||||
topics, err = NewSQLTopicStore()
|
||||
common.Topics, err = common.NewSQLTopicStore()
|
||||
expectNilErr(t, err)
|
||||
topicStoreTest(t)
|
||||
}
|
||||
func topicStoreTest(t *testing.T) {
|
||||
var topic *Topic
|
||||
var topic *common.Topic
|
||||
var err error
|
||||
|
||||
_, err = common.Topics.Get(-1)
|
||||
|
@ -560,17 +559,17 @@ func TestForumStore(t *testing.T) {
|
|||
if !gloinited {
|
||||
gloinit()
|
||||
}
|
||||
if !pluginsInited {
|
||||
initPlugins()
|
||||
if !common.PluginsInited {
|
||||
common.InitPlugins()
|
||||
}
|
||||
|
||||
_, err := fstore.Get(-1)
|
||||
_, err := common.Fstore.Get(-1)
|
||||
recordMustNotExist(t, err, "FID #-1 shouldn't exist")
|
||||
|
||||
_, err = fstore.Get(0)
|
||||
_, err = common.Fstore.Get(0)
|
||||
recordMustNotExist(t, err, "FID #0 shouldn't exist")
|
||||
|
||||
forum, err := fstore.Get(1)
|
||||
forum, err := common.Fstore.Get(1)
|
||||
recordMustExist(t, err, "Couldn't find FID #1")
|
||||
|
||||
if forum.ID != 1 {
|
||||
|
@ -582,7 +581,7 @@ func TestForumStore(t *testing.T) {
|
|||
var expectDesc = "All the reports go here"
|
||||
expect(t, forum.Desc == expectDesc, fmt.Sprintf("The forum description should be '%s' not '%s'", expectDesc, forum.Desc))
|
||||
|
||||
forum, err = fstore.Get(2)
|
||||
forum, err = common.Fstore.Get(2)
|
||||
recordMustExist(t, err, "Couldn't find FID #1")
|
||||
|
||||
expect(t, forum.ID == 2, fmt.Sprintf("The FID should be 2 not %d", forum.ID))
|
||||
|
@ -591,11 +590,11 @@ func TestForumStore(t *testing.T) {
|
|||
expectDesc = "A place for general discussions which don't fit elsewhere"
|
||||
expect(t, forum.Desc == expectDesc, fmt.Sprintf("The forum description should be '%s' not '%s'", expectDesc, forum.Desc))
|
||||
|
||||
ok := fstore.Exists(-1)
|
||||
ok := common.Fstore.Exists(-1)
|
||||
expect(t, !ok, "FID #-1 shouldn't exist")
|
||||
ok = fstore.Exists(0)
|
||||
ok = common.Fstore.Exists(0)
|
||||
expect(t, !ok, "FID #0 shouldn't exist")
|
||||
ok = fstore.Exists(1)
|
||||
ok = common.Fstore.Exists(1)
|
||||
expect(t, ok, "FID #1 should exist")
|
||||
|
||||
// TODO: Test forum creation
|
||||
|
|
|
@ -186,3 +186,113 @@ func (build *accBuilder) PurgeTx(tx *sql.Tx, table string) (stmt *sql.Stmt) {
|
|||
res, err := build.adapter.Purge("_builder", table)
|
||||
return build.prepareTx(tx, res, err)
|
||||
}
|
||||
|
||||
func (build *accBuilder) Delete(table string) *deleteBuilder {
|
||||
return &deleteBuilder{table, "", build}
|
||||
}
|
||||
|
||||
type deleteBuilder struct {
|
||||
table string
|
||||
where string
|
||||
|
||||
build *accBuilder
|
||||
}
|
||||
|
||||
func (delete *deleteBuilder) Where(where string) *deleteBuilder {
|
||||
delete.where = where
|
||||
return delete
|
||||
}
|
||||
|
||||
func (delete *deleteBuilder) Prepare() *sql.Stmt {
|
||||
return delete.build.SimpleDelete(delete.table, delete.where)
|
||||
}
|
||||
|
||||
func (build *accBuilder) Update(table string) *updateBuilder {
|
||||
return &updateBuilder{table, "", "", build}
|
||||
}
|
||||
|
||||
type updateBuilder struct {
|
||||
table string
|
||||
set string
|
||||
where string
|
||||
|
||||
build *accBuilder
|
||||
}
|
||||
|
||||
func (update *updateBuilder) Set(set string) *updateBuilder {
|
||||
update.set = set
|
||||
return update
|
||||
}
|
||||
|
||||
func (update *updateBuilder) Where(where string) *updateBuilder {
|
||||
update.where = where
|
||||
return update
|
||||
}
|
||||
|
||||
func (update *updateBuilder) Prepare() *sql.Stmt {
|
||||
return update.build.SimpleUpdate(update.table, update.set, update.where)
|
||||
}
|
||||
|
||||
func (build *accBuilder) Select(table string) *selectBuilder {
|
||||
return &selectBuilder{table, "", "", "", "", build}
|
||||
}
|
||||
|
||||
type selectBuilder struct {
|
||||
table string
|
||||
columns string
|
||||
where string
|
||||
orderby string
|
||||
limit string
|
||||
|
||||
build *accBuilder
|
||||
}
|
||||
|
||||
func (selectItem *selectBuilder) Columns(columns string) *selectBuilder {
|
||||
selectItem.columns = columns
|
||||
return selectItem
|
||||
}
|
||||
|
||||
func (selectItem *selectBuilder) Where(where string) *selectBuilder {
|
||||
selectItem.where = where
|
||||
return selectItem
|
||||
}
|
||||
|
||||
func (selectItem *selectBuilder) Orderby(orderby string) *selectBuilder {
|
||||
selectItem.orderby = orderby
|
||||
return selectItem
|
||||
}
|
||||
|
||||
func (selectItem *selectBuilder) Limit(limit string) *selectBuilder {
|
||||
selectItem.limit = limit
|
||||
return selectItem
|
||||
}
|
||||
|
||||
func (selectItem *selectBuilder) Prepare() *sql.Stmt {
|
||||
return selectItem.build.SimpleSelect(selectItem.table, selectItem.columns, selectItem.where, selectItem.orderby, selectItem.limit)
|
||||
}
|
||||
|
||||
func (build *accBuilder) Insert(table string) *insertBuilder {
|
||||
return &insertBuilder{table, "", "", build}
|
||||
}
|
||||
|
||||
type insertBuilder struct {
|
||||
table string
|
||||
columns string
|
||||
fields string
|
||||
|
||||
build *accBuilder
|
||||
}
|
||||
|
||||
func (insert *insertBuilder) Columns(columns string) *insertBuilder {
|
||||
insert.columns = columns
|
||||
return insert
|
||||
}
|
||||
|
||||
func (insert *insertBuilder) Fields(fields string) *insertBuilder {
|
||||
insert.fields = fields
|
||||
return insert
|
||||
}
|
||||
|
||||
func (insert *insertBuilder) Prepare() *sql.Stmt {
|
||||
return insert.build.SimpleInsert(insert.table, insert.columns, insert.fields)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue