|
package templates_test |
|
|
|
import ( |
|
"os" |
|
"path/filepath" |
|
|
|
"github.com/mudler/LocalAI/pkg/templates" |
|
. "github.com/onsi/ginkgo/v2" |
|
. "github.com/onsi/gomega" |
|
) |
|
|
|
var _ = Describe("TemplateCache", func() { |
|
var ( |
|
templateCache *templates.TemplateCache |
|
tempDir string |
|
) |
|
|
|
BeforeEach(func() { |
|
var err error |
|
tempDir, err = os.MkdirTemp("", "templates") |
|
Expect(err).NotTo(HaveOccurred()) |
|
|
|
|
|
err = os.WriteFile(filepath.Join(tempDir, "example.tmpl"), []byte("Hello, {{.Name}}!"), 0600) |
|
Expect(err).NotTo(HaveOccurred()) |
|
err = os.WriteFile(filepath.Join(tempDir, "empty.tmpl"), []byte(""), 0600) |
|
Expect(err).NotTo(HaveOccurred()) |
|
|
|
templateCache = templates.NewTemplateCache(tempDir) |
|
}) |
|
|
|
AfterEach(func() { |
|
os.RemoveAll(tempDir) |
|
}) |
|
|
|
Describe("EvaluateTemplate", func() { |
|
Context("when template is loaded successfully", func() { |
|
It("should evaluate the template correctly", func() { |
|
result, err := templateCache.EvaluateTemplate(1, "example", map[string]string{"Name": "Gopher"}) |
|
Expect(err).NotTo(HaveOccurred()) |
|
Expect(result).To(Equal("Hello, Gopher!")) |
|
}) |
|
}) |
|
|
|
Context("when template isn't a file", func() { |
|
It("should parse from string", func() { |
|
result, err := templateCache.EvaluateTemplate(1, "{{.Name}}", map[string]string{"Name": "Gopher"}) |
|
Expect(err).ToNot(HaveOccurred()) |
|
Expect(result).To(Equal("Gopher")) |
|
}) |
|
}) |
|
|
|
Context("when template is empty", func() { |
|
It("should return an empty string", func() { |
|
result, err := templateCache.EvaluateTemplate(1, "empty", nil) |
|
Expect(err).NotTo(HaveOccurred()) |
|
Expect(result).To(Equal("")) |
|
}) |
|
}) |
|
}) |
|
|
|
Describe("concurrency", func() { |
|
It("should handle multiple concurrent accesses", func(done Done) { |
|
go func() { |
|
_, _ = templateCache.EvaluateTemplate(1, "example", map[string]string{"Name": "Gopher"}) |
|
}() |
|
go func() { |
|
_, _ = templateCache.EvaluateTemplate(1, "example", map[string]string{"Name": "Gopher"}) |
|
}() |
|
close(done) |
|
}, 0.1) |
|
}) |
|
}) |
|
|