1
0

Simplified integration tests

This commit is contained in:
Michal Horejsek
2020-09-03 08:39:47 +02:00
parent c7578cf53c
commit 6671b78799
5 changed files with 17 additions and 29 deletions

View File

@ -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

View File

@ -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
} }

View File

@ -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 |

View File

@ -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]
}

View File

@ -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(),