owl-blogs/web/editor/entry_form_test.go

102 lines
2.5 KiB
Go
Raw Normal View History

2023-07-05 20:03:00 +00:00
package editor_test
import (
2023-07-06 17:36:24 +00:00
"mime/multipart"
2023-07-05 20:03:00 +00:00
"owl-blogs/domain/model"
"owl-blogs/web/editor"
"reflect"
"testing"
"time"
"github.com/stretchr/testify/require"
)
type MockEntryMetaData struct {
Image string `owl:"inputType=file"`
Content string `owl:"inputType=text"`
}
2023-07-06 17:36:24 +00:00
type MockFormData struct {
}
func (f *MockFormData) FormFile(key string) (*multipart.FileHeader, error) {
return nil, nil
}
func (f *MockFormData) FormValue(key string, defaultValue ...string) string {
return key
}
2023-07-05 20:03:00 +00:00
type MockEntry struct {
id string
publishedAt *time.Time
2023-07-06 17:36:24 +00:00
metaData MockEntryMetaData
2023-07-05 20:03:00 +00:00
}
func (e *MockEntry) ID() string {
return e.id
}
func (e *MockEntry) Content() model.EntryContent {
2023-07-06 16:56:43 +00:00
return model.EntryContent(e.metaData.Content)
2023-07-05 20:03:00 +00:00
}
func (e *MockEntry) PublishedAt() *time.Time {
return e.publishedAt
}
func (e *MockEntry) MetaData() interface{} {
2023-07-06 17:36:24 +00:00
return &e.metaData
2023-07-05 20:03:00 +00:00
}
2023-07-06 16:56:43 +00:00
func (e *MockEntry) Create(id string, publishedAt *time.Time, metaData model.EntryMetaData) error {
2023-07-05 20:03:00 +00:00
e.id = id
e.publishedAt = publishedAt
2023-07-06 17:36:24 +00:00
e.metaData = *metaData.(*MockEntryMetaData)
2023-07-05 20:03:00 +00:00
return nil
}
func TestFieldToFormField(t *testing.T) {
field := reflect.TypeOf(&MockEntryMetaData{}).Elem().Field(0)
formField, err := editor.FieldToFormField(field)
require.NoError(t, err)
require.Equal(t, "Image", formField.Name)
require.Equal(t, "file", formField.Params.InputType)
}
func TestStructToFields(t *testing.T) {
fields, err := editor.StructToFormFields(&MockEntryMetaData{})
require.NoError(t, err)
require.Len(t, fields, 2)
require.Equal(t, "Image", fields[0].Name)
require.Equal(t, "file", fields[0].Params.InputType)
require.Equal(t, "Content", fields[1].Name)
require.Equal(t, "text", fields[1].Params.InputType)
}
func TestEditorEntryForm_HtmlForm(t *testing.T) {
2023-07-06 17:36:24 +00:00
form := editor.NewEntryForm(&MockEntry{})
html, err := form.HtmlForm()
2023-07-05 20:03:00 +00:00
require.NoError(t, err)
2023-07-06 17:36:24 +00:00
require.Contains(t, html, "<form")
require.Contains(t, html, "method=\"POST\"")
require.Contains(t, html, "<input type=\"file\" name=\"Image\"")
require.Contains(t, html, "<input type=\"text\" name=\"Content\"")
require.Contains(t, html, "<input type=\"submit\" value=\"Submit\"")
2023-07-05 20:03:00 +00:00
}
2023-07-06 17:36:24 +00:00
func TestFormParseNil(t *testing.T) {
form := editor.NewEntryForm(&MockEntry{})
_, err := form.Parse(nil)
require.Error(t, err)
}
func TestFormParse(t *testing.T) {
form := editor.NewEntryForm(&MockEntry{})
entry, err := form.Parse(&MockFormData{})
require.NoError(t, err)
require.Equal(t, "Image", entry.MetaData().(*MockEntryMetaData).Image)
require.Equal(t, "Content", entry.MetaData().(*MockEntryMetaData).Content)
}