1
0
Fork 0
mirror of https://github.com/Luzifer/badge-gen.git synced 2024-11-09 22:00:05 +00:00

Added tests

This commit is contained in:
Knut Ahlers 2015-05-25 17:40:46 +02:00
parent 350c858160
commit cd1a7be3e4
3 changed files with 169 additions and 2 deletions

31
font_test.go Normal file
View file

@ -0,0 +1,31 @@
package main
import (
"crypto/sha256"
"fmt"
"testing"
)
func TestEmbeddedFontHash(t *testing.T) {
// Check the embedded font did not change
font, err := Asset("assets/DejaVuSans.ttf")
if err != nil {
t.Errorf("Could not load embedded font: %s", err)
}
hash := fmt.Sprintf("%x", sha256.Sum256(font))
if hash != "3fdf69cabf06049ea70a00b5919340e2ce1e6d02b0cc3c4b44fb6801bd1e0d22" {
t.Errorf("Embedded font changed: %s", hash)
}
}
func TestStringLength(t *testing.T) {
// As the font is embedded into the source the length calculation should not change
w, err := calculateTextWidth("Test 123 öäüß … !@#%&")
if err != nil {
t.Errorf("Text length errored: %s", err)
}
if w != 138 {
t.Errorf("Text length changed and is now %d", w)
}
}

View file

@ -23,11 +23,15 @@ func main() {
port = ":3000" port = ":3000"
} }
http.Handle("/", generateMux())
http.ListenAndServe(port, nil)
}
func generateMux() *mux.Router {
r := mux.NewRouter() r := mux.NewRouter()
r.HandleFunc("/v1/badge", generateBadge).Methods("GET") r.HandleFunc("/v1/badge", generateBadge).Methods("GET")
http.Handle("/", r) return r
http.ListenAndServe(port, nil)
} }
func generateBadge(res http.ResponseWriter, r *http.Request) { func generateBadge(res http.ResponseWriter, r *http.Request) {

132
main_test.go Normal file
View file

@ -0,0 +1,132 @@
package main
import (
"io/ioutil"
"net/http"
"net/http/httptest"
"net/url"
"strings"
"testing"
)
func TestCreateBadge(t *testing.T) {
badge := string(createBadge("API", "Documentation", "4c1"))
if !strings.Contains(badge, ">API</text>") {
t.Error("Did not found node with text 'API'")
}
if !strings.Contains(badge, "<path fill=\"#4c1\"") {
t.Error("Did not find color coding for path")
}
if !strings.Contains(badge, ">Documentation</text>") {
t.Error("Did not found node with text 'Documentation'")
}
}
func TestHttpResponseMissingParameters(t *testing.T) {
resp := httptest.NewRecorder()
uri := "/v1/badge"
req, err := http.NewRequest("GET", uri, nil)
if err != nil {
t.Fatal(err)
}
generateMux().ServeHTTP(resp, req)
if p, err := ioutil.ReadAll(resp.Body); err != nil {
t.Fail()
} else {
if resp.Code != http.StatusInternalServerError {
t.Errorf("Response code should be %d, is %d", http.StatusInternalServerError, resp.Code)
}
if string(p) != "You must specify parameters 'title' and 'text'.\n" {
t.Error("Response message did not match test")
}
}
}
func TestHttpResponseWithoutColor(t *testing.T) {
resp := httptest.NewRecorder()
uri := "/v1/badge?"
params := url.Values{
"title": []string{"API"},
"text": []string{"Documentation"},
}
req, err := http.NewRequest("GET", uri+params.Encode(), nil)
if err != nil {
t.Fatal(err)
}
generateMux().ServeHTTP(resp, req)
if p, err := ioutil.ReadAll(resp.Body); err != nil {
t.Fail()
} else {
if resp.Code != http.StatusOK {
t.Errorf("Response code should be %d, is %d", http.StatusInternalServerError, resp.Code)
}
if resp.Header().Get("Content-Type") != "image/svg+xml" {
t.Errorf("Response had wrong Content-Type: %s", resp.Header().Get("Content-Type"))
}
// Check whether there is a SVG in the response, format checks are in other checks
if !strings.Contains(string(p), "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"133\" height=\"20\">") {
t.Error("Response message did not match test")
}
if !strings.Contains(string(p), "#4c1") {
t.Error("Default color was not set")
}
}
}
func TestHttpResponseWithColor(t *testing.T) {
resp := httptest.NewRecorder()
uri := "/v1/badge?"
params := url.Values{
"title": []string{"API"},
"text": []string{"Documentation"},
"color": []string{"572"},
}
req, err := http.NewRequest("GET", uri+params.Encode(), nil)
if err != nil {
t.Fatal(err)
}
generateMux().ServeHTTP(resp, req)
if p, err := ioutil.ReadAll(resp.Body); err != nil {
t.Fail()
} else {
if resp.Code != http.StatusOK {
t.Errorf("Response code should be %d, is %d", http.StatusInternalServerError, resp.Code)
}
if resp.Header().Get("Content-Type") != "image/svg+xml" {
t.Errorf("Response had wrong Content-Type: %s", resp.Header().Get("Content-Type"))
}
// Check whether there is a SVG in the response, format checks are in other checks
if !strings.Contains(string(p), "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"133\" height=\"20\">") {
t.Error("Response message did not match test")
}
if strings.Contains(string(p), "#4c1") {
t.Error("Default color is present with color given")
}
if !strings.Contains(string(p), "#572") {
t.Error("Given color is not present in SVG")
}
}
}