TinySkin/service/user_test.go
2023-10-12 19:44:26 +08:00

153 lines
3.2 KiB
Go

package service
import (
"context"
"crypto/rand"
"crypto/rsa"
"net/http"
"os"
"testing"
_ "github.com/go-sql-driver/mysql"
"github.com/samber/lo"
"github.com/xmdhs/authlib-skin/config"
"github.com/xmdhs/authlib-skin/db/cache"
"github.com/xmdhs/authlib-skin/db/ent"
"github.com/xmdhs/authlib-skin/db/ent/migrate"
"github.com/xmdhs/authlib-skin/model"
)
var webService *WebService
func TestMain(m *testing.M) {
ctx := context.Background()
clean := initWebService(ctx)
code := m.Run()
clean()
os.Exit(code)
}
func initWebService(ctx context.Context) func() {
c := lo.Must(ent.Open("mysql", "root:root@tcp(127.0.0.1)/test"))
lo.Must0(c.Schema.Create(context.Background(), migrate.WithForeignKeys(false), migrate.WithDropIndex(true), migrate.WithDropColumn(true)))
rsa4 := lo.Must(rsa.GenerateKey(rand.Reader, 4096))
webService = NewWebService(config.Default(), c, &http.Client{}, cache.NewFastCache(100000), rsa4)
return func() {
c.User.Delete().Exec(ctx)
c.Texture.Delete().Exec(ctx)
c.UserProfile.Delete().Exec(ctx)
c.UserTexture.Delete().Exec(ctx)
c.UserToken.Delete().Exec(ctx)
}
}
func TestWebService_Reg(t *testing.T) {
ctx := context.Background()
webService.config.MaxIpUser = 1
type args struct {
ctx context.Context
u model.UserReg
ipPrefix string
ip string
}
tests := []struct {
name string
w *WebService
args args
wantErr bool
}{
{
name: "1",
w: webService,
args: args{
ctx: ctx,
u: model.UserReg{
Email: "1@xmdhs.com",
Password: "123456",
Name: "111",
CaptchaToken: "",
},
ipPrefix: "127.0.0.0/24",
ip: "127.0.0.1",
},
wantErr: false,
},
{
name: "email duplicate",
w: webService,
args: args{
ctx: ctx,
u: model.UserReg{
Email: "1@xmdhs.com",
Password: "123456",
Name: "111",
CaptchaToken: "",
},
ipPrefix: "127.0.0.0/24",
ip: "127.0.0.1",
},
wantErr: true,
},
{
name: "name duplicate",
w: webService,
args: args{
ctx: ctx,
u: model.UserReg{
Email: "2@xmdhs.com",
Password: "123456",
Name: "111",
CaptchaToken: "",
},
ipPrefix: "127.0.0.0/24",
ip: "127.0.0.1",
},
wantErr: true,
},
{
name: "MaxIpUser",
w: webService,
args: args{
ctx: ctx,
u: model.UserReg{
Email: "3@xmdhs.com",
Password: "123456",
Name: "333",
CaptchaToken: "",
},
ipPrefix: "127.0.0.0/24",
ip: "127.0.0.1",
},
wantErr: true,
},
{
name: "MaxIpUser",
w: webService,
args: args{
ctx: ctx,
u: model.UserReg{
Email: "4@xmdhs.com",
Password: "123456",
Name: "444",
CaptchaToken: "",
},
ipPrefix: "127.0.0.2/24",
ip: "127.0.0.1",
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := tt.w.Reg(tt.args.ctx, tt.args.u, tt.args.ipPrefix, tt.args.ip); (err != nil) != tt.wantErr {
t.Errorf("WebService.Reg() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
webService.config.MaxIpUser = 0
}