1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 09:37:02 +00:00

storage: Move NewMessage() into Store interface for #69

This commit is contained in:
James Hillyerd
2018-03-11 10:48:50 -07:00
parent d9b5e40c87
commit 137466f89b
7 changed files with 26 additions and 9 deletions

View File

@@ -451,7 +451,7 @@ func (ss *Session) dataHandler() {
// deliverMessage creates and populates a new Message for the specified recipient
func (ss *Session) deliverMessage(r recipientDetails, msgBuf [][]byte) (ok bool) {
msg, err := r.mailbox.NewMessage()
msg, err := ss.server.dataStore.NewMessage(r.localPart)
if err != nil {
ss.logError("Failed to create message for %q: %s", r.localPart, err)
return false

View File

@@ -148,7 +148,7 @@ func TestMailState(t *testing.T) {
mb1 := &storage.MockMailbox{}
msg1 := &storage.MockMessage{}
mds.On("MailboxFor", "u1").Return(mb1, nil)
mb1.On("NewMessage").Return(msg1, nil)
mds.On("NewMessage", "u1").Return(msg1, nil)
mb1.On("Name").Return("u1")
msg1.On("ID").Return("")
msg1.On("From").Return("")
@@ -263,7 +263,7 @@ func TestDataState(t *testing.T) {
mb1 := &storage.MockMailbox{}
msg1 := &storage.MockMessage{}
mds.On("MailboxFor", "u1").Return(mb1, nil)
mb1.On("NewMessage").Return(msg1, nil)
mds.On("NewMessage", "u1").Return(msg1, nil)
mb1.On("Name").Return("u1")
msg1.On("ID").Return("")
msg1.On("From").Return("")

View File

@@ -175,6 +175,15 @@ func (fs *Store) LockFor(emailAddress string) (*sync.RWMutex, error) {
return fs.hashLock.Get(hash), nil
}
// NewMessage is temproary until #69 MessageData refactor
func (fs *Store) NewMessage(mailbox string) (storage.Message, error) {
mb, err := fs.MailboxFor(mailbox)
if err != nil {
return nil, err
}
return mb.(*Mailbox).NewMessage()
}
// Mailbox implements Mailbox, manages the mail for a specific user and
// correlates to a particular directory on disk.
type Mailbox struct {

View File

@@ -490,13 +490,9 @@ func deliverMessage(ds *Store, mbName string, subject string,
testMsg = append(testMsg, []byte("\r\n")...)
testMsg = append(testMsg, []byte("Test Body\r\n")...)
mb, err := ds.MailboxFor(mbName)
if err != nil {
panic(err)
}
// Create message object
id = generateID(date)
msg, err := mb.NewMessage()
msg, err := ds.NewMessage(mbName)
if err != nil {
panic(err)
}

View File

@@ -28,12 +28,13 @@ type Store interface {
MailboxFor(emailAddress string) (Mailbox, error)
// LockFor is a temporary hack to fix #77 until Datastore revamp
LockFor(emailAddress string) (*sync.RWMutex, error)
// NewMessage is temproary until #69 MessageData refactor
NewMessage(mailbox string) (Message, error)
}
// Mailbox is an interface to get and manipulate messages in a DataStore
type Mailbox interface {
GetMessages() ([]Message, error)
NewMessage() (Message, error)
String() string
}

View File

@@ -44,6 +44,12 @@ func (m *MockDataStore) LockFor(name string) (*sync.RWMutex, error) {
return &sync.RWMutex{}, nil
}
// NewMessage temporary for #69
func (m *MockDataStore) NewMessage(mailbox string) (Message, error) {
args := m.Called(mailbox)
return args.Get(0).(Message), args.Error(1)
}
// VisitMailboxes accepts a function that will be called with the messages in each mailbox while it
// continues to return true.
func (m *MockDataStore) VisitMailboxes(f func([]Message) (cont bool)) error {

View File

@@ -56,3 +56,8 @@ func (s *StoreStub) VisitMailboxes(f func([]storage.Message) (cont bool)) error
}
return nil
}
// NewMessage is temproary until #69 MessageData refactor
func (s *StoreStub) NewMessage(mailbox string) (storage.Message, error) {
return nil, nil
}