mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 17:47:03 +00:00
test: impl StoreStub.PurgeMessages (#444)
Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
@@ -92,6 +92,21 @@ func (s *StoreStub) RemoveMessage(mailbox, id string) error {
|
|||||||
return storage.ErrNotExist
|
return storage.ErrNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PurgeMessages deletes the contents of a mailbox.
|
||||||
|
func (s *StoreStub) PurgeMessages(mailbox string) error {
|
||||||
|
for _, removed := range s.mailboxes[mailbox] {
|
||||||
|
// Clients will be checking for their original storage.Message, not our wrapper.
|
||||||
|
if stub, ok := removed.(*MessageStub); ok {
|
||||||
|
s.deleted[stub.Message] = struct{}{}
|
||||||
|
} else {
|
||||||
|
return errors.New("unexpected type in StoreStub.mailboxes")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s.mailboxes[mailbox] = nil
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// 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 (s *StoreStub) VisitMailboxes(f func([]storage.Message) (cont bool)) error {
|
func (s *StoreStub) VisitMailboxes(f func([]storage.Message) (cont bool)) error {
|
||||||
|
|||||||
@@ -19,38 +19,6 @@ import (
|
|||||||
|
|
||||||
var testMessageIDSource uint32
|
var testMessageIDSource uint32
|
||||||
|
|
||||||
func TestStoreStubRemoveMessage(t *testing.T) {
|
|
||||||
ss := test.NewStore()
|
|
||||||
|
|
||||||
// Add messages.
|
|
||||||
inputMsgs := make([]*message.Delivery, 5)
|
|
||||||
for i := range inputMsgs {
|
|
||||||
subject := fmt.Sprintf("%s message %v", "box1", i)
|
|
||||||
inputMsgs[i] = makeTestMessage("box1", subject)
|
|
||||||
id, err := ss.AddMessage(inputMsgs[i])
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotEmpty(t, id, "AddMessage() must return an ID")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete second message.
|
|
||||||
deleted := inputMsgs[1]
|
|
||||||
err := ss.RemoveMessage("box1", deleted.ID())
|
|
||||||
assert.NoError(t, err, "DeleteMessage must not fail")
|
|
||||||
|
|
||||||
// Verify message is not in mailbox.
|
|
||||||
messages, err := ss.GetMessages("box1")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
assert.NotContains(t, messages, deleted, "Mailbox should not contain msg %q", deleted.ID())
|
|
||||||
|
|
||||||
// Verify message is no longer retrievable.
|
|
||||||
got, err := ss.GetMessage("box1", deleted.ID())
|
|
||||||
assert.Error(t, err)
|
|
||||||
assert.Nil(t, got, "Message should have been nil")
|
|
||||||
|
|
||||||
// Verify message is in deleted list.
|
|
||||||
assert.True(t, ss.MessageDeleted(deleted), "Message %q should be in deleted list", deleted.ID())
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestStoreStubMailboxAddGetVisit(t *testing.T) {
|
func TestStoreStubMailboxAddGetVisit(t *testing.T) {
|
||||||
ss := test.NewStore()
|
ss := test.NewStore()
|
||||||
|
|
||||||
@@ -166,6 +134,66 @@ func TestStoreStubMarkSeen(t *testing.T) {
|
|||||||
assert.Equal(t, 1, gotCount, "Incorrect number of seen messages")
|
assert.Equal(t, 1, gotCount, "Incorrect number of seen messages")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestStoreStubRemoveMessage(t *testing.T) {
|
||||||
|
ss := test.NewStore()
|
||||||
|
|
||||||
|
// Add messages.
|
||||||
|
inputMsgs := make([]*message.Delivery, 5)
|
||||||
|
for i := range inputMsgs {
|
||||||
|
subject := fmt.Sprintf("%s message %v", "box1", i)
|
||||||
|
inputMsgs[i] = makeTestMessage("box1", subject)
|
||||||
|
id, err := ss.AddMessage(inputMsgs[i])
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotEmpty(t, id, "AddMessage() must return an ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete second message.
|
||||||
|
deleted := inputMsgs[1]
|
||||||
|
err := ss.RemoveMessage("box1", deleted.ID())
|
||||||
|
assert.NoError(t, err, "DeleteMessage must not fail")
|
||||||
|
|
||||||
|
// Verify message is not in mailbox.
|
||||||
|
messages, err := ss.GetMessages("box1")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotContains(t, messages, deleted, "Mailbox should not contain msg %q", deleted.ID())
|
||||||
|
|
||||||
|
// Verify message is no longer retrievable.
|
||||||
|
got, err := ss.GetMessage("box1", deleted.ID())
|
||||||
|
assert.Error(t, err)
|
||||||
|
assert.Nil(t, got, "Message should have been nil")
|
||||||
|
|
||||||
|
// Verify message is in deleted list.
|
||||||
|
assert.True(t, ss.MessageDeleted(deleted), "Message %q should be in deleted list", deleted.ID())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStoreStubPurgeMessages(t *testing.T) {
|
||||||
|
ss := test.NewStore()
|
||||||
|
|
||||||
|
// Add messages.
|
||||||
|
inputMsgs := make([]*message.Delivery, 5)
|
||||||
|
for i := range inputMsgs {
|
||||||
|
subject := fmt.Sprintf("%s message %v", "box1", i)
|
||||||
|
inputMsgs[i] = makeTestMessage("box1", subject)
|
||||||
|
id, err := ss.AddMessage(inputMsgs[i])
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotEmpty(t, id, "AddMessage() must return an ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Purge messages.
|
||||||
|
err := ss.PurgeMessages("box1")
|
||||||
|
assert.NoError(t, err, "PurgeMessages must not fail")
|
||||||
|
|
||||||
|
// Verify message is not in mailbox.
|
||||||
|
messages, err := ss.GetMessages("box1")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, messages, 0, "Mailbox should be empty")
|
||||||
|
|
||||||
|
// Verify messages are in deleted list.
|
||||||
|
for _, want := range inputMsgs {
|
||||||
|
assert.True(t, ss.MessageDeleted(want), "Message %q should be in deleted list", want.ID())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestStoreStubForcedErrors(t *testing.T) {
|
func TestStoreStubForcedErrors(t *testing.T) {
|
||||||
ss := test.NewStore()
|
ss := test.NewStore()
|
||||||
var err error
|
var err error
|
||||||
|
|||||||
Reference in New Issue
Block a user