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