package validate

import (
	"errors"
	"fmt"
	"testing"
)

func ExampleEmail() {
	fmt.Println(Email("not an email"))
	// Output: invalid email address
}

func FuzzEmail(f *testing.F) {
	want := ErrInvalidEmail

	f.Fuzz(func(t *testing.T, input string) {
		got := Email(input)

		if !errors.Is(got, want) {
			t.Error("got", got)
			t.Error("want", want)
		}
	})
}

func TestEmail(t *testing.T) {
	testCases := map[string]error{
		"test@example.com":                      nil,
		"firstname.lastname@some-website.co.uk": nil,

		"not an email":    ErrInvalidEmail,
		"testexample.com": ErrInvalidEmail,
	}

	for input, want := range testCases {
		t.Run(input, func(t *testing.T) {
			got := Email(input)

			if !errors.Is(got, want) {
				t.Error("got", got)
				t.Error("want", want)
			}
		})
	}
}