diff --git a/common/relations.go b/common/relations.go index 4f278d4e..68965fa2 100644 --- a/common/relations.go +++ b/common/relations.go @@ -1,20 +1,31 @@ package common -import qgen "github.com/Azareal/Gosora/query_gen" +import ( + "database/sql" + + qgen "github.com/Azareal/Gosora/query_gen" +) type BlockStore interface { IsBlockedBy(blocker int, blockee int) (bool, error) } type DefaultBlockStore struct { + isBlocked *sql.Stmt } func NewDefaultBlockStore(acc *qgen.Accumulator) (*DefaultBlockStore, error) { - return &DefaultBlockStore{}, acc.FirstError() + return &DefaultBlockStore{ + isBlocked: acc.Select("users_blocks").Cols("blocker").Where("blocker = ? AND blockedUser = ?").Prepare(), + }, acc.FirstError() } func (s *DefaultBlockStore) IsBlockedBy(blocker int, blockee int) (bool, error) { - return false, nil + err := s.isBlocked.QueryRow(blocker, blockee).Scan(&blocker) + if err != nil && err != ErrNoRows { + return false, err + } + return err != ErrNoRows, nil } type FriendStore interface { diff --git a/parser_test.go b/parser_test.go index 621d2f41..1f7194d1 100644 --- a/parser_test.go +++ b/parser_test.go @@ -287,6 +287,9 @@ func TestParser(t *testing.T) { l.Add("@0", "[Invalid Profile]") l.Add("@-1", "[Invalid Profile]1") + // TODO: Fix this hack and make the results a bit more reproducible, push the tests further in the process. + pre2 := c.Site.EnableSsl + c.Site.EnableSsl = true for _, item := range l.Items { if res := c.ParseMessage(item.Msg, 1, "forums"); res != item.Expects { if item.Name != "" { @@ -298,10 +301,11 @@ func TestParser(t *testing.T) { break } } + c.Site.EnableSsl = pre2 l = &METriList{nil} pre := c.Site.URL // Just in case this is localhost... - pre2 := c.Site.EnableSsl + pre2 = c.Site.EnableSsl c.Site.URL = "example.com" c.Site.EnableSsl = true l.Add("//"+c.Site.URL, ""+c.Site.URL+"")