2021-10-04 15:14:52 +00:00
|
|
|
package cstest
|
|
|
|
|
|
|
|
import (
|
2022-11-30 16:36:56 +00:00
|
|
|
"strings"
|
2022-02-15 11:50:33 +00:00
|
|
|
"testing"
|
2022-11-30 16:36:56 +00:00
|
|
|
"text/template"
|
2022-02-15 11:50:33 +00:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
2022-09-30 14:01:42 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2022-12-20 15:11:51 +00:00
|
|
|
|
|
|
|
logtest "github.com/sirupsen/logrus/hooks/test"
|
2021-10-04 15:14:52 +00:00
|
|
|
)
|
|
|
|
|
2022-02-15 11:50:33 +00:00
|
|
|
func AssertErrorContains(t *testing.T, err error, expectedErr string) {
|
2022-09-30 14:01:42 +00:00
|
|
|
t.Helper()
|
|
|
|
|
2022-05-18 08:08:37 +00:00
|
|
|
if expectedErr != "" {
|
|
|
|
assert.ErrorContains(t, err, expectedErr)
|
2022-02-15 11:50:33 +00:00
|
|
|
return
|
|
|
|
}
|
2022-05-18 08:08:37 +00:00
|
|
|
|
|
|
|
assert.NoError(t, err)
|
2022-02-15 11:50:33 +00:00
|
|
|
}
|
2022-09-30 14:01:42 +00:00
|
|
|
|
2022-12-20 15:11:51 +00:00
|
|
|
func AssertErrorMessage(t *testing.T, err error, expectedErr string) {
|
|
|
|
t.Helper()
|
|
|
|
|
|
|
|
if expectedErr != "" {
|
|
|
|
errmsg := ""
|
|
|
|
if err != nil {
|
|
|
|
errmsg = err.Error()
|
|
|
|
}
|
|
|
|
assert.Equal(t, expectedErr, errmsg)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
2022-09-30 14:01:42 +00:00
|
|
|
func RequireErrorContains(t *testing.T, err error, expectedErr string) {
|
|
|
|
t.Helper()
|
|
|
|
|
|
|
|
if expectedErr != "" {
|
|
|
|
require.ErrorContains(t, err, expectedErr)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
2022-11-30 16:36:56 +00:00
|
|
|
|
2022-12-20 15:11:51 +00:00
|
|
|
func RequireErrorMessage(t *testing.T, err error, expectedErr string) {
|
|
|
|
t.Helper()
|
|
|
|
|
|
|
|
if expectedErr != "" {
|
|
|
|
errmsg := ""
|
|
|
|
if err != nil {
|
|
|
|
errmsg = err.Error()
|
|
|
|
}
|
|
|
|
require.Equal(t, expectedErr, errmsg)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func RequireLogContains(t *testing.T, hook *logtest.Hook, expected string) {
|
|
|
|
t.Helper()
|
|
|
|
|
|
|
|
// look for a log entry that matches the expected message
|
|
|
|
for _, entry := range hook.AllEntries() {
|
|
|
|
if strings.Contains(entry.Message, expected) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// show all hook entries, in case the test fails we'll need them
|
|
|
|
for _, entry := range hook.AllEntries() {
|
|
|
|
t.Logf("log entry: %s", entry.Message)
|
|
|
|
}
|
|
|
|
|
|
|
|
require.Fail(t, "no log entry found with message", expected)
|
|
|
|
}
|
|
|
|
|
2022-11-30 16:36:56 +00:00
|
|
|
// Interpolate fills a string template with the given values, can be map or struct.
|
|
|
|
// example: Interpolate("{{.Name}}", map[string]string{"Name": "JohnDoe"})
|
|
|
|
func Interpolate(s string, data interface{}) (string, error) {
|
|
|
|
tmpl, err := template.New("").Parse(s)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
var b strings.Builder
|
|
|
|
err = tmpl.Execute(&b, data)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return b.String(), nil
|
|
|
|
}
|