82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package forms_test
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
						|
	"github.com/pocketbase/pocketbase/forms"
 | 
						|
	"github.com/pocketbase/pocketbase/tests"
 | 
						|
)
 | 
						|
 | 
						|
func TestEmailSendValidateAndSubmit(t *testing.T) {
 | 
						|
	scenarios := []struct {
 | 
						|
		template       string
 | 
						|
		email          string
 | 
						|
		expectedErrors []string
 | 
						|
	}{
 | 
						|
		{"", "", []string{"template", "email"}},
 | 
						|
		{"invalid", "test@example.com", []string{"template"}},
 | 
						|
		{"verification", "invalid", []string{"email"}},
 | 
						|
		{"verification", "test@example.com", nil},
 | 
						|
		{"password-reset", "test@example.com", nil},
 | 
						|
		{"email-change", "test@example.com", nil},
 | 
						|
	}
 | 
						|
 | 
						|
	for i, s := range scenarios {
 | 
						|
		func() {
 | 
						|
			app, _ := tests.NewTestApp()
 | 
						|
			defer app.Cleanup()
 | 
						|
 | 
						|
			form := forms.NewTestEmailSend(app)
 | 
						|
			form.Email = s.email
 | 
						|
			form.Template = s.template
 | 
						|
 | 
						|
			result := form.Submit()
 | 
						|
 | 
						|
			// parse errors
 | 
						|
			errs, ok := result.(validation.Errors)
 | 
						|
			if !ok && result != nil {
 | 
						|
				t.Errorf("(%d) Failed to parse errors %v", i, result)
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			// check errors
 | 
						|
			if len(errs) > len(s.expectedErrors) {
 | 
						|
				t.Errorf("(%d) Expected error keys %v, got %v", i, s.expectedErrors, errs)
 | 
						|
				return
 | 
						|
			}
 | 
						|
			for _, k := range s.expectedErrors {
 | 
						|
				if _, ok := errs[k]; !ok {
 | 
						|
					t.Errorf("(%d) Missing expected error key %q in %v", i, k, errs)
 | 
						|
					return
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			expectedEmails := 1
 | 
						|
			if len(s.expectedErrors) > 0 {
 | 
						|
				expectedEmails = 0
 | 
						|
			}
 | 
						|
 | 
						|
			if app.TestMailer.TotalSend != expectedEmails {
 | 
						|
				t.Errorf("(%d) Expected %d email(s) to be sent, got %d", i, expectedEmails, app.TestMailer.TotalSend)
 | 
						|
			}
 | 
						|
 | 
						|
			if len(s.expectedErrors) > 0 {
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			expectedContent := "Verify"
 | 
						|
			if s.template == "password-reset" {
 | 
						|
				expectedContent = "Reset password"
 | 
						|
			} else if s.template == "email-change" {
 | 
						|
				expectedContent = "Confirm new email"
 | 
						|
			}
 | 
						|
 | 
						|
			if !strings.Contains(app.TestMailer.LastMessage.HTML, expectedContent) {
 | 
						|
				t.Errorf("(%d) Expected the email to contains %s, got \n%v", i, expectedContent, app.TestMailer.LastMessage.HTML)
 | 
						|
			}
 | 
						|
		}()
 | 
						|
	}
 | 
						|
}
 |