Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
// Copyright © 2023 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package testhelpers
|
|
|
|
import (
|
|
"context"
|
|
"regexp"
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ory/kratos/courier"
|
|
keysetpagination "github.com/ory/x/pagination/keysetpagination_v2"
|
|
)
|
|
|
|
func CourierExpectMessage(ctx context.Context, t *testing.T, reg interface {
|
|
courier.PersistenceProvider
|
|
}, recipient, subject string,
|
|
) *courier.Message {
|
|
t.Helper()
|
|
messages, _, err := reg.CourierPersister().ListMessages(ctx, courier.ListCourierMessagesParameters{
|
|
Recipient: recipient,
|
|
}, []keysetpagination.Option{})
|
|
require.NoError(t, err)
|
|
|
|
sort.Slice(messages, func(i, j int) bool {
|
|
return messages[i].CreatedAt.After(messages[j].CreatedAt)
|
|
})
|
|
|
|
for _, m := range messages {
|
|
if strings.EqualFold(m.Recipient, recipient) && (strings.Contains(m.Subject, subject) || strings.Contains(m.Body, subject)) {
|
|
return &m
|
|
}
|
|
}
|
|
|
|
require.Failf(t, "could not find courier messages", "could not find courier messages with recipient %s and subject %s", recipient, subject)
|
|
return nil
|
|
}
|
|
|
|
func CourierExpectLinkInMessage(t *testing.T, message *courier.Message, offset int) string {
|
|
if offset == 0 {
|
|
offset = 1
|
|
}
|
|
match := regexp.MustCompile(`(http[^\s]+)`).FindStringSubmatch(message.Body)
|
|
require.Len(t, match, offset*2)
|
|
|
|
return match[offset]
|
|
}
|
|
|
|
func CourierExpectCodeInMessage(t *testing.T, message *courier.Message, offset int) string {
|
|
if offset == 0 {
|
|
offset = 1
|
|
}
|
|
match := regexp.MustCompile(CodeRegex).FindStringSubmatch(message.Body)
|
|
require.Len(t, match, offset*2)
|
|
|
|
return match[offset]
|
|
}
|