diff --git a/middleware/replacer.go b/middleware/replacer.go index 3fb389a1..193fd4fc 100644 --- a/middleware/replacer.go +++ b/middleware/replacer.go @@ -16,6 +16,7 @@ import ( // NewReplacer to get one of these. type Replacer interface { Replace(string) string + Set(key, value string) } type replacer struct { @@ -117,6 +118,11 @@ func (r replacer) Replace(s string) string { return s } +// Set sets key to value in the replacements map. +func (r replacer) Set(key, value string) { + r.replacements["{"+key+"}"] = value +} + const ( timeFormat = "02/Jan/2006:15:04:05 -0700" headerReplacer = "{>" diff --git a/middleware/replacer_test.go b/middleware/replacer_test.go index 39d91a22..8f1147de 100644 --- a/middleware/replacer_test.go +++ b/middleware/replacer_test.go @@ -69,3 +69,43 @@ func TestReplace(t *testing.T) { } } + +func TestSet(t *testing.T) { + w := httptest.NewRecorder() + recordRequest := NewResponseRecorder(w) + userJSON := `{"username": "dennis"}` + + reader := strings.NewReader(userJSON) //Convert string to reader + + request, err := http.NewRequest("POST", "http://caddyserver.com", reader) //Create request with JSON body + if err != nil { + t.Fatalf("Request Formation Failed \n") + } + replaceValues := NewReplacer(request, recordRequest, "") + + replaceValues.Set("host", "getcaddy.com") + replaceValues.Set("method", "GET") + replaceValues.Set("status", "201") + replaceValues.Set("variable", "value") + + switch v := replaceValues.(type) { + case replacer: + + if v.Replace("This host is {host}") != "This host is getcaddy.com" { + t.Errorf("Expected host replacement failed") + } + if v.Replace("This request method is {method}") != "This request method is GET" { + t.Errorf("Expected method replacement failed") + } + if v.Replace("The response status is {status}") != "The response status is 201" { + t.Errorf("Expected status replacement failed") + } + if v.Replace("The value of variable is {variable}") != "The value of variable is value" { + t.Errorf("Expected status replacement failed") + } + + default: + t.Fatalf("Return Value from New Replacer expected pass type assertion into a replacer type \n") + } + +}