Mono repo -> Master (#22553)
Combines the following repositories into one: https://github.com/mattermost/mattermost-server https://github.com/mattermost/mattermost-webapp https://github.com/mattermost/focalboard https://github.com/mattermost/mattermost-plugin-playbooks
Этот коммит содержится в:
114
server/platform/shared/templates/templates_test.go
Обычный файл
114
server/platform/shared/templates/templates_test.go
Обычный файл
@@ -0,0 +1,114 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
package templates
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"html/template"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestHTMLTemplateWatcher(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
require.NoError(t, os.Mkdir(filepath.Join(dir, "templates"), 0700))
|
||||
require.NoError(t, os.WriteFile(filepath.Join(dir, "templates", "foo.html"), []byte(`{{ define "foo" }}foo{{ end }}`), 0600))
|
||||
|
||||
prevDir, err := os.Getwd()
|
||||
require.NoError(t, err)
|
||||
defer os.Chdir(prevDir)
|
||||
os.Chdir(dir)
|
||||
|
||||
watcher, errChan, err := NewWithWatcher("templates")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, watcher)
|
||||
select {
|
||||
case msg := <-errChan:
|
||||
err = msg
|
||||
default:
|
||||
err = nil
|
||||
}
|
||||
require.NoError(t, err)
|
||||
defer watcher.Close()
|
||||
|
||||
text, err := watcher.RenderToString("foo", Data{})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "foo", text)
|
||||
|
||||
require.NoError(t, os.WriteFile(filepath.Join(dir, "templates", "foo.html"), []byte(`{{ define "foo" }}bar{{ end }}`), 0600))
|
||||
|
||||
require.Eventually(t, func() bool {
|
||||
text, err := watcher.RenderToString("foo", Data{})
|
||||
return text == "bar" && err == nil
|
||||
}, time.Millisecond*1000, time.Millisecond*50)
|
||||
}
|
||||
|
||||
func TestNewWithWatcher_BadDirectory(t *testing.T) {
|
||||
watcher, errChan, err := NewWithWatcher("notarealdirectory")
|
||||
require.Error(t, err)
|
||||
assert.Nil(t, watcher)
|
||||
assert.Nil(t, errChan)
|
||||
}
|
||||
|
||||
func TestNew_BadDirectory(t *testing.T) {
|
||||
watcher, err := New("notarealdirectory")
|
||||
assert.Nil(t, watcher)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func TestRender(t *testing.T) {
|
||||
tpl := template.New("test")
|
||||
_, err := tpl.Parse(`{{ define "foo" }}foo{{ .Props.Bar }}{{ end }}`)
|
||||
require.NoError(t, err)
|
||||
mt := NewFromTemplate(tpl)
|
||||
|
||||
data := Data{
|
||||
Props: map[string]any{
|
||||
"Bar": "bar",
|
||||
},
|
||||
}
|
||||
text, err := mt.RenderToString("foo", data)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "foobar", text)
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
require.NoError(t, mt.Render(buf, "foo", data))
|
||||
assert.Equal(t, "foobar", buf.String())
|
||||
}
|
||||
|
||||
func TestRenderError(t *testing.T) {
|
||||
tpl := template.New("test")
|
||||
_, err := tpl.Parse(`{{ define "foo" }}foo{{ .Foo.Bar }}bar{{ end }}`)
|
||||
require.NoError(t, err)
|
||||
mt := NewFromTemplate(tpl)
|
||||
|
||||
text, err := mt.RenderToString("foo", Data{})
|
||||
require.Error(t, err)
|
||||
assert.Equal(t, "", text)
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
assert.Error(t, mt.Render(buf, "foo", Data{}))
|
||||
assert.Equal(t, "foo", buf.String())
|
||||
}
|
||||
|
||||
func TestRenderUnknownTemplate(t *testing.T) {
|
||||
tpl := template.New("")
|
||||
mt := NewFromTemplate(tpl)
|
||||
|
||||
text, err := mt.RenderToString("foo", Data{})
|
||||
require.Error(t, err)
|
||||
assert.Equal(t, "", text)
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
assert.Error(t, mt.Render(buf, "foo", Data{}))
|
||||
assert.Equal(t, "", buf.String())
|
||||
}
|
||||
Ссылка в новой задаче
Block a user