* extracting i18n functionality to i18n core library * Removing utils.T * Adding documentation and changing one function name for better explanation * Changing other missing utils.T * Adding license string * Renaming corelibs to pkg * Renaming corelibs to pkg (moving directory) * Renaming from pkg to shared * Fixing bodyPage.Html casing * Fixing merges * Fixing merge problem * Fixing tests
87 строки
2.2 KiB
Go
87 строки
2.2 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"html/template"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestHTMLTemplateWatcher(t *testing.T) {
|
|
TranslationsPreInit()
|
|
|
|
dir, err := ioutil.TempDir("", "")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(dir)
|
|
|
|
require.NoError(t, os.Mkdir(filepath.Join(dir, "templates"), 0700))
|
|
require.NoError(t, ioutil.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, err := NewHTMLTemplateWatcher("templates")
|
|
require.NotNil(t, watcher)
|
|
require.NoError(t, err)
|
|
defer watcher.Close()
|
|
|
|
tpl := NewHTMLTemplate(watcher.Templates(), "foo")
|
|
assert.Equal(t, "foo", tpl.Render())
|
|
|
|
require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "templates", "foo.html"), []byte(`{{ define "foo" }}bar{{ end }}`), 0600))
|
|
|
|
for i := 0; i < 30; i++ {
|
|
tpl = NewHTMLTemplate(watcher.Templates(), "foo")
|
|
if tpl.Render() == "bar" {
|
|
break
|
|
}
|
|
time.Sleep(time.Millisecond * 50)
|
|
}
|
|
assert.Equal(t, "bar", tpl.Render())
|
|
}
|
|
|
|
func TestHTMLTemplateWatcher_BadDirectory(t *testing.T) {
|
|
TranslationsPreInit()
|
|
watcher, err := NewHTMLTemplateWatcher("notarealdirectory")
|
|
assert.Nil(t, watcher)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestHTMLTemplate(t *testing.T) {
|
|
tpl := template.New("test")
|
|
_, err := tpl.Parse(`{{ define "foo" }}foo{{ .Props.Bar }}{{ end }}`)
|
|
require.NoError(t, err)
|
|
|
|
htmlTemplate := NewHTMLTemplate(tpl, "foo")
|
|
htmlTemplate.Props["Bar"] = "bar"
|
|
assert.Equal(t, "foobar", htmlTemplate.Render())
|
|
|
|
buf := &bytes.Buffer{}
|
|
require.NoError(t, htmlTemplate.RenderToWriter(buf))
|
|
assert.Equal(t, "foobar", buf.String())
|
|
}
|
|
|
|
func TestHTMLTemplate_RenderError(t *testing.T) {
|
|
tpl := template.New("test")
|
|
_, err := tpl.Parse(`{{ define "foo" }}foo{{ .Foo.Bar }}bar{{ end }}`)
|
|
require.NoError(t, err)
|
|
|
|
htmlTemplate := NewHTMLTemplate(tpl, "foo")
|
|
assert.Equal(t, "foo", htmlTemplate.Render())
|
|
|
|
buf := &bytes.Buffer{}
|
|
assert.Error(t, htmlTemplate.RenderToWriter(buf))
|
|
assert.Equal(t, "foo", buf.String())
|
|
}
|