Simplified integration tests
This commit is contained in:
@ -31,10 +31,9 @@ type PMAPIController interface {
|
|||||||
AddUser(user *pmapi.User, addresses *pmapi.AddressList, password string, twoFAEnabled bool) error
|
AddUser(user *pmapi.User, addresses *pmapi.AddressList, password string, twoFAEnabled bool) error
|
||||||
AddUserLabel(username string, label *pmapi.Label) error
|
AddUserLabel(username string, label *pmapi.Label) error
|
||||||
GetLabelIDs(username string, labelNames []string) ([]string, error)
|
GetLabelIDs(username string, labelNames []string) ([]string, error)
|
||||||
AddUserMessage(username string, message *pmapi.Message) error
|
AddUserMessage(username string, message *pmapi.Message) (string, error)
|
||||||
GetMessageID(username, messageIndex string) string
|
GetMessageID(username, messageIndex string) string
|
||||||
GetMessages(username, labelID string) ([]*pmapi.Message, error)
|
GetMessages(username, labelID string) ([]*pmapi.Message, error)
|
||||||
GetLastMessageID(username string) string
|
|
||||||
ReorderAddresses(user *pmapi.User, addressIDs []string) error
|
ReorderAddresses(user *pmapi.User, addressIDs []string) error
|
||||||
PrintCalls()
|
PrintCalls()
|
||||||
WasCalled(method, path string, expectedRequest []byte) bool
|
WasCalled(method, path string, expectedRequest []byte) bool
|
||||||
|
|||||||
@ -130,7 +130,7 @@ func getLabelExclusive(name string) int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) error {
|
func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) (string, error) {
|
||||||
if _, ok := ctl.messagesByUsername[username]; !ok {
|
if _, ok := ctl.messagesByUsername[username]; !ok {
|
||||||
ctl.messagesByUsername[username] = []*pmapi.Message{}
|
ctl.messagesByUsername[username] = []*pmapi.Message{}
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) e
|
|||||||
message.LabelIDs = append(message.LabelIDs, pmapi.AllMailLabel)
|
message.LabelIDs = append(message.LabelIDs, pmapi.AllMailLabel)
|
||||||
ctl.messagesByUsername[username] = append(ctl.messagesByUsername[username], message)
|
ctl.messagesByUsername[username] = append(ctl.messagesByUsername[username], message)
|
||||||
ctl.resetUsers()
|
ctl.resetUsers()
|
||||||
return nil
|
return message.ID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctl *Controller) getFakeAPIForUser(userID string) *FakePMAPI {
|
func (ctl *Controller) getFakeAPIForUser(userID string) *FakePMAPI {
|
||||||
@ -172,8 +172,4 @@ func (ctl *Controller) GetMessages(username, labelID string) ([]*pmapi.Message,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return messages, nil
|
return messages, nil
|
||||||
|
|
||||||
func (ctl *Controller) GetLastMessageID(username string) string {
|
|
||||||
msgs := ctl.messagesByUsername[username]
|
|
||||||
return msgs[len(msgs)-1].ID
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@ Feature: IMAP remove messages from Trash
|
|||||||
And there is "user" with mailbox "Folders/mbox"
|
And there is "user" with mailbox "Folders/mbox"
|
||||||
And there is "user" with mailbox "Labels/label"
|
And there is "user" with mailbox "Labels/label"
|
||||||
|
|
||||||
Scenario Outline: Delete messages from Trash/Spam does not remove from All Mail
|
Scenario Outline: Message in Trash/Spam and some other label is not permanently deleted
|
||||||
Given there are messages in mailbox "<mailbox>" for "user"
|
Given there are messages in mailbox "<mailbox>" for "user"
|
||||||
| from | to | subject | body |
|
| from | to | subject | body |
|
||||||
| john.doe@mail.com | user@pm.me | foo | hello |
|
| john.doe@mail.com | user@pm.me | foo | hello |
|
||||||
@ -29,8 +29,7 @@ Feature: IMAP remove messages from Trash
|
|||||||
| Spam |
|
| Spam |
|
||||||
| Trash |
|
| Trash |
|
||||||
|
|
||||||
|
Scenario Outline: Message in Trash/Spam only is permanently deleted
|
||||||
Scenario Outline: Delete messages from Trash/Spamm removes from All Mail
|
|
||||||
Given there are messages in mailbox "<mailbox>" for "user"
|
Given there are messages in mailbox "<mailbox>" for "user"
|
||||||
| from | to | subject | body |
|
| from | to | subject | body |
|
||||||
| john.doe@mail.com | user@pm.me | foo | hello |
|
| john.doe@mail.com | user@pm.me | foo | hello |
|
||||||
|
|||||||
@ -30,10 +30,10 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) error {
|
func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) (string, error) {
|
||||||
client, ok := ctl.pmapiByUsername[username]
|
client, ok := ctl.pmapiByUsername[username]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("user %s does not exist", username)
|
return "", fmt.Errorf("user %s does not exist", username)
|
||||||
}
|
}
|
||||||
|
|
||||||
if message.Flags == 0 {
|
if message.Flags == 0 {
|
||||||
@ -42,7 +42,7 @@ func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) e
|
|||||||
|
|
||||||
body, err := buildMessage(client, message)
|
body, err := buildMessage(client, message)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to build message")
|
return "", errors.Wrap(err, "failed to build message")
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &pmapi.ImportMsgReq{
|
req := &pmapi.ImportMsgReq{
|
||||||
@ -56,16 +56,15 @@ func (ctl *Controller) AddUserMessage(username string, message *pmapi.Message) e
|
|||||||
|
|
||||||
results, err := client.Import([]*pmapi.ImportMsgReq{req})
|
results, err := client.Import([]*pmapi.ImportMsgReq{req})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to make an import")
|
return "", errors.Wrap(err, "failed to make an import")
|
||||||
}
|
}
|
||||||
for _, result := range results {
|
result := results[0]
|
||||||
if result.Error != nil {
|
if result.Error != nil {
|
||||||
return errors.Wrap(result.Error, "failed to import message")
|
return "", errors.Wrap(result.Error, "failed to import message")
|
||||||
}
|
|
||||||
ctl.messageIDsByUsername[username] = append(ctl.messageIDsByUsername[username], result.MessageID)
|
|
||||||
}
|
}
|
||||||
|
ctl.messageIDsByUsername[username] = append(ctl.messageIDsByUsername[username], result.MessageID)
|
||||||
|
|
||||||
return nil
|
return result.MessageID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildMessage(client pmapi.Client, message *pmapi.Message) (*bytes.Buffer, error) {
|
func buildMessage(client pmapi.Client, message *pmapi.Message) (*bytes.Buffer, error) {
|
||||||
@ -162,8 +161,3 @@ func (ctl *Controller) GetMessages(username, labelID string) ([]*pmapi.Message,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return messages, nil
|
return messages, nil
|
||||||
|
|
||||||
func (ctl *Controller) GetLastMessageID(username string) string {
|
|
||||||
ids := ctl.messageIDsByUsername[username]
|
|
||||||
return ids[len(ids)-1]
|
|
||||||
}
|
|
||||||
|
|||||||
@ -143,12 +143,12 @@ func thereAreMessagesInMailboxesForAddressOfUser(mailboxNames, bddAddressID, bdd
|
|||||||
return fmt.Errorf("unexpected column name: %s", head[n].Value)
|
return fmt.Errorf("unexpected column name: %s", head[n].Value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := ctx.GetPMAPIController().AddUserMessage(account.Username(), message); err != nil {
|
lastMessageID, err := ctx.GetPMAPIController().AddUserMessage(account.Username(), message)
|
||||||
|
if err != nil {
|
||||||
return internalError(err, "adding message")
|
return internalError(err, "adding message")
|
||||||
}
|
}
|
||||||
|
|
||||||
if hasDeletedFlag {
|
if hasDeletedFlag {
|
||||||
lastMessageID := ctx.GetPMAPIController().GetLastMessageID(account.Username())
|
|
||||||
markMessageIDsDeleted = append(markMessageIDsDeleted, lastMessageID)
|
markMessageIDsDeleted = append(markMessageIDsDeleted, lastMessageID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -221,7 +221,7 @@ func thereAreSomeMessagesInMailboxesForAddressOfUser(numberOfMessages int, mailb
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return internalError(err, "getting labels %s for %s", mailboxNames, account.Username())
|
return internalError(err, "getting labels %s for %s", mailboxNames, account.Username())
|
||||||
}
|
}
|
||||||
err = ctx.GetPMAPIController().AddUserMessage(account.Username(), &pmapi.Message{
|
_, err = ctx.GetPMAPIController().AddUserMessage(account.Username(), &pmapi.Message{
|
||||||
MIMEType: "text/plain",
|
MIMEType: "text/plain",
|
||||||
LabelIDs: labelIDs,
|
LabelIDs: labelIDs,
|
||||||
AddressID: account.AddressID(),
|
AddressID: account.AddressID(),
|
||||||
|
|||||||
Reference in New Issue
Block a user