From 519779b7baa45a5cc5e094c9c94a1500e4ab2982 Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Wed, 14 Mar 2018 21:05:59 -0700 Subject: [PATCH] storage: eliminate mocks, closes #80 --- pkg/rest/testutils_test.go | 27 ------ pkg/storage/retention_test.go | 30 +++---- pkg/storage/testing.go | 152 ---------------------------------- 3 files changed, 16 insertions(+), 193 deletions(-) delete mode 100644 pkg/storage/testing.go diff --git a/pkg/rest/testutils_test.go b/pkg/rest/testutils_test.go index cfddede..23996a5 100644 --- a/pkg/rest/testutils_test.go +++ b/pkg/rest/testutils_test.go @@ -9,12 +9,10 @@ import ( "net/mail" "time" - "github.com/jhillyerd/enmime" "github.com/jhillyerd/inbucket/pkg/config" "github.com/jhillyerd/inbucket/pkg/message" "github.com/jhillyerd/inbucket/pkg/msghub" "github.com/jhillyerd/inbucket/pkg/server/web" - "github.com/jhillyerd/inbucket/pkg/storage" ) type InputMessageData struct { @@ -26,31 +24,6 @@ type InputMessageData struct { HTML, Text string } -func (d *InputMessageData) MockMessage() *storage.MockMessage { - from, _ := mail.ParseAddress(d.From) - to := make([]*mail.Address, len(d.To)) - for i, a := range d.To { - to[i], _ = mail.ParseAddress(a) - } - msg := &storage.MockMessage{} - msg.On("ID").Return(d.ID) - msg.On("From").Return(from) - msg.On("To").Return(to) - msg.On("Subject").Return(d.Subject) - msg.On("Date").Return(d.Date) - msg.On("Size").Return(d.Size) - gomsg := &mail.Message{ - Header: d.Header, - } - msg.On("ReadHeader").Return(gomsg, nil) - body := &enmime.Envelope{ - Text: d.Text, - HTML: d.HTML, - } - msg.On("ReadBody").Return(body, nil) - return msg -} - // isJSONStringEqual is a utility function to return a nicely formatted message when // comparing a string to a value received from a JSON map. func isJSONStringEqual(key, expected string, received interface{}) (message string, ok bool) { diff --git a/pkg/storage/retention_test.go b/pkg/storage/retention_test.go index 5a0d07e..a49cc59 100644 --- a/pkg/storage/retention_test.go +++ b/pkg/storage/retention_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/jhillyerd/inbucket/pkg/config" + "github.com/jhillyerd/inbucket/pkg/message" "github.com/jhillyerd/inbucket/pkg/storage" "github.com/jhillyerd/inbucket/pkg/test" ) @@ -13,12 +14,12 @@ import ( func TestDoRetentionScan(t *testing.T) { ds := test.NewStore() // Mockup some different aged messages (num is in hours) - new1 := mockMessage("mb1", 0) - new2 := mockMessage("mb2", 1) - new3 := mockMessage("mb3", 2) - old1 := mockMessage("mb1", 4) - old2 := mockMessage("mb1", 12) - old3 := mockMessage("mb2", 24) + new1 := stubMessage("mb1", 0) + new2 := stubMessage("mb2", 1) + new3 := stubMessage("mb3", 2) + old1 := stubMessage("mb1", 4) + old2 := stubMessage("mb1", 12) + old3 := stubMessage("mb2", 24) ds.AddMessage(new1) ds.AddMessage(old1) ds.AddMessage(old2) @@ -49,12 +50,13 @@ func TestDoRetentionScan(t *testing.T) { } } -// Make a MockMessage of a specific age -func mockMessage(mailbox string, ageHours int) *storage.MockMessage { - msg := &storage.MockMessage{} - msg.On("Mailbox").Return(mailbox) - msg.On("ID").Return(fmt.Sprintf("MSG[age=%vh]", ageHours)) - msg.On("Date").Return(time.Now().Add(time.Duration(ageHours*-1) * time.Hour)) - msg.On("Delete").Return(nil) - return msg +// stubMessage creates a message stub of a specific age +func stubMessage(mailbox string, ageHours int) storage.StoreMessage { + return &message.Delivery{ + Meta: message.Metadata{ + Mailbox: mailbox, + ID: fmt.Sprintf("MSG[age=%vh]", ageHours), + Date: time.Now().Add(time.Duration(ageHours*-1) * time.Hour), + }, + } } diff --git a/pkg/storage/testing.go b/pkg/storage/testing.go deleted file mode 100644 index b987477..0000000 --- a/pkg/storage/testing.go +++ /dev/null @@ -1,152 +0,0 @@ -package storage - -import ( - "io" - "net/mail" - "sync" - "time" - - "github.com/jhillyerd/enmime" - "github.com/stretchr/testify/mock" -) - -// MockDataStore is a shared mock for unit testing -type MockDataStore struct { - mock.Mock -} - -// AddMessage mock function -func (m *MockDataStore) AddMessage(message StoreMessage) (string, error) { - args := m.Called(message) - return args.String(0), args.Error(1) -} - -// GetMessage mock function -func (m *MockDataStore) GetMessage(name, id string) (StoreMessage, error) { - args := m.Called(name, id) - return args.Get(0).(StoreMessage), args.Error(1) -} - -// GetMessages mock function -func (m *MockDataStore) GetMessages(name string) ([]StoreMessage, error) { - args := m.Called(name) - return args.Get(0).([]StoreMessage), args.Error(1) -} - -// RemoveMessage mock function -func (m *MockDataStore) RemoveMessage(name, id string) error { - args := m.Called(name, id) - return args.Error(0) -} - -// PurgeMessages mock function -func (m *MockDataStore) PurgeMessages(name string) error { - args := m.Called(name) - return args.Error(0) -} - -// LockFor mock function returns a new RWMutex, never errors. -func (m *MockDataStore) LockFor(name string) (*sync.RWMutex, error) { - return &sync.RWMutex{}, nil -} - -// NewMessage temporary for #69 -func (m *MockDataStore) NewMessage(mailbox string) (StoreMessage, error) { - args := m.Called(mailbox) - return args.Get(0).(StoreMessage), 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([]StoreMessage) (cont bool)) error { - return nil -} - -// MockMessage is a shared mock for unit testing -type MockMessage struct { - mock.Mock -} - -// Mailbox mock function -func (m *MockMessage) Mailbox() string { - args := m.Called() - return args.String(0) -} - -// ID mock function -func (m *MockMessage) ID() string { - args := m.Called() - return args.String(0) -} - -// From mock function -func (m *MockMessage) From() *mail.Address { - args := m.Called() - return args.Get(0).(*mail.Address) -} - -// To mock function -func (m *MockMessage) To() []*mail.Address { - args := m.Called() - return args.Get(0).([]*mail.Address) -} - -// Date mock function -func (m *MockMessage) Date() time.Time { - args := m.Called() - return args.Get(0).(time.Time) -} - -// Subject mock function -func (m *MockMessage) Subject() string { - args := m.Called() - return args.String(0) -} - -// ReadHeader mock function -func (m *MockMessage) ReadHeader() (msg *mail.Message, err error) { - args := m.Called() - return args.Get(0).(*mail.Message), args.Error(1) -} - -// ReadBody mock function -func (m *MockMessage) ReadBody() (body *enmime.Envelope, err error) { - args := m.Called() - return args.Get(0).(*enmime.Envelope), args.Error(1) -} - -// ReadRaw mock function -func (m *MockMessage) ReadRaw() (raw *string, err error) { - args := m.Called() - return args.Get(0).(*string), args.Error(1) -} - -// RawReader mock function -func (m *MockMessage) RawReader() (reader io.ReadCloser, err error) { - args := m.Called() - return args.Get(0).(io.ReadCloser), args.Error(1) -} - -// Size mock function -func (m *MockMessage) Size() int64 { - args := m.Called() - return int64(args.Int(0)) -} - -// Append mock function -func (m *MockMessage) Append(data []byte) error { - // []byte arg seems to mess up testify/mock - return nil -} - -// Close mock function -func (m *MockMessage) Close() error { - args := m.Called() - return args.Error(0) -} - -// String mock function -func (m *MockMessage) String() string { - args := m.Called() - return args.String(0) -}