From ec9a799fe90e406f82cb189f81815ffed1fddcf7 Mon Sep 17 00:00:00 2001 From: Jakub Date: Tue, 18 Aug 2020 10:58:39 +0200 Subject: [PATCH] test - move like outlook - GODT-536 --- ...ete-trash.feature => delete_trash.feature} | 0 .../imap/message/move_outlook.feature | 31 +++++++++++++ test/imap_actions_messages_test.go | 43 +++++++++++++++++++ test/mocks/imap_response.go | 6 ++- 4 files changed, 78 insertions(+), 2 deletions(-) rename test/features/imap/message/{delete-trash.feature => delete_trash.feature} (100%) create mode 100644 test/features/imap/message/move_outlook.feature diff --git a/test/features/imap/message/delete-trash.feature b/test/features/imap/message/delete_trash.feature similarity index 100% rename from test/features/imap/message/delete-trash.feature rename to test/features/imap/message/delete_trash.feature diff --git a/test/features/imap/message/move_outlook.feature b/test/features/imap/message/move_outlook.feature new file mode 100644 index 00000000..1512f06b --- /dev/null +++ b/test/features/imap/message/move_outlook.feature @@ -0,0 +1,31 @@ +Feature: IMAP move messages like Outlook + Background: + Given there is connected user "user" + And there is "user" with mailbox "Folders/mbox" + And there are messages in mailbox "INBOX" for "user" + | from | to | subject | body | + | john.doe@mail.com | user@pm.me | foo | hello | + | jane.doe@mail.com | name@pm.me | bar | world | + And there is IMAP client logged in as "user" + And there is IMAP client selected in "INBOX" + + Scenario: Move message from INBOX to mailbox like outlook + When IMAP client moves messages "2" to "" like Outlook for "user" + Then IMAP response is "OK" + And mailbox "INBOX" for "user" has messages + | from | to | subject | + | jane.doe@mail.com | name@pm.me | bar | + And mailbox "" for "user" has messages + | from | to | subject | + | john.doe@mail.com | user@pm.me | foo | + + Examples: + | mailbox | + | Archive | + | Folders/mbox | + | Spam | + | Trash | + + + + #Scenario: Move message from Trash/Spam to INBOX like outlook diff --git a/test/imap_actions_messages_test.go b/test/imap_actions_messages_test.go index 25bb40a2..9e6a38bc 100644 --- a/test/imap_actions_messages_test.go +++ b/test/imap_actions_messages_test.go @@ -19,6 +19,7 @@ package tests import ( "fmt" + "sync" "github.com/cucumber/godog" "github.com/cucumber/godog/gherkin" @@ -32,6 +33,7 @@ func IMAPActionsMessagesFeatureContext(s *godog.Suite) { s.Step(`^IMAP client searches for "([^"]*)"$`, imapClientSearchesFor) s.Step(`^IMAP client copies messages "([^"]*)" to "([^"]*)"$`, imapClientCopiesMessagesTo) s.Step(`^IMAP client moves messages "([^"]*)" to "([^"]*)"$`, imapClientMovesMessagesTo) + s.Step(`^IMAP client moves messages "([^"]*)" to "([^"]*)" like outlook$`, imapClientMovesMessagesToLikeOutlook) s.Step(`^IMAP client imports message to "([^"]*)"$`, imapClientCreatesMessage) s.Step(`^IMAP client imports message to "([^"]*)" with encoding "([^"]*)"$`, imapClientCreatesMessageWithEncoding) s.Step(`^IMAP client creates message "([^"]*)" from "([^"]*)" to "([^"]*)" with body "([^"]*)" in "([^"]*)"$`, imapClientCreatesMessageFromToWithBody) @@ -93,6 +95,47 @@ func imapClientMovesMessagesTo(messageRange, newMailboxName string) error { return nil } +func imapClientMovesMessagesToLikeOutlook(messageRange, newMailboxName, user string) error { + sourceClient := "imap" + fetchResp := ctx.GetIMAPClient(sourceClient).Fetch(messageRange, "body.peek[]") + fetchResp.AssertOK() + if err := ctx.GetTestingError(); err != nil { + return err + } + + targetClient := "target" + if err := thereIsIMAPClientNamedLoggedInAs(targetClient, user); err != nil { + return err + } + if err := thereIsIMAPClientNamedSelectedIn(targetClient, newMailboxName); err != nil { + return err + } + + movingLikeOutlook := sync.WaitGroup{} + movingLikeOutlook.Add(2) + + go func() { + defer movingLikeOutlook.Done() + for _, msg := range fetchResp.Sections() { + res := ctx.GetIMAPClient(targetClient).Append(newMailboxName, msg) + res.AssertOK() + } + }() + + go func() { + defer movingLikeOutlook.Done() + imapClientNamedMarksMessageAsDeleted(sourceClient, messageRange) + ctx.GetIMAPLastResponse(sourceClient).AssertOK() + }() + + movingLikeOutlook.Wait() + + imapClientExpunge() + ctx.GetIMAPLastResponse(sourceClient).AssertOK() + + return ctx.GetTestingError() +} + func imapClientCreatesMessage(mailboxName string, message *gherkin.DocString) error { return imapClientCreatesMessageWithEncoding(mailboxName, "utf8", message) } diff --git a/test/mocks/imap_response.go b/test/mocks/imap_response.go index 5945f405..3911fe30 100644 --- a/test/mocks/imap_response.go +++ b/test/mocks/imap_response.go @@ -18,13 +18,13 @@ package mocks import ( + "bufio" "fmt" "io" "regexp" "strings" "time" - "github.com/emersion/go-imap" "github.com/pkg/errors" a "github.com/stretchr/testify/assert" ) @@ -37,7 +37,9 @@ type IMAPResponse struct { done bool } -func (ir *IMAPResponse) sendCommand(reqTag string, reqIndex int, command string, debug *debug, conn io.Writer, response imap.StringReader) { +func (ir *IMAPResponse) Sections() []string { return ir.sections } + +func (ir *IMAPResponse) sendCommand(reqTag string, reqIndex int, command string, debug *debug, conn io.Writer, response *bufio.Reader) { defer func() { ir.done = true }() tstart := time.Now()