99 lines
2.0 KiB
Go
99 lines
2.0 KiB
Go
|
package rbac
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
_ "github.com/mattn/go-sqlite3"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func compareSlices(a, b []Role) bool {
|
||
|
if len(a) != len(b) {
|
||
|
return false
|
||
|
}
|
||
|
for i, v := range a {
|
||
|
if v != b[i] {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func TestSqlRbacStore(t *testing.T) {
|
||
|
db, err := sql.Open("sqlite3", ":memory:")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
defer db.Close()
|
||
|
|
||
|
store, err := NewSqlRbacStore(db)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// Create test data
|
||
|
_, err = db.Exec(`
|
||
|
INSERT INTO roles (id, name) VALUES (1, 'admin');
|
||
|
INSERT INTO user_roles (user_id, role_id) VALUES (1, 1);
|
||
|
INSERT INTO capabilities (id, name, description) VALUES (1, 'Send Email', '');
|
||
|
INSERT INTO role_capabilities (role_id, capability_id) VALUES (1, 1);
|
||
|
`)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
userID int
|
||
|
capability string
|
||
|
wantHas bool
|
||
|
}{
|
||
|
{
|
||
|
name: "User has capability",
|
||
|
userID: 1,
|
||
|
capability: "Send Email",
|
||
|
wantHas: true,
|
||
|
},
|
||
|
{
|
||
|
name: "User does not have capability",
|
||
|
userID: 2,
|
||
|
capability: "Send Email",
|
||
|
wantHas: false,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
has, err := store.HasCapability(tt.userID, tt.capability)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if has != tt.wantHas {
|
||
|
t.Errorf("want %v, got %v", tt.wantHas, has)
|
||
|
}
|
||
|
|
||
|
roles, err := store.GetUserRoles(tt.userID)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
wantRoles := []Role{}
|
||
|
if tt.userID == 1 {
|
||
|
wantRoles = append(wantRoles, Role{ID: 1, Name: "admin"})
|
||
|
}
|
||
|
if !compareSlices(roles, wantRoles) {
|
||
|
t.Errorf("want %v, got %v", wantRoles, roles)
|
||
|
}
|
||
|
|
||
|
capabilities, err := store.GetRoleCapabilities(1)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
wantCapabilities := []Capability{{ID: 1, Name: "Send Email"}}
|
||
|
if !reflect.DeepEqual(capabilities, wantCapabilities) {
|
||
|
t.Errorf("want %v, got %v", wantCapabilities, capabilities)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
}
|