minecraft-server-invites/invite/invite_test.go

87 lines
1.9 KiB
Go
Raw Normal View History

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")
}
})
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)
}
})
}