73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
|
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")
|
||
|
}
|
||
|
})
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
})
|
||
|
}
|