test: Add test around account settings.

This commit is contained in:
Romain Le Jeune 2023-10-18 07:45:08 +00:00
parent ff78a23084
commit 5747b85543
6 changed files with 49 additions and 4 deletions

2
go.mod
View File

@ -7,7 +7,7 @@ require (
github.com/Masterminds/semver/v3 v3.2.0
github.com/ProtonMail/gluon v0.17.1-0.20231009084701-3af0474b0b3c
github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a
github.com/ProtonMail/go-proton-api v0.4.1-0.20231016151024-8f03c5a977df
github.com/ProtonMail/go-proton-api v0.4.1-0.20231018070752-2449db500edd
github.com/ProtonMail/gopenpgp/v2 v2.7.3-proton
github.com/PuerkitoBio/goquery v1.8.1
github.com/abiosoft/ishell v2.0.0+incompatible

4
go.sum
View File

@ -34,8 +34,8 @@ github.com/ProtonMail/go-message v0.13.1-0.20230526094639-b62c999c85b7 h1:+j+Kd/
github.com/ProtonMail/go-message v0.13.1-0.20230526094639-b62c999c85b7/go.mod h1:NBAn21zgCJ/52WLDyed18YvYFm5tEoeDauubFqLokM4=
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k=
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw=
github.com/ProtonMail/go-proton-api v0.4.1-0.20231016151024-8f03c5a977df h1:4UteX2UmmLe1xvn3HmdhLUjtwKuOMxzSa/tPsUvnX7s=
github.com/ProtonMail/go-proton-api v0.4.1-0.20231016151024-8f03c5a977df/go.mod h1:ZmvQMA8hanLiD1tFsvu9+qGBcuxbIRfch/4z/nqBhXA=
github.com/ProtonMail/go-proton-api v0.4.1-0.20231018070752-2449db500edd h1:/Z3nwzsVeSwTFkrIKG7BLD24P4cxpaJBn8mzbSe2kPg=
github.com/ProtonMail/go-proton-api v0.4.1-0.20231018070752-2449db500edd/go.mod h1:ZmvQMA8hanLiD1tFsvu9+qGBcuxbIRfch/4z/nqBhXA=
github.com/ProtonMail/go-srp v0.0.7 h1:Sos3Qk+th4tQR64vsxGIxYpN3rdnG9Wf9K4ZloC1JrI=
github.com/ProtonMail/go-srp v0.0.7/go.mod h1:giCp+7qRnMIcCvI6V6U3S1lDDXDQYx2ewJ6F/9wdlJk=
github.com/ProtonMail/gopenpgp/v2 v2.7.3-proton h1:wuAxBUU9qF2wyDVJprn/2xPDx000eol5gwlKbOUYY88=

View File

@ -6,4 +6,14 @@ Feature: Account settings
When bridge starts
Scenario: Check account default settings
the account "[user:user]" has default draft format "HTML"
Then the account "[user:user]" matches the following settings:
| DraftMIMEType | AttachPublicKey | Sign | PGPScheme |
| text/html | false | 0 | 0 |
When the account "[user:user]" has public key attachment "enabled"
And the account "[user:user]" has sign external messages "enabled"
And the account "[user:user]" has default draft format "plain"
And the account "[user:user]" has default PGP schema "inline"
Then the account "[user:user]" matches the following settings:
| DraftMIMEType | AttachPublicKey | Sign | PGPScheme |
| text/plain | true | 1 | 8 |

View File

@ -114,6 +114,7 @@ func (s *scenario) steps(ctx *godog.ScenarioContext) {
ctx.Step(`^the account "([^"]*)" has sign external messages "([^"]*)"`, s.accountHasSignExternalMessages)
ctx.Step(`^the account "([^"]*)" has default draft format "([^"]*)"`, s.accountHasDefaultDraftFormat)
ctx.Step(`^the account "([^"]*)" has default PGP schema "([^"]*)"`, s.accountHasDefaultPGPSchema)
ctx.Step(`^the account "([^"]*)" matches the following settings:$`, s.accountMatchesSettings)
// ==== IMAP ====
ctx.Step(`^user "([^"]*)" connects IMAP client "([^"]*)"$`, s.userConnectsIMAPClient)

View File

@ -28,6 +28,7 @@ import (
"time"
"github.com/ProtonMail/gluon/rfc822"
"github.com/ProtonMail/go-proton-api"
"github.com/ProtonMail/proton-bridge/v3/pkg/message"
"github.com/ProtonMail/proton-bridge/v3/pkg/message/parser"
pmmime "github.com/ProtonMail/proton-bridge/v3/pkg/mime"
@ -555,3 +556,10 @@ type Contact struct {
Sign string `bdd:"signature"`
Encrypt string `bdd:"encryption"`
}
type MailSettings struct {
DraftMIMEType rfc822.MIMEType `bdd:"DraftMIMEType"`
AttachPublicKey proton.Bool `bdd:"AttachPublicKey"`
Sign proton.SignExternalMessages `bdd:"Sign"`
PGPScheme proton.EncryptionScheme `bdd:"PGPScheme"`
}

View File

@ -643,3 +643,29 @@ func (s *scenario) accountHasDefaultPGPSchema(account, schema string) error {
return err
})
}
func (s *scenario) accountMatchesSettings(account string, table *godog.Table) error {
return s.t.withClient(context.Background(), account, func(ctx context.Context, c *proton.Client) error {
wantSettings, err := unmarshalTable[MailSettings](table)
if err != nil {
return err
}
settings, err := c.GetMailSettings(ctx)
if err != nil {
return err
}
if len(wantSettings) != 1 {
return errors.New("this step only supports one settings definition at a time")
}
return matchSettings(settings, wantSettings[0])
})
}
func matchSettings(have proton.MailSettings, want MailSettings) error {
if !IsSub(ToAny(have), ToAny(want)) {
return fmt.Errorf("missing mailsettings: have %#v, want %#v", have, want)
}
return nil
}