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)
|
|
|
|
}
|