GODT-1076 Fix UIDPLUS response for importing existing message

This commit is contained in:
Michal Horejsek
2021-02-26 12:30:54 +01:00
parent a94c8a943f
commit 479b951c50
4 changed files with 42 additions and 3 deletions

View File

@ -181,7 +181,7 @@ func (im *imapMailbox) createMessage(flags []string, date time.Time, body imap.L
return err
}
targetSeq := im.storeMailbox.GetUIDList([]string{m.ID})
targetSeq := im.storeMailbox.GetUIDList(IDs)
return uidplus.AppendResponse(im.storeMailbox.UIDValidity(), targetSeq)
}
}

View File

@ -150,3 +150,31 @@ Feature: IMAP import messages
"""
Then IMAP response is "OK"
# We cannot control internal IDs on live server.
@ignore-live
Scenario: Import existing message
When IMAP client imports message to "INBOX"
"""
From: Foo <foo@example.com>
To: Bridge Test <bridgetest@pm.test>
Subject: Hello
Received: by 2002:0:0:0:0:0:0:0 with SMTP id 0123456789abcdef; Wed, 30 Dec 2020 01:23:45 0000
X-Pm-Internal-Id: 1
Hello
"""
Then IMAP response is "OK \[APPENDUID \d 1\] APPEND completed"
When IMAP client imports message to "INBOX"
"""
From: Foo <foo@example.com>
To: Bridge Test <bridgetest@pm.test>
Subject: Hello
Received: by 2002:0:0:0:0:0:0:0 with SMTP id 0123456789abcdef; Wed, 30 Dec 2020 01:23:45 0000
X-Pm-Internal-Id: 1
Hello
"""
Then IMAP response is "OK \[APPENDUID \d 1\] APPEND completed"

View File

@ -19,6 +19,7 @@ package tests
import (
"strconv"
"strings"
"time"
"github.com/cucumber/godog"
@ -47,9 +48,12 @@ func imapResponseIs(expectedResponse string) error {
func imapResponseNamedIs(clientID, expectedResponse string) error {
res := ctx.GetIMAPLastResponse(clientID)
if expectedResponse == "OK" {
switch {
case expectedResponse == "OK":
res.AssertOK()
} else {
case strings.HasPrefix(expectedResponse, "OK"):
res.AssertResult(expectedResponse)
default:
res.AssertError(expectedResponse)
}
return ctx.GetTestingError()

View File

@ -107,6 +107,13 @@ func (ir *IMAPResponse) AssertOK() *IMAPResponse {
return ir
}
func (ir *IMAPResponse) AssertResult(wantResult string) *IMAPResponse {
ir.wait()
a.NoError(ir.t, ir.err)
a.Regexp(ir.t, wantResult, ir.result, "Expected result %s but got %s", wantResult, ir.result)
return ir
}
func (ir *IMAPResponse) AssertError(wantErrMsg string) *IMAPResponse {
ir.wait()
if ir.err == nil {