// Copyright 2022 Woodpecker Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package badges
import (
"bytes"
"html/template"
"strings"
"sync"
"testing"
"github.com/stretchr/testify/assert"
"go.woodpecker-ci.org/woodpecker/v3/server/model"
)
var (
badgeNone = ``
badgeSuccess = ``
badgeFailure = ``
badgeError = ``
badgeStarted = ``
)
// Generate an SVG badge based on a pipeline.
func TestGenerate(t *testing.T) {
status := model.StatusDeclined
badge, err := Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeNone, badge)
status = model.StatusSuccess
badge, err = Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeSuccess, badge)
status = model.StatusFailure
badge, err = Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeFailure, badge)
status = model.StatusError
badge, err = Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeError, badge)
status = model.StatusKilled
badge, err = Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeError, badge)
status = model.StatusPending
badge, err = Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeStarted, badge)
status = model.StatusRunning
badge, err = Generate("pipeline", &status)
assert.NoError(t, err)
assert.Equal(t, badgeStarted, badge)
}
func TestBadgeDrawerRender(t *testing.T) {
mockTemplate := strings.TrimSpace(`
{{.Subject}},{{.Status}},{{.Color}},{{with .Bounds}}{{.SubjectX}},{{.SubjectDx}},{{.StatusX}},{{.StatusDx}},{{.Dx}}{{end}}
`)
mockFontSize := 11.0
mockDPI := 72.0
fd, err := mustNewFontDrawer(mockFontSize, mockDPI)
assert.NoError(t, err)
d := &badgeDrawer{
fd: fd,
tmpl: template.Must(template.New("mock-template").Parse(mockTemplate)),
mutex: &sync.Mutex{},
}
output := "XXX,YYY,#c0c0c0,14,26,38,26,52"
var buf bytes.Buffer
assert.NoError(t, d.Render("XXX", "YYY", "#c0c0c0", &buf))
assert.Equal(t, output, buf.String())
}
func TestBadgeDrawerRenderBytes(t *testing.T) {
mockTemplate := strings.TrimSpace(`
{{.Subject}},{{.Status}},{{.Color}},{{with .Bounds}}{{.SubjectX}},{{.SubjectDx}},{{.StatusX}},{{.StatusDx}},{{.Dx}}{{end}}
`)
mockFontSize := 11.0
mockDPI := 72.0
fd, err := mustNewFontDrawer(mockFontSize, mockDPI)
assert.NoError(t, err)
d := &badgeDrawer{
fd: fd,
tmpl: template.Must(template.New("mock-template").Parse(mockTemplate)),
mutex: &sync.Mutex{},
}
output := "XXX,YYY,#c0c0c0,14,26,38,26,52"
bytes, err := d.RenderBytes("XXX", "YYY", "#c0c0c0")
assert.NoError(t, err)
assert.Equal(t, output, string(bytes))
}