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
75 lines
3.7 KiB
Go
75 lines
3.7 KiB
Go
// Copyright © 2023 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package courier_test
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ory/kratos/courier"
|
|
"github.com/ory/kratos/courier/template"
|
|
"github.com/ory/kratos/courier/template/email"
|
|
"github.com/ory/kratos/pkg"
|
|
)
|
|
|
|
func TestNewEmailTemplateFromMessage(t *testing.T) {
|
|
_, reg := pkg.NewFastRegistryWithMocks(t)
|
|
ctx := context.Background()
|
|
|
|
for tmplType, expectedTmpl := range map[template.TemplateType]courier.EmailTemplate{
|
|
template.TypeRecoveryInvalid: email.NewRecoveryInvalid(reg, &email.RecoveryInvalidModel{To: "foo"}),
|
|
template.TypeRecoveryValid: email.NewRecoveryValid(reg, &email.RecoveryValidModel{To: "bar", RecoveryURL: "http://foo.bar"}),
|
|
template.TypeRecoveryCodeValid: email.NewRecoveryCodeValid(reg, &email.RecoveryCodeValidModel{To: "bar", RecoveryCode: "12345678"}),
|
|
template.TypeRecoveryCodeInvalid: email.NewRecoveryCodeInvalid(reg, &email.RecoveryCodeInvalidModel{To: "bar"}),
|
|
template.TypeVerificationInvalid: email.NewVerificationInvalid(reg, &email.VerificationInvalidModel{To: "baz"}),
|
|
template.TypeVerificationValid: email.NewVerificationValid(reg, &email.VerificationValidModel{To: "faz", VerificationURL: "http://bar.foo"}),
|
|
template.TypeVerificationCodeInvalid: email.NewVerificationCodeInvalid(reg, &email.VerificationCodeInvalidModel{To: "baz"}),
|
|
template.TypeVerificationCodeValid: email.NewVerificationCodeValid(reg, &email.VerificationCodeValidModel{To: "faz", VerificationURL: "http://bar.foo", VerificationCode: "123456678"}),
|
|
template.TypeTestStub: email.NewTestStub(&email.TestStubModel{To: "far", Subject: "test subject", Body: "test body"}),
|
|
template.TypeLoginCodeValid: email.NewLoginCodeValid(reg, &email.LoginCodeValidModel{To: "far", LoginCode: "123456"}),
|
|
template.TypeRegistrationCodeValid: email.NewRegistrationCodeValid(reg, &email.RegistrationCodeValidModel{To: "far", RegistrationCode: "123456"}),
|
|
template.TypeVerifiableAddressChanged: email.NewVerifiableAddressChanged(reg, &email.VerifiableAddressChangedModel{To: "far", ChangedAt: "2026-04-21T12:00:00Z", Identity: map[string]any{"ID": "00000000-0000-0000-0000-000000000001"}}),
|
|
template.TypeAuthenticatorKeyAdded: email.NewAuthenticatorKeyAdded(reg, &email.AuthenticatorKeyAddedModel{To: "far", AddedAt: "2026-04-21T12:00:00Z", Identity: map[string]any{"ID": "00000000-0000-0000-0000-000000000001"}}),
|
|
} {
|
|
t.Run(fmt.Sprintf("case=%s", tmplType), func(t *testing.T) {
|
|
tmplData, err := json.Marshal(expectedTmpl)
|
|
require.NoError(t, err)
|
|
|
|
m := courier.Message{TemplateType: tmplType, TemplateData: tmplData}
|
|
actualTmpl, err := courier.NewEmailTemplateFromMessage(reg, m)
|
|
require.NoError(t, err)
|
|
|
|
require.IsType(t, expectedTmpl, actualTmpl)
|
|
|
|
expectedRecipient, err := expectedTmpl.EmailRecipient()
|
|
require.NoError(t, err)
|
|
actualRecipient, err := actualTmpl.EmailRecipient()
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedRecipient, actualRecipient)
|
|
|
|
expectedSubject, err := expectedTmpl.EmailSubject(ctx)
|
|
require.NoError(t, err)
|
|
actualSubject, err := actualTmpl.EmailSubject(ctx)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedSubject, actualSubject)
|
|
|
|
expectedBody, err := expectedTmpl.EmailBody(ctx)
|
|
require.NoError(t, err)
|
|
actualBody, err := actualTmpl.EmailBody(ctx)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedBody, actualBody)
|
|
|
|
expectedBodyPlaintext, err := expectedTmpl.EmailBodyPlaintext(ctx)
|
|
require.NoError(t, err)
|
|
actualBodyPlaintext, err := actualTmpl.EmailBodyPlaintext(ctx)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedBodyPlaintext, actualBodyPlaintext)
|
|
})
|
|
}
|
|
}
|