diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2026-07-10 09:45:04 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2026-07-10 09:48:18 -0700 |
| commit | f50aad709075c1f06bfc7285c3185382dfcdcf20 (patch) | |
| tree | f709b2e312505b51236cabea0b06adec265913f7 | |
| parent | 21f24d24fd6f501b32f15a2bef41c89cc461f623 (diff) | |
Move testify mocks out of production files into hotline/hltest
The manager mocks lived in production source so that internal/mobius
tests could import them (test files are not importable across
packages), which pulled testify into the production dependency graph
of hotline importers, counted the mocks against coverage, and put them
in the library's godoc. They now live in hotline/hltest, an
httptest-style test-support package.
The hotline package's own in-package tests cannot import hltest (import
cycle), so the mocks they use are duplicated in mocks_test.go;
conformance assertions in both files catch signature drift.
MockAccountManager was only ever used inside internal/mobius and moves
to a _test.go file there.
| -rw-r--r-- | hotline/ban.go | 74 | ||||
| -rw-r--r-- | hotline/chat.go | 37 | ||||
| -rw-r--r-- | hotline/client_manager.go | 25 | ||||
| -rw-r--r-- | hotline/file_store.go | 120 | ||||
| -rw-r--r-- | hotline/hltest/mocks.go | 319 | ||||
| -rw-r--r-- | hotline/mocks_test.go | 160 | ||||
| -rw-r--r-- | hotline/news.go | 52 | ||||
| -rw-r--r-- | internal/mobius/account_manager.go | 41 | ||||
| -rw-r--r-- | internal/mobius/handlers_accounts_test.go | 21 | ||||
| -rw-r--r-- | internal/mobius/handlers_chat_test.go | 93 | ||||
| -rw-r--r-- | internal/mobius/handlers_files_test.go | 73 | ||||
| -rw-r--r-- | internal/mobius/handlers_news_test.go | 57 | ||||
| -rw-r--r-- | internal/mobius/handlers_session_test.go | 67 | ||||
| -rw-r--r-- | internal/mobius/handlers_transfers_test.go | 4 | ||||
| -rw-r--r-- | internal/mobius/mocks_test.go | 48 |
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) +} |