add validator + tests

This commit is contained in:
2023-09-10 14:50:39 +02:00
parent 5a43b094bb
commit d831c3e0aa
6 changed files with 154 additions and 28 deletions
+13 -4
View File
@@ -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
}
+60
View File
@@ -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'")
})
}