ZeroBot-Plugin/plugin/antiabuse/utils_test.go
AkiraXie 340db0c644
improve antiabuse and add testcase (#398)
* improve antiabuse and add testcase

* fix managers link and add managers_test

* make linter happy

* add ttl.cache
2022-09-05 21:44:22 +08:00

203 lines
3.7 KiB
Go

package antiabuse
import (
"os"
"sort"
"testing"
)
func TestInsertWord(t *testing.T) {
wordMap = make(map[int64]*Set[string])
defer func() {
wordMap = make(map[int64]*Set[string])
}()
path := "test.db"
defer func() {
err := os.Remove("test.db")
if err != nil {
t.Fatal(err)
}
}()
db.DBPath = path
err := db.Open(0)
defer func() {
err := db.Close()
if err != nil {
t.Fatal(err)
}
}()
err = db.Create("banWord", &banWord{})
if err != nil {
t.Fatal(err)
}
defer func() {
err := db.Drop("banWord")
if err != nil {
t.Fatal(err)
}
}()
err = insertWord(123, "one")
if err != nil {
t.Fatal(err)
}
if ok := wordMap[123].Include("one"); !ok {
t.Fatal(`wordMap[123] should found "one" but not`)
}
if !db.CanFind("banWord", "WHERE group_id=123 AND word= 'one' ") {
t.Fatal(`db should found 123-one but not`)
}
}
func TestDeleteWord(t *testing.T) {
wordMap = make(map[int64]*Set[string])
defer func() {
wordMap = make(map[int64]*Set[string])
}()
path := "test.db"
defer func() {
err := os.Remove("test.db")
if err != nil {
t.Fatal(err)
}
}()
db.DBPath = path
err := db.Open(0)
defer func() {
err := db.Close()
if err != nil {
t.Fatal(err)
}
}()
err = db.Create("banWord", &banWord{})
if err != nil {
t.Fatal(err)
}
defer func() {
err := db.Drop("banWord")
if err != nil {
t.Fatal(err)
}
}()
err = insertWord(123, "one")
if err != nil {
t.Fatal(err)
}
err = deleteWord(123, "one")
if err != nil {
t.Fatal(err)
}
}
func TestShowWord(t *testing.T) {
wordMap = make(map[int64]*Set[string])
defer func() {
wordMap = make(map[int64]*Set[string])
}()
path := "test.db"
defer func() {
err := os.Remove("test.db")
if err != nil {
t.Fatal(err)
}
}()
db.DBPath = path
err := db.Open(0)
defer func() {
err := db.Close()
if err != nil {
t.Fatal(err)
}
}()
err = db.Create("banWord", &banWord{})
if err != nil {
t.Fatal(err)
}
defer func() {
err := db.Drop("banWord")
if err != nil {
t.Fatal(err)
}
}()
err = insertWord(123, "one")
if err != nil {
t.Fatal(err)
}
err = insertWord(123, "one")
if err != nil {
t.Fatal(err)
}
err = insertWord(123, "two")
if err != nil {
t.Fatal(err)
}
var db123 []string
var map123 []string
obj := &banWord{}
err = db.FindFor("banWord", obj, "WHERE group_id=123", func() error {
db123 = append(db123, obj.Word)
return nil
})
if err != nil {
t.Fatal(err)
}
sort.Strings(db123)
if len(db123) != 2 || db123[0] != "one" || db123[1] != "two" {
t.Fatal("db should found 123-one and 123-two but not")
}
map123 = wordMap[123].ToSlice()
sort.Strings(map123)
if len(map123) != 2 || map123[0] != "one" || map123[1] != "two" {
t.Fatal("wordMap[123] should found 123-one and 123-two but not")
}
}
func TestRecoverWord(t *testing.T) {
wordMap = make(map[int64]*Set[string])
defer func() {
wordMap = make(map[int64]*Set[string])
}()
path := "test.db"
defer func() {
err := os.Remove("test.db")
if err != nil {
t.Fatal(err)
}
}()
db.DBPath = path
err := db.Open(0)
defer func() {
err := db.Close()
if err != nil {
t.Fatal(err)
}
}()
err = db.Create("banWord", &banWord{})
if err != nil {
t.Fatal(err)
}
defer func() {
err := db.Drop("banWord")
if err != nil {
t.Fatal(err)
}
}()
err = insertWord(123, "one")
if err != nil {
t.Fatal(err)
}
err = insertWord(123, "two")
if err != nil {
t.Fatal(err)
}
wordMap = make(map[int64]*Set[string])
err = recoverWord()
if err != nil {
t.Fatal(err)
}
map123 := wordMap[123].ToSlice()
sort.Strings(map123)
if len(map123) != 2 || map123[0] != "one" || map123[1] != "two" {
t.Fatal("wordMap[123] should found 123-one and 123-two but not")
}
}