test invite creation under community & restricted for admin, mod & member
Update web/handlers/admin/setup_test.go Co-authored-by: Henry <111202+cryptix@users.noreply.github.com>
This commit is contained in:
parent
80686dec26
commit
ab06233f28
|
@ -76,11 +76,11 @@ func (h invitesHandler) create(w http.ResponseWriter, req *http.Request) (interf
|
|||
case roomdb.ModeOpen:
|
||||
case roomdb.ModeCommunity:
|
||||
if member.Role == roomdb.RoleUnknown {
|
||||
return nil, fmt.Errorf("warning: member with unknown role tried to create an invite")
|
||||
return nil, weberrors.ErrNotAuthorized
|
||||
}
|
||||
case roomdb.ModeRestricted:
|
||||
if member.Role == roomdb.RoleMember || member.Role == roomdb.RoleUnknown {
|
||||
return nil, fmt.Errorf("warning: non-admin/mod user tried to create an invite")
|
||||
return nil, weberrors.ErrNotAuthorized
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package admin
|
|||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"testing"
|
||||
|
||||
|
@ -143,17 +144,29 @@ func TestInvitesCreate(t *testing.T) {
|
|||
a := assert.New(t)
|
||||
r := require.New(t)
|
||||
|
||||
urlRemove := ts.URLTo(router.AdminInvitesCreate)
|
||||
urlCreate := ts.URLTo(router.AdminInvitesCreate)
|
||||
|
||||
testInvite := "your-fake-test-invite"
|
||||
ts.InvitesDB.CreateReturns(testInvite, nil)
|
||||
|
||||
rec := ts.Client.PostForm(urlRemove, url.Values{})
|
||||
a.Equal(http.StatusOK, rec.Code)
|
||||
totalCreateCallCount := 0
|
||||
createInviteShouldWork := func(works bool) *httptest.ResponseRecorder {
|
||||
rec := ts.Client.PostForm(urlCreate, url.Values{})
|
||||
if works {
|
||||
totalCreateCallCount += 1
|
||||
a.Equal(http.StatusOK, rec.Code)
|
||||
r.Equal(totalCreateCallCount, ts.InvitesDB.CreateCallCount())
|
||||
_, userID := ts.InvitesDB.CreateArgsForCall(totalCreateCallCount - 1)
|
||||
a.EqualValues(ts.User.ID, userID)
|
||||
} else {
|
||||
// TODO: status should be http.StatusForbidden? see invites.go:79
|
||||
a.Equal(http.StatusInternalServerError, rec.Code)
|
||||
r.Equal(totalCreateCallCount, ts.InvitesDB.CreateCallCount())
|
||||
}
|
||||
return rec
|
||||
}
|
||||
|
||||
r.Equal(1, ts.InvitesDB.CreateCallCount(), "expected one invites.Create call")
|
||||
_, userID := ts.InvitesDB.CreateArgsForCall(0)
|
||||
a.EqualValues(ts.User.ID, userID)
|
||||
rec := createInviteShouldWork(true)
|
||||
|
||||
doc, err := goquery.NewDocumentFromReader(rec.Body)
|
||||
require.NoError(t, err, "failed to parse response")
|
||||
|
@ -167,4 +180,34 @@ func TestInvitesCreate(t *testing.T) {
|
|||
|
||||
shownLink := doc.Find("#invite-facade-link").Text()
|
||||
a.Equal(wantURL.String(), shownLink)
|
||||
|
||||
memberUser := roomdb.Member{
|
||||
ID: 7331,
|
||||
Role: roomdb.RoleMember,
|
||||
PubKey: generatePubKey(),
|
||||
}
|
||||
modUser := roomdb.Member{
|
||||
ID: 9001,
|
||||
Role: roomdb.RoleModerator,
|
||||
PubKey: generatePubKey(),
|
||||
}
|
||||
adminUser := roomdb.Member{
|
||||
ID: 1337,
|
||||
Role: roomdb.RoleAdmin,
|
||||
PubKey: generatePubKey(),
|
||||
}
|
||||
|
||||
/* test invite creation under various restricted mode with the roles member, mod, admin */
|
||||
modes := []roomdb.PrivacyMode{roomdb.ModeRestricted, roomdb.ModeCommunity}
|
||||
for _, mode := range modes {
|
||||
ts.ConfigDB.GetPrivacyModeReturns(mode, nil)
|
||||
ts.User = memberUser
|
||||
// members can only invite in community rooms
|
||||
createInviteShouldWork(mode == roomdb.ModeCommunity)
|
||||
// mods & admins can always invite
|
||||
ts.User = modUser
|
||||
createInviteShouldWork(true)
|
||||
ts.User = adminUser
|
||||
createInviteShouldWork(true)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,6 +56,14 @@ type testSession struct {
|
|||
RoomState *roomstate.Manager
|
||||
}
|
||||
|
||||
var pubKeyCount byte
|
||||
|
||||
func generatePubKey() refs.FeedRef {
|
||||
pk := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{pubKeyCount}, 32)}
|
||||
pubKeyCount++
|
||||
return pk
|
||||
}
|
||||
|
||||
func newSession(t *testing.T) *testSession {
|
||||
var ts testSession
|
||||
|
||||
|
@ -76,7 +84,7 @@ func newSession(t *testing.T) *testSession {
|
|||
|
||||
ts.netInfo = network.ServerEndpointDetails{
|
||||
Domain: randutil.String(10),
|
||||
RoomID: refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{0}, 32)},
|
||||
RoomID: generatePubKey(),
|
||||
|
||||
UseSubdomainForAliases: true,
|
||||
}
|
||||
|
@ -97,12 +105,9 @@ func newSession(t *testing.T) *testSession {
|
|||
|
||||
// fake user
|
||||
ts.User = roomdb.Member{
|
||||
ID: 1234,
|
||||
Role: roomdb.RoleModerator,
|
||||
PubKey: refs.FeedRef{
|
||||
ID: bytes.Repeat([]byte("0"), 32),
|
||||
Algo: "ed25519",
|
||||
},
|
||||
ID: 1234,
|
||||
Role: roomdb.RoleModerator,
|
||||
PubKey: generatePubKey(),
|
||||
}
|
||||
|
||||
testPath := filepath.Join("testrun", t.Name())
|
||||
|
|
Loading…
Reference in New Issue