// Copyright (C) 2018 Marius Schellenberger package core import ( "fmt" "testing" ) func TestParsePermString(t *testing.T) { data := map[string]Permission{ "": Invalid, "1": Public, "2": Internal, "3": Private, "123": Invalid, "test": Invalid, } for k, v := range data { t.Run(k, func(t *testing.T) { if ParsePermString(k) != v { t.Fail() } }) } } func TestReadPerm(t *testing.T) { data := []struct { Username string Page *Page OK bool }{ {"", &Page{Perm: Invalid, Owner: "admin"}, false}, {"", &Page{Perm: Public, Owner: "admin"}, true}, {"user", &Page{Perm: Public, Owner: "admin"}, true}, {"", &Page{Perm: Internal, Owner: "admin"}, false}, {"user", &Page{Perm: Internal, Owner: "admin"}, true}, {"", &Page{Perm: Private, Owner: "admin"}, false}, {"user", &Page{Perm: Private, Owner: "admin"}, false}, {"admin", &Page{Perm: Private, Owner: "admin"}, true}, } for i, v := range data { t.Run(fmt.Sprintf("Read:%d", i), func(t *testing.T) { if ReadPerm(v.Username, v.Page) != v.OK { t.Fail() } }) } } func TestWritePerm(t *testing.T) { data := []struct { Username string Section string Page *Page OK bool }{ {"user", "admin", &Page{Perm: Invalid, Owner: "admin"}, false}, {"", "user", &Page{Perm: Invalid, Owner: "admin"}, false}, {"user", "user", &Page{Perm: Invalid, Owner: "user"}, false}, {"user", "user", &Page{Perm: Public, Owner: "user"}, true}, {"user", "user", &Page{Perm: Internal, Owner: "user"}, true}, {"user", "user", &Page{Perm: Private, Owner: "user"}, true}, {"", WikiSection, &Page{Perm: Invalid, Owner: "admin"}, false}, {"", WikiSection, &Page{Perm: Public, Owner: "admin"}, false}, {"", WikiSection, &Page{Perm: Internal, Owner: "admin"}, false}, {"user", WikiSection, &Page{Perm: Public, Owner: WikiSection}, true}, {"user", WikiSection, &Page{Perm: Internal, Owner: WikiSection}, true}, {"", "admin", &Page{Perm: Private, Owner: "admin"}, false}, {"user", "admin", &Page{Perm: Private, Owner: "admin"}, false}, {"admin", "admin", &Page{Perm: Private, Owner: "admin"}, true}, } for i, v := range data { t.Run(fmt.Sprintf("Write:%d", i), func(t *testing.T) { if WritePerm(v.Username, v.Section, v.Page) != v.OK { t.Fail() } }) } }