aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hotline/ban.go74
-rw-r--r--hotline/chat.go37
-rw-r--r--hotline/client_manager.go25
-rw-r--r--hotline/file_store.go120
-rw-r--r--hotline/hltest/mocks.go319
-rw-r--r--hotline/mocks_test.go160
-rw-r--r--hotline/news.go52
-rw-r--r--internal/mobius/account_manager.go41
-rw-r--r--internal/mobius/handlers_accounts_test.go21
-rw-r--r--internal/mobius/handlers_chat_test.go93
-rw-r--r--internal/mobius/handlers_files_test.go73
-rw-r--r--internal/mobius/handlers_news_test.go57
-rw-r--r--internal/mobius/handlers_session_test.go67
-rw-r--r--internal/mobius/handlers_transfers_test.go4
-rw-r--r--internal/mobius/mocks_test.go48
15 files changed, 691 insertions, 500 deletions
diff --git a/hotline/ban.go b/hotline/ban.go
index 43988ab..343c4ff 100644
--- a/hotline/ban.go
+++ b/hotline/ban.go
@@ -2,8 +2,6 @@ package hotline
import (
"time"
-
- "github.com/stretchr/testify/mock"
)
// BanDuration is the length of time for temporary bans.
@@ -20,86 +18,22 @@ const (
type BanMgr interface {
Add(ip string, until *time.Time) error
IsBanned(ip string) (bool, *time.Time)
-
+
// IP banning
UnbanIP(ip string) error
-
+
// Username banning
BanUsername(username string) error
UnbanUsername(username string) error
IsUsernameBanned(username string) bool
-
+
// Nickname banning
BanNickname(nickname string) error
UnbanNickname(nickname string) error
IsNicknameBanned(nickname string) bool
-
+
// List operations
ListBannedIPs() ([]string, error)
ListBannedUsernames() ([]string, error)
ListBannedNicknames() ([]string, error)
}
-
-type MockBanMgr struct {
- mock.Mock
-}
-
-func (m *MockBanMgr) Add(ip string, until *time.Time) error {
- args := m.Called(ip, until)
- return args.Error(0)
-}
-
-func (m *MockBanMgr) IsBanned(ip string) (bool, *time.Time) {
- args := m.Called(ip)
- return args.Bool(0), args.Get(1).(*time.Time)
-}
-
-func (m *MockBanMgr) UnbanIP(ip string) error {
- args := m.Called(ip)
- return args.Error(0)
-}
-
-func (m *MockBanMgr) BanUsername(username string) error {
- args := m.Called(username)
- return args.Error(0)
-}
-
-func (m *MockBanMgr) UnbanUsername(username string) error {
- args := m.Called(username)
- return args.Error(0)
-}
-
-func (m *MockBanMgr) IsUsernameBanned(username string) bool {
- args := m.Called(username)
- return args.Bool(0)
-}
-
-func (m *MockBanMgr) BanNickname(nickname string) error {
- args := m.Called(nickname)
- return args.Error(0)
-}
-
-func (m *MockBanMgr) UnbanNickname(nickname string) error {
- args := m.Called(nickname)
- return args.Error(0)
-}
-
-func (m *MockBanMgr) IsNicknameBanned(nickname string) bool {
- args := m.Called(nickname)
- return args.Bool(0)
-}
-
-func (m *MockBanMgr) ListBannedIPs() ([]string, error) {
- args := m.Called()
- return args.Get(0).([]string), args.Error(1)
-}
-
-func (m *MockBanMgr) ListBannedUsernames() ([]string, error) {
- args := m.Called()
- return args.Get(0).([]string), args.Error(1)
-}
-
-func (m *MockBanMgr) ListBannedNicknames() ([]string, error) {
- args := m.Called()
- return args.Get(0).([]string), args.Error(1)
-}
diff --git a/hotline/chat.go b/hotline/chat.go
index f35fac5..00ae8ea 100644
--- a/hotline/chat.go
+++ b/hotline/chat.go
@@ -4,8 +4,6 @@ import (
"crypto/rand"
"slices"
"sync"
-
- "github.com/stretchr/testify/mock"
)
type PrivateChat struct {
@@ -101,38 +99,3 @@ func (cm *MemChatManager) SetSubject(id ChatID, subject string) {
chat.Subject = subject
}
-
-type MockChatManager struct {
- mock.Mock
-}
-
-func (m *MockChatManager) New(cc *ClientConn) ChatID {
- args := m.Called(cc)
-
- return args.Get(0).(ChatID)
-}
-
-func (m *MockChatManager) GetSubject(id ChatID) string {
- args := m.Called(id)
-
- return args.String(0)
-}
-
-func (m *MockChatManager) Join(id ChatID, cc *ClientConn) {
- m.Called(id, cc)
-}
-
-func (m *MockChatManager) Leave(id ChatID, clientID [2]byte) {
- m.Called(id, clientID)
-}
-
-func (m *MockChatManager) SetSubject(id ChatID, subject string) {
- m.Called(id, subject)
-
-}
-
-func (m *MockChatManager) Members(id ChatID) []*ClientConn {
- args := m.Called(id)
-
- return args.Get(0).([]*ClientConn)
-}
diff --git a/hotline/client_manager.go b/hotline/client_manager.go
index 22d096d..60f0388 100644
--- a/hotline/client_manager.go
+++ b/hotline/client_manager.go
@@ -6,8 +6,6 @@ import (
"slices"
"sync"
"sync/atomic"
-
- "github.com/stretchr/testify/mock"
)
type ClientID [2]byte
@@ -19,29 +17,6 @@ type ClientManager interface {
Delete(id ClientID)
}
-type MockClientMgr struct {
- mock.Mock
-}
-
-func (m *MockClientMgr) List() []*ClientConn {
- args := m.Called()
-
- return args.Get(0).([]*ClientConn)
-}
-
-func (m *MockClientMgr) Get(id ClientID) *ClientConn {
- args := m.Called(id)
-
- return args.Get(0).(*ClientConn)
-}
-
-func (m *MockClientMgr) Add(cc *ClientConn) {
- m.Called(cc)
-}
-func (m *MockClientMgr) Delete(id ClientID) {
- m.Called(id)
-}
-
type MemClientMgr struct {
clients map[ClientID]*ClientConn
diff --git a/hotline/file_store.go b/hotline/file_store.go
index 8cf1403..735ff69 100644
--- a/hotline/file_store.go
+++ b/hotline/file_store.go
@@ -5,9 +5,6 @@ import (
"io/fs"
"os"
"path/filepath"
- "time"
-
- "github.com/stretchr/testify/mock"
)
// FileStore is the storage backend for the file library (the FileRoot that clients browse,
@@ -111,120 +108,3 @@ func (*OSFileStore) OpenFile(name string, flag int, perm fs.FileMode) (io.WriteC
}
return f, nil
}
-
-type MockFileStore struct {
- mock.Mock
-}
-
-var _ FileStore = (*MockFileStore)(nil)
-
-func (mfs *MockFileStore) Mkdir(name string, perm fs.FileMode) error {
- args := mfs.Called(name, perm)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) Stat(name string) (fs.FileInfo, error) {
- args := mfs.Called(name)
- if args.Get(0) == nil {
- return nil, args.Error(1)
- }
- return args.Get(0).(fs.FileInfo), args.Error(1)
-}
-
-func (mfs *MockFileStore) Open(name string) (io.ReadCloser, error) {
- args := mfs.Called(name)
- f, _ := args.Get(0).(io.ReadCloser)
- return f, args.Error(1)
-}
-
-func (mfs *MockFileStore) ReadDir(name string) ([]fs.DirEntry, error) {
- args := mfs.Called(name)
- entries, _ := args.Get(0).([]fs.DirEntry)
- return entries, args.Error(1)
-}
-
-func (mfs *MockFileStore) ReadLink(name string) (string, error) {
- args := mfs.Called(name)
- return args.String(0), args.Error(1)
-}
-
-func (mfs *MockFileStore) Walk(root string, fn filepath.WalkFunc) error {
- args := mfs.Called(root, fn)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) OpenFile(name string, flag int, perm fs.FileMode) (io.WriteCloser, error) {
- args := mfs.Called(name, flag, perm)
- f, _ := args.Get(0).(io.WriteCloser)
- return f, args.Error(1)
-}
-
-func (mfs *MockFileStore) Symlink(oldname, newname string) error {
- args := mfs.Called(oldname, newname)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) RemoveAll(name string) error {
- args := mfs.Called(name)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) Remove(name string) error {
- args := mfs.Called(name)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) Create(name string) (io.WriteCloser, error) {
- args := mfs.Called(name)
- f, _ := args.Get(0).(io.WriteCloser)
- return f, args.Error(1)
-}
-
-func (mfs *MockFileStore) WriteFile(name string, data []byte, perm fs.FileMode) error {
- args := mfs.Called(name, data, perm)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) Rename(oldpath, newpath string) error {
- args := mfs.Called(oldpath, newpath)
- return args.Error(0)
-}
-
-func (mfs *MockFileStore) ReadFile(name string) ([]byte, error) {
- args := mfs.Called(name)
- return args.Get(0).([]byte), args.Error(1)
-}
-
-type MockFileInfo struct {
- mock.Mock
-}
-
-func (mfi *MockFileInfo) Name() string {
- args := mfi.Called()
- return args.String(0)
-}
-
-func (mfi *MockFileInfo) Size() int64 {
- args := mfi.Called()
- return args.Get(0).(int64)
-}
-
-func (mfi *MockFileInfo) Mode() fs.FileMode {
- args := mfi.Called()
- return args.Get(0).(fs.FileMode)
-}
-
-func (mfi *MockFileInfo) ModTime() time.Time {
- _ = mfi.Called()
- return time.Now()
-}
-
-func (mfi *MockFileInfo) IsDir() bool {
- args := mfi.Called()
- return args.Bool(0)
-}
-
-func (mfi *MockFileInfo) Sys() interface{} {
- _ = mfi.Called()
- return nil
-}
diff --git a/hotline/hltest/mocks.go b/hotline/hltest/mocks.go
new file mode 100644
index 0000000..2f9b9b1
--- /dev/null
+++ b/hotline/hltest/mocks.go
@@ -0,0 +1,319 @@
+// Package hltest provides testify mocks for the hotline package's manager interfaces, for use by
+// tests in other packages (which cannot import another package's _test.go files). Keeping them
+// here rather than in the hotline package itself keeps testify out of the production dependency
+// graph of importers and the mocks out of the library's API surface.
+//
+// The hotline package's own in-package tests cannot import this package (it would create an import
+// cycle through hotline) and instead use private copies in hotline/mocks_test.go.
+package hltest
+
+import (
+ "io"
+ "io/fs"
+ "path/filepath"
+ "time"
+
+ "github.com/jhalter/mobius/hotline"
+ "github.com/stretchr/testify/mock"
+)
+
+type MockFileStore struct {
+ mock.Mock
+}
+
+var _ hotline.FileStore = (*MockFileStore)(nil)
+
+func (mfs *MockFileStore) Mkdir(name string, perm fs.FileMode) error {
+ args := mfs.Called(name, perm)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Stat(name string) (fs.FileInfo, error) {
+ args := mfs.Called(name)
+ if args.Get(0) == nil {
+ return nil, args.Error(1)
+ }
+ return args.Get(0).(fs.FileInfo), args.Error(1)
+}
+
+func (mfs *MockFileStore) Open(name string) (io.ReadCloser, error) {
+ args := mfs.Called(name)
+ f, _ := args.Get(0).(io.ReadCloser)
+ return f, args.Error(1)
+}
+
+func (mfs *MockFileStore) ReadDir(name string) ([]fs.DirEntry, error) {
+ args := mfs.Called(name)
+ entries, _ := args.Get(0).([]fs.DirEntry)
+ return entries, args.Error(1)
+}
+
+func (mfs *MockFileStore) ReadLink(name string) (string, error) {
+ args := mfs.Called(name)
+ return args.String(0), args.Error(1)
+}
+
+func (mfs *MockFileStore) Walk(root string, fn filepath.WalkFunc) error {
+ args := mfs.Called(root, fn)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) OpenFile(name string, flag int, perm fs.FileMode) (io.WriteCloser, error) {
+ args := mfs.Called(name, flag, perm)
+ f, _ := args.Get(0).(io.WriteCloser)
+ return f, args.Error(1)
+}
+
+func (mfs *MockFileStore) Symlink(oldname, newname string) error {
+ args := mfs.Called(oldname, newname)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) RemoveAll(name string) error {
+ args := mfs.Called(name)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Remove(name string) error {
+ args := mfs.Called(name)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Create(name string) (io.WriteCloser, error) {
+ args := mfs.Called(name)
+ f, _ := args.Get(0).(io.WriteCloser)
+ return f, args.Error(1)
+}
+
+func (mfs *MockFileStore) WriteFile(name string, data []byte, perm fs.FileMode) error {
+ args := mfs.Called(name, data, perm)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Rename(oldpath, newpath string) error {
+ args := mfs.Called(oldpath, newpath)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) ReadFile(name string) ([]byte, error) {
+ args := mfs.Called(name)
+ return args.Get(0).([]byte), args.Error(1)
+}
+
+type MockFileInfo struct {
+ mock.Mock
+}
+
+var _ fs.FileInfo = (*MockFileInfo)(nil)
+
+func (mfi *MockFileInfo) Name() string {
+ args := mfi.Called()
+ return args.String(0)
+}
+
+func (mfi *MockFileInfo) Size() int64 {
+ args := mfi.Called()
+ return args.Get(0).(int64)
+}
+
+func (mfi *MockFileInfo) Mode() fs.FileMode {
+ args := mfi.Called()
+ return args.Get(0).(fs.FileMode)
+}
+
+func (mfi *MockFileInfo) ModTime() time.Time {
+ _ = mfi.Called()
+ return time.Now()
+}
+
+func (mfi *MockFileInfo) IsDir() bool {
+ args := mfi.Called()
+ return args.Bool(0)
+}
+
+func (mfi *MockFileInfo) Sys() interface{} {
+ _ = mfi.Called()
+ return nil
+}
+
+type MockClientMgr struct {
+ mock.Mock
+}
+
+var _ hotline.ClientManager = (*MockClientMgr)(nil)
+
+func (m *MockClientMgr) List() []*hotline.ClientConn {
+ args := m.Called()
+
+ return args.Get(0).([]*hotline.ClientConn)
+}
+
+func (m *MockClientMgr) Get(id hotline.ClientID) *hotline.ClientConn {
+ args := m.Called(id)
+
+ return args.Get(0).(*hotline.ClientConn)
+}
+
+func (m *MockClientMgr) Add(cc *hotline.ClientConn) {
+ m.Called(cc)
+}
+
+func (m *MockClientMgr) Delete(id hotline.ClientID) {
+ m.Called(id)
+}
+
+type MockBanMgr struct {
+ mock.Mock
+}
+
+var _ hotline.BanMgr = (*MockBanMgr)(nil)
+
+func (m *MockBanMgr) Add(ip string, until *time.Time) error {
+ args := m.Called(ip, until)
+ return args.Error(0)
+}
+
+func (m *MockBanMgr) IsBanned(ip string) (bool, *time.Time) {
+ args := m.Called(ip)
+ return args.Bool(0), args.Get(1).(*time.Time)
+}
+
+func (m *MockBanMgr) UnbanIP(ip string) error {
+ args := m.Called(ip)
+ return args.Error(0)
+}
+
+func (m *MockBanMgr) BanUsername(username string) error {
+ args := m.Called(username)
+ return args.Error(0)
+}
+
+func (m *MockBanMgr) UnbanUsername(username string) error {
+ args := m.Called(username)
+ return args.Error(0)
+}
+
+func (m *MockBanMgr) IsUsernameBanned(username string) bool {
+ args := m.Called(username)
+ return args.Bool(0)
+}
+
+func (m *MockBanMgr) BanNickname(nickname string) error {
+ args := m.Called(nickname)
+ return args.Error(0)
+}
+
+func (m *MockBanMgr) UnbanNickname(nickname string) error {
+ args := m.Called(nickname)
+ return args.Error(0)
+}
+
+func (m *MockBanMgr) IsNicknameBanned(nickname string) bool {
+ args := m.Called(nickname)
+ return args.Bool(0)
+}
+
+func (m *MockBanMgr) ListBannedIPs() ([]string, error) {
+ args := m.Called()
+ return args.Get(0).([]string), args.Error(1)
+}
+
+func (m *MockBanMgr) ListBannedUsernames() ([]string, error) {
+ args := m.Called()
+ return args.Get(0).([]string), args.Error(1)
+}
+
+func (m *MockBanMgr) ListBannedNicknames() ([]string, error) {
+ args := m.Called()
+ return args.Get(0).([]string), args.Error(1)
+}
+
+type MockChatManager struct {
+ mock.Mock
+}
+
+var _ hotline.ChatManager = (*MockChatManager)(nil)
+
+func (m *MockChatManager) New(cc *hotline.ClientConn) hotline.ChatID {
+ args := m.Called(cc)
+
+ return args.Get(0).(hotline.ChatID)
+}
+
+func (m *MockChatManager) GetSubject(id hotline.ChatID) string {
+ args := m.Called(id)
+
+ return args.String(0)
+}
+
+func (m *MockChatManager) Join(id hotline.ChatID, cc *hotline.ClientConn) {
+ m.Called(id, cc)
+}
+
+func (m *MockChatManager) Leave(id hotline.ChatID, clientID [2]byte) {
+ m.Called(id, clientID)
+}
+
+func (m *MockChatManager) SetSubject(id hotline.ChatID, subject string) {
+ m.Called(id, subject)
+}
+
+func (m *MockChatManager) Members(id hotline.ChatID) []*hotline.ClientConn {
+ args := m.Called(id)
+
+ return args.Get(0).([]*hotline.ClientConn)
+}
+
+type MockThreadNewsMgr struct {
+ mock.Mock
+}
+
+var _ hotline.ThreadedNewsMgr = (*MockThreadNewsMgr)(nil)
+
+func (m *MockThreadNewsMgr) ListArticles(newsPath []string) (hotline.NewsArtListData, error) {
+ args := m.Called(newsPath)
+
+ return args.Get(0).(hotline.NewsArtListData), args.Error(1)
+}
+
+func (m *MockThreadNewsMgr) GetArticle(newsPath []string, articleID uint32) *hotline.NewsArtData {
+ args := m.Called(newsPath, articleID)
+
+ return args.Get(0).(*hotline.NewsArtData)
+}
+
+func (m *MockThreadNewsMgr) DeleteArticle(newsPath []string, articleID uint32, recursive bool) error {
+ args := m.Called(newsPath, articleID, recursive)
+
+ return args.Error(0)
+}
+
+func (m *MockThreadNewsMgr) PostArticle(newsPath []string, parentArticleID uint32, article hotline.NewsArtData) error {
+ args := m.Called(newsPath, parentArticleID, article)
+
+ return args.Error(0)
+}
+
+func (m *MockThreadNewsMgr) CreateGrouping(newsPath []string, name string, itemType [2]byte) error {
+ args := m.Called(newsPath, name, itemType)
+
+ return args.Error(0)
+}
+
+func (m *MockThreadNewsMgr) GetCategories(paths []string) []hotline.NewsCategoryListData15 {
+ args := m.Called(paths)
+
+ return args.Get(0).([]hotline.NewsCategoryListData15)
+}
+
+func (m *MockThreadNewsMgr) NewsItem(newsPath []string) hotline.NewsCategoryListData15 {
+ args := m.Called(newsPath)
+
+ return args.Get(0).(hotline.NewsCategoryListData15)
+}
+
+func (m *MockThreadNewsMgr) DeleteNewsItem(newsPath []string) error {
+ args := m.Called(newsPath)
+
+ return args.Error(0)
+}
diff --git a/hotline/mocks_test.go b/hotline/mocks_test.go
new file mode 100644
index 0000000..bd17b3b
--- /dev/null
+++ b/hotline/mocks_test.go
@@ -0,0 +1,160 @@
+package hotline
+
+// In-package copies of the mocks these tests need. They cannot use hotline/hltest — importing it
+// from an in-package test would create an import cycle through hotline — so the mocks used by
+// in-package tests live here. Cross-package consumers use hotline/hltest instead; keep the two in
+// sync (the conformance assertions in both files catch signature drift).
+
+import (
+ "io"
+ "io/fs"
+ "path/filepath"
+ "time"
+
+ "github.com/stretchr/testify/mock"
+)
+
+type MockFileStore struct {
+ mock.Mock
+}
+
+var _ FileStore = (*MockFileStore)(nil)
+
+func (mfs *MockFileStore) Mkdir(name string, perm fs.FileMode) error {
+ args := mfs.Called(name, perm)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Stat(name string) (fs.FileInfo, error) {
+ args := mfs.Called(name)
+ if args.Get(0) == nil {
+ return nil, args.Error(1)
+ }
+ return args.Get(0).(fs.FileInfo), args.Error(1)
+}
+
+func (mfs *MockFileStore) Open(name string) (io.ReadCloser, error) {
+ args := mfs.Called(name)
+ f, _ := args.Get(0).(io.ReadCloser)
+ return f, args.Error(1)
+}
+
+func (mfs *MockFileStore) ReadDir(name string) ([]fs.DirEntry, error) {
+ args := mfs.Called(name)
+ entries, _ := args.Get(0).([]fs.DirEntry)
+ return entries, args.Error(1)
+}
+
+func (mfs *MockFileStore) ReadLink(name string) (string, error) {
+ args := mfs.Called(name)
+ return args.String(0), args.Error(1)
+}
+
+func (mfs *MockFileStore) Walk(root string, fn filepath.WalkFunc) error {
+ args := mfs.Called(root, fn)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) OpenFile(name string, flag int, perm fs.FileMode) (io.WriteCloser, error) {
+ args := mfs.Called(name, flag, perm)
+ f, _ := args.Get(0).(io.WriteCloser)
+ return f, args.Error(1)
+}
+
+func (mfs *MockFileStore) Symlink(oldname, newname string) error {
+ args := mfs.Called(oldname, newname)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) RemoveAll(name string) error {
+ args := mfs.Called(name)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Remove(name string) error {
+ args := mfs.Called(name)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Create(name string) (io.WriteCloser, error) {
+ args := mfs.Called(name)
+ f, _ := args.Get(0).(io.WriteCloser)
+ return f, args.Error(1)
+}
+
+func (mfs *MockFileStore) WriteFile(name string, data []byte, perm fs.FileMode) error {
+ args := mfs.Called(name, data, perm)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) Rename(oldpath, newpath string) error {
+ args := mfs.Called(oldpath, newpath)
+ return args.Error(0)
+}
+
+func (mfs *MockFileStore) ReadFile(name string) ([]byte, error) {
+ args := mfs.Called(name)
+ return args.Get(0).([]byte), args.Error(1)
+}
+
+type MockFileInfo struct {
+ mock.Mock
+}
+
+var _ fs.FileInfo = (*MockFileInfo)(nil)
+
+func (mfi *MockFileInfo) Name() string {
+ args := mfi.Called()
+ return args.String(0)
+}
+
+func (mfi *MockFileInfo) Size() int64 {
+ args := mfi.Called()
+ return args.Get(0).(int64)
+}
+
+func (mfi *MockFileInfo) Mode() fs.FileMode {
+ args := mfi.Called()
+ return args.Get(0).(fs.FileMode)
+}
+
+func (mfi *MockFileInfo) ModTime() time.Time {
+ _ = mfi.Called()
+ return time.Now()
+}
+
+func (mfi *MockFileInfo) IsDir() bool {
+ args := mfi.Called()
+ return args.Bool(0)
+}
+
+func (mfi *MockFileInfo) Sys() interface{} {
+ _ = mfi.Called()
+ return nil
+}
+
+type MockClientMgr struct {
+ mock.Mock
+}
+
+var _ ClientManager = (*MockClientMgr)(nil)
+
+func (m *MockClientMgr) List() []*ClientConn {
+ args := m.Called()
+
+ return args.Get(0).([]*ClientConn)
+}
+
+func (m *MockClientMgr) Get(id ClientID) *ClientConn {
+ args := m.Called(id)
+
+ return args.Get(0).(*ClientConn)
+}
+
+func (m *MockClientMgr) Add(cc *ClientConn) {
+ m.Called(cc)
+}
+
+func (m *MockClientMgr) Delete(id ClientID) {
+ m.Called(id)
+}
diff --git a/hotline/news.go b/hotline/news.go
index 5e1d6e9..033badb 100644
--- a/hotline/news.go
+++ b/hotline/news.go
@@ -5,8 +5,6 @@ import (
"encoding/binary"
"io"
"slices"
-
- "github.com/stretchr/testify/mock"
)
var (
@@ -362,53 +360,3 @@ func newsPathScanner(data []byte, _ bool) (advance int, token []byte, err error)
advance = 3 + int(data[2])
return advance, data[3:advance], nil
}
-
-type MockThreadNewsMgr struct {
- mock.Mock
-}
-
-func (m *MockThreadNewsMgr) ListArticles(newsPath []string) (NewsArtListData, error) {
- args := m.Called(newsPath)
-
- return args.Get(0).(NewsArtListData), args.Error(1)
-}
-
-func (m *MockThreadNewsMgr) GetArticle(newsPath []string, articleID uint32) *NewsArtData {
- args := m.Called(newsPath, articleID)
-
- return args.Get(0).(*NewsArtData)
-}
-func (m *MockThreadNewsMgr) DeleteArticle(newsPath []string, articleID uint32, recursive bool) error {
- args := m.Called(newsPath, articleID, recursive)
-
- return args.Error(0)
-}
-
-func (m *MockThreadNewsMgr) PostArticle(newsPath []string, parentArticleID uint32, article NewsArtData) error {
- args := m.Called(newsPath, parentArticleID, article)
-
- return args.Error(0)
-}
-func (m *MockThreadNewsMgr) CreateGrouping(newsPath []string, name string, itemType [2]byte) error {
- args := m.Called(newsPath, name, itemType)
-
- return args.Error(0)
-}
-
-func (m *MockThreadNewsMgr) GetCategories(paths []string) []NewsCategoryListData15 {
- args := m.Called(paths)
-
- return args.Get(0).([]NewsCategoryListData15)
-}
-
-func (m *MockThreadNewsMgr) NewsItem(newsPath []string) NewsCategoryListData15 {
- args := m.Called(newsPath)
-
- return args.Get(0).(NewsCategoryListData15)
-}
-
-func (m *MockThreadNewsMgr) DeleteNewsItem(newsPath []string) error {
- args := m.Called(newsPath)
-
- return args.Error(0)
-}
diff --git a/internal/mobius/account_manager.go b/internal/mobius/account_manager.go
index 44c054a..362f2c8 100644
--- a/internal/mobius/account_manager.go
+++ b/internal/mobius/account_manager.go
@@ -9,7 +9,6 @@ import (
"sync"
"github.com/jhalter/mobius/hotline"
- "github.com/stretchr/testify/mock"
"gopkg.in/yaml.v3"
)
@@ -172,43 +171,3 @@ func (am *YAMLAccountManager) Delete(login string) error {
return nil
}
-
-// MockAccountManager provides a test double implementation of AccountManager using testify/mock.
-type MockAccountManager struct {
- mock.Mock
-}
-
-// Create mocks the Create method for testing.
-func (m *MockAccountManager) Create(account hotline.Account) error {
- args := m.Called(account)
-
- return args.Error(0)
-}
-
-// Update mocks the Update method for testing.
-func (m *MockAccountManager) Update(account hotline.Account, newLogin string) error {
- args := m.Called(account, newLogin)
-
- return args.Error(0)
-}
-
-// Get mocks the Get method for testing.
-func (m *MockAccountManager) Get(login string) *hotline.Account {
- args := m.Called(login)
-
- return args.Get(0).(*hotline.Account)
-}
-
-// List mocks the List method for testing.
-func (m *MockAccountManager) List() []hotline.Account {
- args := m.Called()
-
- return args.Get(0).([]hotline.Account)
-}
-
-// Delete mocks the Delete method for testing.
-func (m *MockAccountManager) Delete(login string) error {
- args := m.Called(login)
-
- return args.Error(0)
-}
diff --git a/internal/mobius/handlers_accounts_test.go b/internal/mobius/handlers_accounts_test.go
index a7fe827..60b4f6e 100644
--- a/internal/mobius/handlers_accounts_test.go
+++ b/internal/mobius/handlers_accounts_test.go
@@ -6,6 +6,7 @@ import (
"testing"
"github.com/jhalter/mobius/hotline"
+ "github.com/jhalter/mobius/hotline/hltest"
"github.com/stretchr/testify/mock"
"golang.org/x/text/encoding/charmap"
)
@@ -170,8 +171,8 @@ func TestHandleDeleteUser(t *testing.T) {
m.On("Delete", "testuser").Return(nil)
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{}) // TODO
return &m
}(),
@@ -240,8 +241,8 @@ func TestHandleDeleteUser(t *testing.T) {
m.On("Delete", "testuser").Return(nil)
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 2},
@@ -302,8 +303,8 @@ func TestHandleDeleteUser(t *testing.T) {
m.On("Delete", "testuser").Return(nil)
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 3},
@@ -776,8 +777,8 @@ func TestHandleUpdateUser(t *testing.T) {
m.On("Delete", "testuser").Return(nil)
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -1313,8 +1314,8 @@ func TestHandleSetUser(t *testing.T) {
m.On("Update", mock.Anything, "testuser").Return(nil)
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{})
return &m
}(),
diff --git a/internal/mobius/handlers_chat_test.go b/internal/mobius/handlers_chat_test.go
index af16159..e3f6031 100644
--- a/internal/mobius/handlers_chat_test.go
+++ b/internal/mobius/handlers_chat_test.go
@@ -4,6 +4,7 @@ import (
"testing"
"github.com/jhalter/mobius/hotline"
+ "github.com/jhalter/mobius/hotline/hltest"
"github.com/stretchr/testify/mock"
"golang.org/x/text/encoding/charmap"
)
@@ -26,8 +27,8 @@ func TestHandleSetChatSubject(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
m.On("Members", hotline.ChatID{0x0, 0x0, 0x0, 0x1}).Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -64,8 +65,8 @@ func TestHandleSetChatSubject(t *testing.T) {
// },
// },
//},
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -142,8 +143,8 @@ func TestHandleLeaveChat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
m.On("Members", hotline.ChatID{0x0, 0x0, 0x0, 0x1}).Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -156,8 +157,8 @@ func TestHandleLeaveChat(t *testing.T) {
m.On("GetSubject").Return("unset")
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -226,8 +227,8 @@ func TestHandleChatSend(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -289,8 +290,8 @@ func TestHandleChatSend(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -380,8 +381,8 @@ func TestHandleChatSend(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -444,8 +445,8 @@ func TestHandleChatSend(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -504,8 +505,8 @@ func TestHandleChatSend(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -558,8 +559,8 @@ func TestHandleChatSend(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
m.On("Members", hotline.ChatID{0x0, 0x0, 0x0, 0x1}).Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -571,8 +572,8 @@ func TestHandleChatSend(t *testing.T) {
m.On("GetSubject").Return("unset")
return &m
}(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
Account: &hotline.Account{
@@ -685,8 +686,8 @@ func TestHandleSendInstantMsg(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x2}).Return(&hotline.ClientConn{
AutoReply: []byte(nil),
Flags: [2]byte{0, 0},
@@ -735,8 +736,8 @@ func TestHandleSendInstantMsg(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x2}).Return(&hotline.ClientConn{
Flags: [2]byte{0, 0},
ID: [2]byte{0, 2},
@@ -794,8 +795,8 @@ func TestHandleSendInstantMsg(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x2}).Return(&hotline.ClientConn{
Flags: [2]byte{255, 255},
ID: [2]byte{0, 2},
@@ -889,16 +890,16 @@ func TestHandleInviteNewChat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x2}).Return(&hotline.ClientConn{
ID: [2]byte{0, 2},
UserName: []byte("UserB"),
})
return &m
}(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
m.On("New", mock.AnythingOfType("*hotline.ClientConn")).Return(hotline.ChatID{0x52, 0xfd, 0xfc, 0x07})
return &m
}(),
@@ -950,8 +951,8 @@ func TestHandleInviteNewChat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0, 2}).Return(&hotline.ClientConn{
ID: [2]byte{0, 2},
Icon: []byte{0, 1},
@@ -960,8 +961,8 @@ func TestHandleInviteNewChat(t *testing.T) {
})
return &m
}(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
m.On("New", mock.AnythingOfType("*hotline.ClientConn")).Return(hotline.ChatID{0x52, 0xfd, 0xfc, 0x07})
return &m
}(),
@@ -1031,8 +1032,8 @@ func TestHandleJoinChat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
// Mock existing members before join
m.On("Members", hotline.ChatID{0, 0, 0, 1}).Return([]*hotline.ClientConn{
{
@@ -1149,8 +1150,8 @@ func TestHandleJoinChat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
// Mock empty chat before join
m.On("Members", hotline.ChatID{0, 0, 0, 2}).Return([]*hotline.ClientConn{})
// Mock join operation
@@ -1220,8 +1221,8 @@ func TestHandleRejectChatInvite(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
// Mock current members of the chat
m.On("Members", hotline.ChatID{0, 0, 0, 1}).Return([]*hotline.ClientConn{
{
@@ -1273,8 +1274,8 @@ func TestHandleRejectChatInvite(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
// Mock empty chat (no members)
m.On("Members", hotline.ChatID{0, 0, 0, 2}).Return([]*hotline.ClientConn{})
return &m
@@ -1302,8 +1303,8 @@ func TestHandleRejectChatInvite(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ChatMgr: func() *hotline.MockChatManager {
- m := hotline.MockChatManager{}
+ ChatMgr: func() *hltest.MockChatManager {
+ m := hltest.MockChatManager{}
// Mock chat with single member
m.On("Members", hotline.ChatID{0, 0, 0, 3}).Return([]*hotline.ClientConn{
{
diff --git a/internal/mobius/handlers_files_test.go b/internal/mobius/handlers_files_test.go
index fd022bb..4aa52e1 100644
--- a/internal/mobius/handlers_files_test.go
+++ b/internal/mobius/handlers_files_test.go
@@ -12,6 +12,7 @@ import (
"time"
"github.com/jhalter/mobius/hotline"
+ "github.com/jhalter/mobius/hotline/hltest"
"golang.org/x/text/encoding/charmap"
)
@@ -177,8 +178,8 @@ func TestHandleNewFolder(t *testing.T) {
Config: hotline.Config{
FileRoot: "/Files/",
},
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
mfs.On("Mkdir", "/Files/aaa/testFolder", fs.FileMode(0777)).Return(nil)
mfs.On("Stat", "/Files/aaa/testFolder").Return(nil, os.ErrNotExist)
return mfs
@@ -221,8 +222,8 @@ func TestHandleNewFolder(t *testing.T) {
Config: hotline.Config{
FileRoot: "/Files",
},
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
mfs.On("Mkdir", "/Files/testFolder", fs.FileMode(0777)).Return(nil)
mfs.On("Stat", "/Files/testFolder").Return(nil, os.ErrNotExist)
return mfs
@@ -260,8 +261,8 @@ func TestHandleNewFolder(t *testing.T) {
Config: hotline.Config{
FileRoot: "/Files/",
},
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
mfs.On("Mkdir", "/Files/aaa/testFolder", fs.FileMode(0777)).Return(nil)
mfs.On("Stat", "/Files/aaa/testFolder").Return(nil, os.ErrNotExist)
return mfs
@@ -305,8 +306,8 @@ func TestHandleNewFolder(t *testing.T) {
Config: hotline.Config{
FileRoot: "/Files/",
},
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
mfs.On("Mkdir", "/Files/testFolder", fs.FileMode(0777)).Return(nil)
mfs.On("Stat", "/Files/testFolder").Return(nil, os.ErrNotExist)
return mfs
@@ -343,8 +344,8 @@ func TestHandleNewFolder(t *testing.T) {
Config: hotline.Config{
FileRoot: "/Files/",
},
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
mfs.On("Mkdir", "/Files/foo/testFolder", fs.FileMode(0777)).Return(nil)
mfs.On("Stat", "/Files/foo/testFolder").Return(nil, os.ErrNotExist)
return mfs
@@ -416,8 +417,8 @@ func TestHandleMakeAlias(t *testing.T) {
}(),
},
Logger: NewTestLogger(),
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
path, _ := os.Getwd()
mfs.On(
"Symlink",
@@ -464,8 +465,8 @@ func TestHandleMakeAlias(t *testing.T) {
}(),
},
Logger: NewTestLogger(),
- FS: func() *hotline.MockFileStore {
- mfs := &hotline.MockFileStore{}
+ FS: func() *hltest.MockFileStore {
+ mfs := &hltest.MockFileStore{}
path, _ := os.Getwd()
mfs.On(
"Symlink",
@@ -576,15 +577,15 @@ func TestHandleDeleteFile(t *testing.T) {
return "/fakeRoot/Files"
}(),
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.FileMode(0))
mfi.On("Size").Return(int64(100))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(false)
mfi.On("Name").Return("testfile")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
mfs.On("Stat", "/fakeRoot/Files/aaa/testfile").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/aaa/.info_testfile").Return(nil, errors.New("err"))
mfs.On("Stat", "/fakeRoot/Files/aaa/.rsrc_testfile").Return(nil, errors.New("err"))
@@ -634,15 +635,15 @@ func TestHandleDeleteFile(t *testing.T) {
return "/fakeRoot/Files"
}(),
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.FileMode(0))
mfi.On("Size").Return(int64(100))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(false)
mfi.On("Name").Return("testfile")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
mfs.On("Stat", "/fakeRoot/Files/aaa/testfile").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/aaa/.info_testfile").Return(nil, errors.New("err"))
mfs.On("Stat", "/fakeRoot/Files/aaa/.rsrc_testfile").Return(nil, errors.New("err"))
@@ -681,7 +682,7 @@ func TestHandleDeleteFile(t *testing.T) {
gotRes := HandleDeleteFile(tt.args.cc, &tt.args.t)
TranAssertEqual(t, tt.wantRes, gotRes)
- tt.args.cc.Server.FS.(*hotline.MockFileStore).AssertExpectations(t)
+ tt.args.cc.Server.FS.(*hltest.MockFileStore).AssertExpectations(t)
})
}
}
@@ -821,15 +822,15 @@ func TestHandleMoveFile(t *testing.T) {
Config: hotline.Config{
FileRoot: "/fakeRoot/Files",
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.FileMode(0))
mfi.On("Size").Return(int64(100))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(false)
mfi.On("Name").Return("testfile")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
// NewFile calls: Stat data, Stat info, Stat rsrc
mfs.On("Stat", "/fakeRoot/Files/aaa/testfile").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/aaa/.info_testfile").Return(nil, errors.New("err"))
@@ -885,15 +886,15 @@ func TestHandleMoveFile(t *testing.T) {
Config: hotline.Config{
FileRoot: "/fakeRoot/Files",
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.ModeDir)
mfi.On("Size").Return(int64(0))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(true)
mfi.On("Name").Return("testfolder")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
mfs.On("Stat", "/fakeRoot/Files/aaa/testfolder").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/aaa/.info_testfolder").Return(nil, errors.New("err"))
mfs.On("Stat", "/fakeRoot/Files/aaa/.rsrc_testfolder").Return(nil, errors.New("err"))
@@ -966,15 +967,15 @@ func TestHandleSetFileInfo(t *testing.T) {
Config: hotline.Config{
FileRoot: "/fakeRoot/Files",
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.FileMode(0))
mfi.On("Size").Return(int64(100))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(false)
mfi.On("Name").Return("testfile")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
mfs.On("Stat", "/fakeRoot/Files/testfile").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/.info_testfile").Return(nil, errors.New("err"))
mfs.On("Stat", "/fakeRoot/Files/.rsrc_testfile").Return(nil, errors.New("err"))
@@ -1018,15 +1019,15 @@ func TestHandleSetFileInfo(t *testing.T) {
Config: hotline.Config{
FileRoot: "/fakeRoot/Files",
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.FileMode(0))
mfi.On("Size").Return(int64(100))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(false)
mfi.On("Name").Return("testfile")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
mfs.On("Stat", "/fakeRoot/Files/testfile").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/.info_testfile").Return(nil, errors.New("err"))
mfs.On("Stat", "/fakeRoot/Files/.rsrc_testfile").Return(nil, errors.New("err"))
@@ -1070,15 +1071,15 @@ func TestHandleSetFileInfo(t *testing.T) {
Config: hotline.Config{
FileRoot: "/fakeRoot/Files",
},
- FS: func() *hotline.MockFileStore {
- mfi := &hotline.MockFileInfo{}
+ FS: func() *hltest.MockFileStore {
+ mfi := &hltest.MockFileInfo{}
mfi.On("Mode").Return(fs.ModeDir)
mfi.On("Size").Return(int64(0))
mfi.On("ModTime").Return(time.Parse(time.Layout, time.Layout))
mfi.On("IsDir").Return(true)
mfi.On("Name").Return("testfolder")
- mfs := &hotline.MockFileStore{}
+ mfs := &hltest.MockFileStore{}
mfs.On("Stat", "/fakeRoot/Files/testfolder").Return(mfi, nil)
mfs.On("Stat", "/fakeRoot/Files/.info_testfolder").Return(nil, errors.New("err"))
mfs.On("Stat", "/fakeRoot/Files/.rsrc_testfolder").Return(nil, errors.New("err"))
diff --git a/internal/mobius/handlers_news_test.go b/internal/mobius/handlers_news_test.go
index 3e5125e..2b54c84 100644
--- a/internal/mobius/handlers_news_test.go
+++ b/internal/mobius/handlers_news_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"github.com/jhalter/mobius/hotline"
+ "github.com/jhalter/mobius/hotline/hltest"
"github.com/stretchr/testify/mock"
"golang.org/x/text/encoding/charmap"
)
@@ -185,8 +186,8 @@ func TestHandleDelNewsArt(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("DeleteArticle", []string{"test"}, uint32(1), false).Return(errors.New("write error"))
return &m
}(),
@@ -274,8 +275,8 @@ func TestHandleDelNewsItem(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("NewsItem", []string{"test"}).Return(hotline.NewsCategoryListData15{
Type: hotline.NewsCategory,
})
@@ -317,8 +318,8 @@ func TestHandleDelNewsItem(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("NewsItem", []string{"test"}).Return(hotline.NewsCategoryListData15{
Type: hotline.NewsBundle,
})
@@ -364,8 +365,8 @@ func TestHandleDelNewsItem(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("NewsItem", []string{"test"}).Return(hotline.NewsCategoryListData15{Type: hotline.NewsBundle})
m.On("DeleteNewsItem", []string{"test"}).Return(nil)
return &m
@@ -452,8 +453,8 @@ func TestHandleTranOldPostNews(t *testing.T) {
Config: hotline.Config{
NewsDateFormat: "",
},
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{})
return &m
}(),
@@ -532,8 +533,8 @@ func TestHandleGetNewsArtData(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("GetArticle", []string{"Example Category"}, uint32(1)).Return(&hotline.NewsArtData{
Title: "title",
Poster: "poster",
@@ -640,8 +641,8 @@ func TestHandleGetNewsArtNameList(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("ListArticles", []string{"Example Category"}).Return(hotline.NewsArtListData{
Name: []byte{},
Description: []byte{},
@@ -741,8 +742,8 @@ func TestHandleNewNewsFldr(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("CreateGrouping", []string{"test"}, "testFolder", hotline.NewsBundle).Return(nil)
return &m
}(),
@@ -785,8 +786,8 @@ func TestHandleNewNewsFldr(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("CreateGrouping", []string{"test"}, "testFolder", hotline.NewsBundle).Return(errors.New("write error"))
return &m
}(),
@@ -869,8 +870,8 @@ func TestHandlePostNewsArt(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("PostArticle", []string{"www"}, uint32(0), mock.AnythingOfType("hotline.NewsArtData")).Return(nil)
return &m
}(),
@@ -905,8 +906,8 @@ func TestHandlePostNewsArt(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("PostArticle", []string{"www"}, uint32(0), mock.AnythingOfType("hotline.NewsArtData")).Return(errors.New("write error"))
return &m
}(),
@@ -999,8 +1000,8 @@ func TestHandleNewNewsCat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("CreateGrouping", []string{"test"}, "TestCat", hotline.NewsCategory).Return(errors.New("write error"))
return &m
}(),
@@ -1046,8 +1047,8 @@ func TestHandleNewNewsCat(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("CreateGrouping", []string{"test"}, "TestCat", hotline.NewsCategory).Return(nil)
return &m
}(),
@@ -1128,8 +1129,8 @@ func TestHandleGetNewsCatNameList(t *testing.T) {
ID: [2]byte{0, 1},
Logger: slog.New(slog.NewTextHandler(os.Stdout, nil)),
Server: &hotline.Server{
- ThreadedNewsMgr: func() *hotline.MockThreadNewsMgr {
- m := hotline.MockThreadNewsMgr{}
+ ThreadedNewsMgr: func() *hltest.MockThreadNewsMgr {
+ m := hltest.MockThreadNewsMgr{}
m.On("GetCategories", []string{}).Return([]hotline.NewsCategoryListData15{
{
Type: hotline.NewsBundle,
diff --git a/internal/mobius/handlers_session_test.go b/internal/mobius/handlers_session_test.go
index bffc81c..ea96def 100644
--- a/internal/mobius/handlers_session_test.go
+++ b/internal/mobius/handlers_session_test.go
@@ -6,6 +6,7 @@ import (
"time"
"github.com/jhalter/mobius/hotline"
+ "github.com/jhalter/mobius/hotline/hltest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"golang.org/x/text/encoding/charmap"
@@ -29,8 +30,8 @@ func TestHandleGetUserNameList(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -121,8 +122,8 @@ func TestHandleDisconnectUser(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x1}).Return(&hotline.ClientConn{
Account: &hotline.Account{
Login: "unnamed",
@@ -169,8 +170,8 @@ func TestHandleDisconnectUser(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x1}).Return(&hotline.ClientConn{
ID: hotline.ClientID{0x0, 0x1},
UserName: []byte("baduser"),
@@ -190,8 +191,8 @@ func TestHandleDisconnectUser(t *testing.T) {
})
return &m
}(),
- BanList: func() *hotline.MockBanMgr {
- m := hotline.MockBanMgr{}
+ BanList: func() *hltest.MockBanMgr {
+ m := hltest.MockBanMgr{}
m.On("Add", "10.0.0.1", mock.AnythingOfType("*time.Time")).Return(nil)
return &m
}(),
@@ -233,8 +234,8 @@ func TestHandleDisconnectUser(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x1}).Return(&hotline.ClientConn{
ID: hotline.ClientID{0x0, 0x1},
UserName: []byte("baduser"),
@@ -254,8 +255,8 @@ func TestHandleDisconnectUser(t *testing.T) {
})
return &m
}(),
- BanList: func() *hotline.MockBanMgr {
- m := hotline.MockBanMgr{}
+ BanList: func() *hltest.MockBanMgr {
+ m := hltest.MockBanMgr{}
m.On("Add", "10.0.0.2", (*time.Time)(nil)).Return(nil)
return &m
}(),
@@ -357,8 +358,8 @@ func TestHandleGetClientInfoText(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("Get", hotline.ClientID{0x0, 0x1}).Return(&hotline.ClientConn{
UserName: []byte("Testy McTest"),
RemoteAddr: "1.2.3.4:12345",
@@ -461,8 +462,8 @@ func TestHandleTranAgreed(t *testing.T) {
Config: hotline.Config{
BannerFile: "Banner.jpg",
},
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
//{
// ID: [2]byte{0, 2},
@@ -518,8 +519,8 @@ func TestHandleTranAgreed(t *testing.T) {
Config: hotline.Config{
BannerFile: "Banner.gif",
},
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{})
return &m
}(),
@@ -582,8 +583,8 @@ func TestHandleSetClientUserInfo(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -628,8 +629,8 @@ func TestHandleSetClientUserInfo(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -672,8 +673,8 @@ func TestHandleSetClientUserInfo(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -716,8 +717,8 @@ func TestHandleSetClientUserInfo(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -761,8 +762,8 @@ func TestHandleSetClientUserInfo(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -807,8 +808,8 @@ func TestHandleSetClientUserInfo(t *testing.T) {
Server: &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
TextEncoder: charmap.Macintosh.NewEncoder(),
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{
{
ID: [2]byte{0, 1},
@@ -905,8 +906,8 @@ func TestHandleUserBroadcast(t *testing.T) {
},
ID: [2]byte{0, 1},
Server: &hotline.Server{
- ClientMgr: func() *hotline.MockClientMgr {
- m := hotline.MockClientMgr{}
+ ClientMgr: func() *hltest.MockClientMgr {
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{})
return &m
}(),
@@ -960,7 +961,7 @@ func (f *fakePresenceTracker) UserDisconnected(login, nickname, ip string) {
}
func newPresenceTestServer(presence hotline.PresenceTracker) *hotline.Server {
- m := hotline.MockClientMgr{}
+ m := hltest.MockClientMgr{}
m.On("List").Return([]*hotline.ClientConn{})
return &hotline.Server{
TextDecoder: charmap.Macintosh.NewDecoder(),
diff --git a/internal/mobius/handlers_transfers_test.go b/internal/mobius/handlers_transfers_test.go
index 4e4ba0f..edd017f 100644
--- a/internal/mobius/handlers_transfers_test.go
+++ b/internal/mobius/handlers_transfers_test.go
@@ -244,14 +244,14 @@ func TestHandleDownloadFile(t *testing.T) {
TextEncoder: charmap.Macintosh.NewEncoder(),
FS: &hotline.OSFileStore{},
- // FS: func() *hotline.MockFileStore {
+ // FS: func() *hltest.MockFileStore {
// path, _ := os.Getwd()
// testFile, err := os.Open(path + "/test/config/Files/testfile-1k")
// if err != nil {
// panic(err)
// }
//
- // mfi := &hotline.MockFileInfo{}
+ // mfi := &hltest.MockFileInfo{}
// mfi.On("Mode").Return(fs.FileMode(0))
// mfs := &MockFileStore{}
// mfs.On("Stat", "/fakeRoot/Files/testfile.txt").Return(mfi, nil)
diff --git a/internal/mobius/mocks_test.go b/internal/mobius/mocks_test.go
new file mode 100644
index 0000000..07250fb
--- /dev/null
+++ b/internal/mobius/mocks_test.go
@@ -0,0 +1,48 @@
+package mobius
+
+import (
+ "github.com/jhalter/mobius/hotline"
+ "github.com/stretchr/testify/mock"
+)
+
+// MockAccountManager provides a test double implementation of AccountManager using testify/mock.
+type MockAccountManager struct {
+ mock.Mock
+}
+
+var _ hotline.AccountManager = (*MockAccountManager)(nil)
+
+// Create mocks the Create method for testing.
+func (m *MockAccountManager) Create(account hotline.Account) error {
+ args := m.Called(account)
+
+ return args.Error(0)
+}
+
+// Update mocks the Update method for testing.
+func (m *MockAccountManager) Update(account hotline.Account, newLogin string) error {
+ args := m.Called(account, newLogin)
+
+ return args.Error(0)
+}
+
+// Get mocks the Get method for testing.
+func (m *MockAccountManager) Get(login string) *hotline.Account {
+ args := m.Called(login)
+
+ return args.Get(0).(*hotline.Account)
+}
+
+// List mocks the List method for testing.
+func (m *MockAccountManager) List() []hotline.Account {
+ args := m.Called()
+
+ return args.Get(0).([]hotline.Account)
+}
+
+// Delete mocks the Delete method for testing.
+func (m *MockAccountManager) Delete(login string) error {
+ args := m.Called(login)
+
+ return args.Error(0)
+}