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:
@@ -451,7 +451,7 @@ func (ss *Session) dataHandler() {
|
|||||||
|
|
||||||
// deliverMessage creates and populates a new Message for the specified recipient
|
// deliverMessage creates and populates a new Message for the specified recipient
|
||||||
func (ss *Session) deliverMessage(r recipientDetails, msgBuf [][]byte) (ok bool) {
|
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 {
|
if err != nil {
|
||||||
ss.logError("Failed to create message for %q: %s", r.localPart, err)
|
ss.logError("Failed to create message for %q: %s", r.localPart, err)
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ func TestMailState(t *testing.T) {
|
|||||||
mb1 := &storage.MockMailbox{}
|
mb1 := &storage.MockMailbox{}
|
||||||
msg1 := &storage.MockMessage{}
|
msg1 := &storage.MockMessage{}
|
||||||
mds.On("MailboxFor", "u1").Return(mb1, nil)
|
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")
|
mb1.On("Name").Return("u1")
|
||||||
msg1.On("ID").Return("")
|
msg1.On("ID").Return("")
|
||||||
msg1.On("From").Return("")
|
msg1.On("From").Return("")
|
||||||
@@ -263,7 +263,7 @@ func TestDataState(t *testing.T) {
|
|||||||
mb1 := &storage.MockMailbox{}
|
mb1 := &storage.MockMailbox{}
|
||||||
msg1 := &storage.MockMessage{}
|
msg1 := &storage.MockMessage{}
|
||||||
mds.On("MailboxFor", "u1").Return(mb1, nil)
|
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")
|
mb1.On("Name").Return("u1")
|
||||||
msg1.On("ID").Return("")
|
msg1.On("ID").Return("")
|
||||||
msg1.On("From").Return("")
|
msg1.On("From").Return("")
|
||||||
|
|||||||
@@ -175,6 +175,15 @@ func (fs *Store) LockFor(emailAddress string) (*sync.RWMutex, error) {
|
|||||||
return fs.hashLock.Get(hash), nil
|
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
|
// Mailbox implements Mailbox, manages the mail for a specific user and
|
||||||
// correlates to a particular directory on disk.
|
// correlates to a particular directory on disk.
|
||||||
type Mailbox struct {
|
type Mailbox struct {
|
||||||
|
|||||||
@@ -490,13 +490,9 @@ func deliverMessage(ds *Store, mbName string, subject string,
|
|||||||
testMsg = append(testMsg, []byte("\r\n")...)
|
testMsg = append(testMsg, []byte("\r\n")...)
|
||||||
testMsg = append(testMsg, []byte("Test Body\r\n")...)
|
testMsg = append(testMsg, []byte("Test Body\r\n")...)
|
||||||
|
|
||||||
mb, err := ds.MailboxFor(mbName)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
// Create message object
|
// Create message object
|
||||||
id = generateID(date)
|
id = generateID(date)
|
||||||
msg, err := mb.NewMessage()
|
msg, err := ds.NewMessage(mbName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,13 @@ type Store interface {
|
|||||||
MailboxFor(emailAddress string) (Mailbox, error)
|
MailboxFor(emailAddress string) (Mailbox, error)
|
||||||
// LockFor is a temporary hack to fix #77 until Datastore revamp
|
// LockFor is a temporary hack to fix #77 until Datastore revamp
|
||||||
LockFor(emailAddress string) (*sync.RWMutex, error)
|
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
|
// Mailbox is an interface to get and manipulate messages in a DataStore
|
||||||
type Mailbox interface {
|
type Mailbox interface {
|
||||||
GetMessages() ([]Message, error)
|
GetMessages() ([]Message, error)
|
||||||
NewMessage() (Message, error)
|
|
||||||
String() string
|
String() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ func (m *MockDataStore) LockFor(name string) (*sync.RWMutex, error) {
|
|||||||
return &sync.RWMutex{}, nil
|
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
|
// VisitMailboxes accepts a function that will be called with the messages in each mailbox while it
|
||||||
// continues to return true.
|
// continues to return true.
|
||||||
func (m *MockDataStore) VisitMailboxes(f func([]Message) (cont bool)) error {
|
func (m *MockDataStore) VisitMailboxes(f func([]Message) (cont bool)) error {
|
||||||
|
|||||||
@@ -56,3 +56,8 @@ func (s *StoreStub) VisitMailboxes(f func([]storage.Message) (cont bool)) error
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMessage is temproary until #69 MessageData refactor
|
||||||
|
func (s *StoreStub) NewMessage(mailbox string) (storage.Message, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user