From b594b5f90a97c72496c45b7fafd79263b60d52f0 Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Tue, 25 Oct 2022 00:07:47 +0200 Subject: [PATCH] Other: IMAP create duplicate mailbox tests --- tests/bdd_test.go | 1 - tests/features/imap/mailbox/create.feature | 40 +++++++++++- .../imap/mailbox/hide_all_mail.feature | 64 +++++++++---------- tests/features/imap/mailbox/list.feature | 26 ++++---- tests/imap_test.go | 23 ------- 5 files changed, 84 insertions(+), 70 deletions(-) diff --git a/tests/bdd_test.go b/tests/bdd_test.go index 07061478..2623a6a0 100644 --- a/tests/bdd_test.go +++ b/tests/bdd_test.go @@ -154,7 +154,6 @@ func TestFeatures(testingT *testing.T) { ctx.Step(`^IMAP client "([^"]*)" sees the following mailbox info:$`, s.imapClientSeesTheFollowingMailboxInfo) ctx.Step(`^IMAP client "([^"]*)" eventually sees the following mailbox info:$`, s.imapClientEventuallySeesTheFollowingMailboxInfo) ctx.Step(`^IMAP client "([^"]*)" sees the following mailbox info for "([^"]*)":$`, s.imapClientSeesTheFollowingMailboxInfoForMailbox) - ctx.Step(`^IMAP client "([^"]*)" sees the following mailboxes:$`, s.imapClientSeesTheFollowingMailboxes) ctx.Step(`^IMAP client "([^"]*)" sees "([^"]*)"$`, s.imapClientSeesMailbox) ctx.Step(`^IMAP client "([^"]*)" does not see "([^"]*)"$`, s.imapClientDoesNotSeeMailbox) ctx.Step(`^IMAP client "([^"]*)" counts (\d+) mailboxes under "([^"]*)"$`, s.imapClientCountsMailboxesUnder) diff --git a/tests/features/imap/mailbox/create.feature b/tests/features/imap/mailbox/create.feature index 6a914724..83a33aa5 100644 --- a/tests/features/imap/mailbox/create.feature +++ b/tests/features/imap/mailbox/create.feature @@ -1,6 +1,12 @@ Feature: IMAP create mailbox Background: Given there exists an account with username "user@pm.me" and password "password" + And the account "user@pm.me" has the following custom mailboxes: + | name | type | + | f1 | folder | + | f2 | folder | + | l1 | label | + | l2 | label | And bridge starts And the user logs in with username "user@pm.me" and password "password" And user "user@pm.me" finishes syncing @@ -12,4 +18,36 @@ Feature: IMAP create mailbox Scenario: Create label When IMAP client "1" creates "Labels/mbox" - Then IMAP client "1" sees "Labels/mbox" \ No newline at end of file + Then IMAP client "1" sees "Labels/mbox" + + Scenario: Creating folder or label with existing name is not possible + When IMAP client "1" creates "Folders/f1" + Then it fails + When IMAP client "1" creates "Folders/f2" + Then it fails + When IMAP client "1" creates "Labels/l1" + Then it fails + When IMAP client "1" creates "Labels/l2" + Then it fails + When IMAP client "1" creates "Folders/f3" + Then it succeeds + When IMAP client "1" creates "Labels/l3" + Then it succeeds + Then IMAP client "1" sees the following mailbox info: + | name | + | INBOX | + | Drafts | + | Sent | + | Starred | + | Archive | + | Spam | + | Trash | + | All Mail | + | Folders | + | Folders/f1 | + | Folders/f2 | + | Folders/f3 | + | Labels | + | Labels/l1 | + | Labels/l2 | + | Labels/l3 | \ No newline at end of file diff --git a/tests/features/imap/mailbox/hide_all_mail.feature b/tests/features/imap/mailbox/hide_all_mail.feature index 838f14e9..2704b0cf 100644 --- a/tests/features/imap/mailbox/hide_all_mail.feature +++ b/tests/features/imap/mailbox/hide_all_mail.feature @@ -8,39 +8,39 @@ Feature: IMAP Hide All Mail Scenario: Hide All Mail Mailbox Given IMAP client "1" sees the following mailbox info: - | name | total | unread | - | INBOX | 0 | 0 | - | Drafts | 0 | 0 | - | Sent | 0 | 0 | - | Starred | 0 | 0 | - | Archive | 0 | 0 | - | Spam | 0 | 0 | - | Trash | 0 | 0 | - | All Mail | 0 | 0 | - | Folders | 0 | 0 | - | Labels | 0 | 0 | + | name | + | INBOX | + | Drafts | + | Sent | + | Starred | + | Archive | + | Spam | + | Trash | + | All Mail | + | Folders | + | Labels | When bridge hides all mail Then IMAP client "1" sees the following mailbox info: - | name | total | unread | - | INBOX | 0 | 0 | - | Drafts | 0 | 0 | - | Sent | 0 | 0 | - | Starred | 0 | 0 | - | Archive | 0 | 0 | - | Spam | 0 | 0 | - | Trash | 0 | 0 | - | Folders | 0 | 0 | - | Labels | 0 | 0 | + | name | + | INBOX | + | Drafts | + | Sent | + | Starred | + | Archive | + | Spam | + | Trash | + | Folders | + | Labels | When bridge shows all mail Then IMAP client "1" sees the following mailbox info: - | name | total | unread | - | INBOX | 0 | 0 | - | Drafts | 0 | 0 | - | Sent | 0 | 0 | - | Starred | 0 | 0 | - | Archive | 0 | 0 | - | Spam | 0 | 0 | - | Trash | 0 | 0 | - | All Mail | 0 | 0 | - | Folders | 0 | 0 | - | Labels | 0 | 0 | + | name | + | INBOX | + | Drafts | + | Sent | + | Starred | + | Archive | + | Spam | + | Trash | + | All Mail | + | Folders | + | Labels | diff --git a/tests/features/imap/mailbox/list.feature b/tests/features/imap/mailbox/list.feature index 1639f558..11b52bc1 100644 --- a/tests/features/imap/mailbox/list.feature +++ b/tests/features/imap/mailbox/list.feature @@ -10,19 +10,19 @@ Feature: IMAP list mailboxes And user "user@pm.me" finishes syncing And user "user@pm.me" connects and authenticates IMAP client "1" Then IMAP client "1" sees the following mailbox info: - | name | total | unread | - | INBOX | 0 | 0 | - | Drafts | 0 | 0 | - | Sent | 0 | 0 | - | Starred | 0 | 0 | - | Archive | 0 | 0 | - | Spam | 0 | 0 | - | Trash | 0 | 0 | - | All Mail | 0 | 0 | - | Folders | 0 | 0 | - | Folders/mbox1 | 0 | 0 | - | Labels | 0 | 0 | - | Labels/mbox2 | 0 | 0 | + | name | + | INBOX | + | Drafts | + | Sent | + | Starred | + | Archive | + | Spam | + | Trash | + | All Mail | + | Folders | + | Folders/mbox1 | + | Labels | + | Labels/mbox2 | Scenario: List multiple times in parallel without crash Given there exists an account with username "user@pm.me" and password "password" diff --git a/tests/imap_test.go b/tests/imap_test.go index c5ba6912..d0c90e58 100644 --- a/tests/imap_test.go +++ b/tests/imap_test.go @@ -27,12 +27,9 @@ import ( "github.com/bradenaw/juniper/iterator" "github.com/bradenaw/juniper/xslices" "github.com/cucumber/godog" - "github.com/cucumber/messages-go/v16" "github.com/emersion/go-imap" id "github.com/emersion/go-imap-id" "github.com/emersion/go-imap/client" - "github.com/google/go-cmp/cmp" - "github.com/google/go-cmp/cmp/cmpopts" "golang.org/x/exp/slices" ) @@ -190,26 +187,6 @@ func (s *scenario) imapClientSeesTheFollowingMailboxInfoForMailbox(clientID, mai return matchMailboxes(haveMailboxes, wantMailboxes) } -func (s *scenario) imapClientSeesTheFollowingMailboxes(clientID string, table *godog.Table) error { - _, client := s.t.getIMAPClient(clientID) - - mailboxes := clientList(client) - - have := xslices.Map(mailboxes, func(info *imap.MailboxInfo) string { - return info.Name - }) - - want := xslices.Map(table.Rows[1:], func(row *messages.PickleTableRow) string { - return row.Cells[0].Value - }) - - if !cmp.Equal(want, have, cmpopts.SortSlices(func(a, b string) bool { return a < b })) { - return fmt.Errorf("want %v, have %v", want, have) - } - - return nil -} - func (s *scenario) imapClientSeesMailbox(clientID, mailbox string) error { _, client := s.t.getIMAPClient(clientID)