// 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 = `pipelinepipelinenonenone` badgeSuccess = `pipelinepipelinesuccesssuccess` badgeFailure = `pipelinepipelinefailurefailure` badgeError = `pipelinepipelineerrorerror` badgeStarted = `pipelinepipelinestartedstarted` ) // 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)) }