feat: live module and jenkins pipeline to harbor deploy
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package liveclient
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
|
||||
biz "kra/internal/biz/liveclient"
|
||||
"kra/internal/data/ledger"
|
||||
)
|
||||
|
||||
type testProvider struct{ db *gorm.DB }
|
||||
|
||||
func (p testProvider) DB() *gorm.DB { return p.db }
|
||||
|
||||
func openAccountTestDB(t *testing.T) *gorm.DB {
|
||||
t.Helper()
|
||||
db, err := gorm.Open(sqlite.Open("file:"+t.Name()+"?mode=memory&cache=shared"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = db.AutoMigrate(&userPO{}, &authorityPO{}, &userAuthorityPO{}, &policyPO{}, &ledger.WalletPO{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
func TestRegisterCreatesCanonicalUserRoleWalletAndPolicies(t *testing.T) {
|
||||
db := openAccountTestDB(t)
|
||||
repo := NewRepo(testProvider{db: db})
|
||||
account, err := repo.Register(context.Background(), &biz.Account{Username: "viewer", Nickname: "Viewer"}, "password-hash", biz.InitialDiamonds)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if account.Username != "viewer" || account.AuthorityID != biz.ClientAuthorityID || account.DiamondBalance != biz.InitialDiamonds {
|
||||
t.Fatalf("account = %+v", account)
|
||||
}
|
||||
var user userPO
|
||||
var wallet ledger.WalletPO
|
||||
var links, policies int64
|
||||
if err = db.First(&user, account.UserID).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = db.Where("user_id = ?", account.UserID).First(&wallet).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
db.Model(&userAuthorityPO{}).Where("sys_user_id = ? AND sys_authority_authority_id = ?", account.UserID, biz.ClientAuthorityID).Count(&links)
|
||||
db.Model(&policyPO{}).Where("ptype = ? AND v0 = ?", "p", "1000").Count(&policies)
|
||||
if user.AuthorityID != biz.ClientAuthorityID || wallet.DiamondBalance != biz.InitialDiamonds || links != 1 || policies != int64(len(clientRoutes())) {
|
||||
t.Fatalf("registration state user=%+v wallet=%+v links=%d policies=%d", user, wallet, links, policies)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegisterDuplicateUsernameDoesNotCreateAnotherWallet(t *testing.T) {
|
||||
db := openAccountTestDB(t)
|
||||
repo := NewRepo(testProvider{db: db})
|
||||
if _, err := repo.Register(context.Background(), &biz.Account{Username: "viewer", Nickname: "Viewer"}, "hash", 100); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := repo.Register(context.Background(), &biz.Account{Username: "viewer", Nickname: "Other"}, "hash", 100); !errors.Is(err, biz.ErrUsernameExists) {
|
||||
t.Fatalf("duplicate error = %v", err)
|
||||
}
|
||||
var users, wallets int64
|
||||
db.Model(&userPO{}).Count(&users)
|
||||
db.Model(&ledger.WalletPO{}).Count(&wallets)
|
||||
if users != 1 || wallets != 1 {
|
||||
t.Fatalf("duplicate registration users=%d wallets=%d", users, wallets)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user