material_manage_system/internal/service/auth_test.go
2026-10-09 09:47:27 +08:00

59 lines
2.0 KiB
Go

package service
import (
"errors"
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/wmms/wmms/internal/model"
"github.com/wmms/wmms/internal/repository"
"github.com/wmms/wmms/pkg/database"
)
func TestGeneratedTokenCarriesEveryUserRole(t *testing.T) {
user := &model.User{
ID: 7,
Username: "zhangsan",
Roles: []model.Role{
{ID: 2, Code: "warehouse_admin", Name: "仓库管理员", Enabled: true},
{ID: 3, Code: "purchaser", Name: "采购人员", Enabled: true},
},
}
service := NewAuthService()
tokenString, err := service.GenerateToken(user)
if err != nil {
t.Fatalf("generate token: %v", err)
}
token, err := service.ValidateToken(tokenString)
if err != nil {
t.Fatalf("validate token: %v", err)
}
if len(token.Roles) != 2 || token.Roles[0] != "warehouse_admin" || token.Roles[1] != "purchaser" {
t.Fatalf("unexpected token roles: %+v", token.Roles)
}
}
func TestUserCreateOrganizationOmittedRejectsOrdinaryUser(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
t.Fatal(err)
}
database.DB = db
t.Cleanup(func() { database.DB = nil; db.Close() })
mock.ExpectBegin()
mock.ExpectExec("INSERT INTO users").WithArgs("new", sqlmock.AnyArg(), "").WillReturnResult(sqlmock.NewResult(7, 1))
mock.ExpectQuery("SELECT COUNT.*FROM roles").WithArgs(int64(2), int64(7)).WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(1))
mock.ExpectExec("INSERT INTO user_roles").WithArgs(int64(7), int64(2)).WillReturnResult(sqlmock.NewResult(0, 1))
mock.ExpectQuery("SELECT organization_id, is_default FROM user_organizations").WithArgs(int64(7)).WillReturnRows(sqlmock.NewRows([]string{"organization_id", "is_default"}))
mock.ExpectQuery("SELECT EXISTS").WithArgs(int64(7)).WillReturnRows(sqlmock.NewRows([]string{"admin"}).AddRow(false))
mock.ExpectRollback()
_, err = NewAuthService().CreateUser("new", "secret", "", []int64{2})
if !errors.Is(err, repository.ErrInvalidOrganizations) {
t.Fatalf("want invalid organizations, got %v", err)
}
if err := mock.ExpectationsWereMet(); err != nil {
t.Fatal(err)
}
}