fix: accept invites as an existing member is ok

PR #302

Closes https://github.com/ssb-ngi-pointer/go-ssb-room/issues/299.

Co-authored-by: decentral1se <cellarspoon@riseup.net>
This commit is contained in:
decentral1se 2022-03-28 12:48:00 +02:00 committed by GitHub
parent 6f5edbaa43
commit 49aaff968f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 1 deletions

View File

@ -130,8 +130,13 @@ func (i Invites) Consume(ctx context.Context, token string, newMember refs.FeedR
}
_, err = i.members.add(ctx, tx, newMember, roomdb.RoleMember)
var alreadyAdded roomdb.ErrAlreadyAdded
if err != nil {
return err
if errors.As(err, &alreadyAdded) && alreadyAdded.Ref.Equal(&newMember) {
// it is fine to use an invite twice
} else {
return err
}
}
// invalidate the invite for consumption

View File

@ -132,4 +132,21 @@ func TestInvites(t *testing.T) {
r.Error(err, "failed to consume the invite")
})
t.Run("invite member again", func(t *testing.T) {
r := require.New(t)
tok, err := db.Invites.Create(ctx, mid)
r.NoError(err, "failed to create invite token")
lst, err := db.Invites.List(ctx)
r.NoError(err, "failed to get list of tokens")
r.Len(lst, 1, "expected 1 invite")
_, err = db.Invites.Consume(ctx, tok, newMember)
r.NoError(err, "failed to consume the invite")
lst, err = db.Invites.List(ctx)
r.NoError(err, "failed to get list of tokens post consume")
r.Len(lst, 0, "expected no active invites")
})
}