2022-07-16 02:44:32 +01:00
|
|
|
package invite_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/golang/mock/gomock"
|
|
|
|
|
|
|
|
"whitelistmanager/invite"
|
|
|
|
mock_store "whitelistmanager/mocks/store"
|
|
|
|
"whitelistmanager/store"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestInvite(t *testing.T) {
|
|
|
|
ctrl := gomock.NewController(t)
|
|
|
|
st := mock_store.NewMockStorer(ctrl)
|
|
|
|
inm := invite.NewManager(st)
|
|
|
|
|
|
|
|
user := store.User{Id: "1"}
|
|
|
|
|
|
|
|
server := store.Server{
|
|
|
|
Id: "1",
|
|
|
|
Owner: user,
|
|
|
|
}
|
|
|
|
|
|
|
|
inv := store.Invite{
|
|
|
|
Token: "foo",
|
|
|
|
Server: server,
|
|
|
|
Uses: 1,
|
|
|
|
Unlimited: false,
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("generate invite successfully", func(t *testing.T) {
|
|
|
|
st.EXPECT().GetServer(server.Id).Return(server, nil)
|
|
|
|
st.EXPECT().GetInvite(gomock.Any()).Return(store.Invite{}, sql.ErrNoRows)
|
|
|
|
st.EXPECT().SaveInvite(gomock.Any()).Return(nil)
|
|
|
|
|
|
|
|
token, err := inm.Create(inv, user)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if token == "" {
|
|
|
|
t.Errorf("expected non empty string, but got empty string")
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2022-07-16 02:46:43 +01:00
|
|
|
t.Run("generate invite successfully when one already exists", func(t *testing.T) {
|
|
|
|
st.EXPECT().GetServer(server.Id).Return(server, nil)
|
|
|
|
st.EXPECT().GetInvite(gomock.Any()).Return(store.Invite{}, nil)
|
|
|
|
st.EXPECT().SaveInvite(gomock.Any()).Return(nil)
|
|
|
|
|
|
|
|
token, err := inm.Create(inv, user)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if token == "" {
|
|
|
|
t.Errorf("expected non empty string, but got empty string")
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2022-07-16 02:44:32 +01:00
|
|
|
t.Run("no logged uses of invite", func(t *testing.T) {
|
|
|
|
st.EXPECT().InviteLog(inv).Return([]store.InviteLog{}, nil)
|
|
|
|
uses, err := inm.RemainingUses(inv)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if uses != inv.Uses {
|
|
|
|
t.Errorf("remaining uses is not correctly calculated: got %v want %v",
|
|
|
|
uses, inv.Uses)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("one logged use of invite", func(t *testing.T) {
|
|
|
|
st.EXPECT().InviteLog(inv).Return(make([]store.InviteLog, 1), nil)
|
|
|
|
uses, err := inm.RemainingUses(inv)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if uses != 0 {
|
|
|
|
t.Errorf("remaining uses is not correctly calculated: got %v want %v",
|
|
|
|
uses, 0)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|