You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
2.7 KiB
138 lines
2.7 KiB
package auth
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.aiterp.net/gisle/wrouter/generate"
|
|
)
|
|
|
|
var ErrExists = errors.New("auth: user exists")
|
|
var ErrLogin = errors.New("auth: login failed")
|
|
|
|
type testAuther struct {
|
|
FullName string
|
|
users []*User
|
|
passwords map[string]string
|
|
}
|
|
|
|
func (ta *testAuther) ID() string {
|
|
return strings.ToLower(ta.FullName)
|
|
}
|
|
|
|
func (ta *testAuther) Name() string {
|
|
return ta.FullName
|
|
}
|
|
|
|
func (ta *testAuther) Exists(username string) bool {
|
|
for _, user := range ta.users {
|
|
if user.Name == username {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func (ta *testAuther) Find(userid string) *User {
|
|
for _, user := range ta.users {
|
|
if user.ID == userid {
|
|
return user
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (ta *testAuther) Login(username, password string) (*User, error) {
|
|
for _, user := range ta.users {
|
|
if user.Name == username && password == ta.passwords[user.ID] {
|
|
return user, nil
|
|
}
|
|
}
|
|
|
|
return nil, ErrLogin
|
|
}
|
|
|
|
func (ta *testAuther) Register(username, password string, data map[string]string) (*User, error) {
|
|
if ta.Exists(username) {
|
|
return nil, ErrExists
|
|
}
|
|
|
|
if ta.passwords == nil {
|
|
ta.passwords = make(map[string]string)
|
|
}
|
|
|
|
id := generate.ID()
|
|
ta.passwords[id] = password
|
|
|
|
user := NewUser(ta, id, username, "member", data)
|
|
ta.users = append(ta.users, user)
|
|
return user, nil
|
|
}
|
|
|
|
func TestList(t *testing.T) {
|
|
ta1 := testAuther{FullName: "Auth1"}
|
|
ta2 := testAuther{FullName: "Auth2"}
|
|
Register(&ta1)
|
|
Register(&ta2)
|
|
|
|
if ta1.ID() != "auth1" {
|
|
t.Errorf("ta1.ID() = %s", ta1.ID())
|
|
t.Fail()
|
|
}
|
|
|
|
if ta2.ID() != "auth2" {
|
|
t.Errorf("ta2.ID() = %s", ta2.ID())
|
|
t.Fail()
|
|
}
|
|
|
|
t.Run("Find", func(t *testing.T) {
|
|
fa1 := FindAuthenticator("auth1")
|
|
fa2 := FindAuthenticator("auth2")
|
|
|
|
if &ta1 != fa1 {
|
|
t.Errorf("%s != %s", ta1.ID(), fa1.ID())
|
|
t.Fail()
|
|
}
|
|
|
|
if &ta2 != fa2 {
|
|
t.Errorf("%s != %s", ta2.ID(), fa2.ID())
|
|
t.Fail()
|
|
}
|
|
})
|
|
|
|
t.Run("Register", func(t *testing.T) {
|
|
user, err := ta1.Register("Test", "CakesAndStuff", nil)
|
|
if err != nil || user.Name != "Test" {
|
|
t.Logf("err = %v; name = \"%s\"", err, user.Name)
|
|
t.Fail()
|
|
}
|
|
|
|
if !ta1.Exists("Test") {
|
|
t.Log("Registered user does not exist")
|
|
t.Fail()
|
|
}
|
|
|
|
user2, err := ta1.Register("Test", "CakesAndStuff", nil)
|
|
if err == nil || user2 != nil {
|
|
t.Logf("err = %s; name = \"%s\"", err, user2.Name)
|
|
t.Fail()
|
|
}
|
|
})
|
|
|
|
t.Run("Login", func(t *testing.T) {
|
|
user, err := ta1.Login("Test", "CakesAndStuff")
|
|
if err != nil || user.Name != "Test" {
|
|
t.Logf("err = %v; name = \"%s\"", err, user.Name)
|
|
t.Fail()
|
|
}
|
|
|
|
user2, err := ta1.Login("Test", "WrongPassword")
|
|
if err == nil || user2 != nil {
|
|
t.Logf("err = %v; name = \"%s\"", err, user.Name)
|
|
t.Fail()
|
|
}
|
|
})
|
|
}
|