add validator + tests
This commit is contained in:
+13
-4
@@ -5,14 +5,18 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
var validate *validator.Validate
|
||||
|
||||
type Email struct {
|
||||
Path string
|
||||
Sender string `json:"sender"`
|
||||
Receivers string `json:"receivers"`
|
||||
Subject string `json:"subject"`
|
||||
Content string `json:"content"`
|
||||
Sender string `json:"sender" validate:"required,email"`
|
||||
Receivers string `json:"receivers" validate:"required"`
|
||||
Subject string `json:"subject" validate:"required"`
|
||||
Content string `json:"content" validate:"required"`
|
||||
}
|
||||
|
||||
func FromJSON(path string) (Email, error) {
|
||||
@@ -27,6 +31,11 @@ func FromJSON(path string) (Email, error) {
|
||||
return mail, err
|
||||
}
|
||||
|
||||
validate = validator.New(validator.WithRequiredStructEnabled())
|
||||
if err := validate.Struct(mail); err != nil {
|
||||
return mail, err
|
||||
}
|
||||
|
||||
return mail, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package mail
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestFromJson(t *testing.T) {
|
||||
t.Run("right format", func(t *testing.T) {
|
||||
f, err := os.CreateTemp("", "temptest-")
|
||||
require.NoError(t, err)
|
||||
|
||||
defer f.Close()
|
||||
defer os.Remove(f.Name())
|
||||
|
||||
data := []byte(`{
|
||||
"sender":"test@test.com",
|
||||
"receivers": "test@test.com, test2@test.com",
|
||||
"subject": "test",
|
||||
"content": "test"
|
||||
}`)
|
||||
|
||||
n, err := f.Write(data)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, n)
|
||||
|
||||
mail, err := FromJSON(f.Name())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "test@test.com", mail.Sender)
|
||||
})
|
||||
|
||||
t.Run("bad sender", func(t *testing.T) {
|
||||
f, err := os.CreateTemp("", "temptest-")
|
||||
require.NoError(t, err)
|
||||
|
||||
defer f.Close()
|
||||
defer os.Remove(f.Name())
|
||||
|
||||
data := []byte(`{
|
||||
"sender":"test",
|
||||
"receivers": "test@test.com, test2@test.com",
|
||||
"subject": "test",
|
||||
"content": "test"
|
||||
}`)
|
||||
|
||||
n, err := f.Write(data)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, n)
|
||||
|
||||
_, err = FromJSON(f.Name())
|
||||
require.Error(t, err)
|
||||
|
||||
assert.Contains(t, err.Error(), "validation for 'Sender'")
|
||||
})
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user