74 рядки
1.9 KiB
Go
74 рядки
1.9 KiB
Go
package domain
|
|
|
|
import "testing"
|
|
|
|
func TestAllowed(t *testing.T) {
|
|
roles := []Role{RoleOwner, RoleEditor, RoleReader}
|
|
tests := []struct {
|
|
name string
|
|
action Action
|
|
want map[Role]bool
|
|
}{
|
|
{
|
|
name: "view list",
|
|
action: ActionViewList,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: true},
|
|
},
|
|
{
|
|
name: "edit list meta",
|
|
action: ActionEditListMeta,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: false, RoleReader: false},
|
|
},
|
|
{
|
|
name: "delete list",
|
|
action: ActionDeleteList,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: false, RoleReader: false},
|
|
},
|
|
{
|
|
name: "manage shares",
|
|
action: ActionManageShares,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: false, RoleReader: false},
|
|
},
|
|
{
|
|
name: "view items",
|
|
action: ActionViewItems,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: true},
|
|
},
|
|
{
|
|
name: "add item",
|
|
action: ActionAddItem,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: false},
|
|
},
|
|
{
|
|
name: "edit item",
|
|
action: ActionEditItem,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: false},
|
|
},
|
|
{
|
|
name: "delete item",
|
|
action: ActionDeleteItem,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: false},
|
|
},
|
|
{
|
|
name: "change item state",
|
|
action: ActionChangeItemState,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: false},
|
|
},
|
|
{
|
|
name: "reserve item",
|
|
action: ActionReserveItem,
|
|
want: map[Role]bool{RoleOwner: true, RoleEditor: true, RoleReader: false},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
for _, role := range roles {
|
|
if got := Allowed(role, tt.action); got != tt.want[role] {
|
|
t.Fatalf("Allowed(%s, %v) = %v, want %v", role, tt.action, got, tt.want[role])
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|