func TestEncodeOnlyData(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Data: "junk\n\njk\nid:fake", }) assert.NoError(t, err) assert.Equal(t, w.String(), "data: junk\\n\\njk\\nid:fake\n\n") }
func TestEncodeSlice(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Event: "a slice", Data: []interface{}{1, "text", map[string]interface{}{"foo": "bar"}}, }) assert.NoError(t, err) assert.Equal(t, w.String(), "event: a slice\ndata: [1,\"text\",{\"foo\":\"bar\"}]\n\n") }
func TestEncodeWithId(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Id: "t\n:<>\r\test", Data: "junk\n\njk\nid:fa\rke", }) assert.NoError(t, err) assert.Equal(t, w.String(), "id: t\\n:<>\\r\test\ndata: junk\\n\\njk\\nid:fa\\rke\n\n") }
func TestEncodeFloat(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Event: "Float", Data: 1.5, }) assert.NoError(t, err) assert.Equal(t, w.String(), "event: Float\ndata: 1.5\n\n") }
func TestEncodeWithRetry(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Retry: 11, Data: "junk\n\njk\nid:fake\n", }) assert.NoError(t, err) assert.Equal(t, w.String(), "retry: 11\ndata: junk\\n\\njk\\nid:fake\\n\n\n") }
func TestEncodeInteger(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Event: "an integer", Data: 1, }) assert.NoError(t, err) assert.Equal(t, w.String(), "event: an integer\ndata: 1\n\n") }
func TestEncodeWithEverything(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Event: "abc", Id: "12345", Retry: 10, Data: "some data", }) assert.NoError(t, err) assert.Equal(t, w.String(), "id: 12345\nevent: abc\nretry: 10\ndata: some data\n\n") }
func TestResponseWriterWrite(t *testing.T) { testWritter := httptest.NewRecorder() writer := &responseWriter{} writer.reset(testWritter) w := ResponseWriter(writer) n, err := w.Write([]byte("hola")) assert.Equal(t, n, 4) assert.Equal(t, w.Size(), 4) assert.Equal(t, w.Status(), 200) assert.Equal(t, testWritter.Code, 200) assert.Equal(t, testWritter.Body.String(), "hola") assert.NoError(t, err) n, err = w.Write([]byte(" adios")) assert.Equal(t, n, 6) assert.Equal(t, w.Size(), 10) assert.Equal(t, testWritter.Body.String(), "hola adios") assert.NoError(t, err) }
func TestRenderString(t *testing.T) { w := httptest.NewRecorder() err := (String{ Format: "hola %s %d", Data: []interface{}{"manu", 2}, }).Write(w) assert.NoError(t, err) assert.Equal(t, w.Body.String(), "hola manu 2") assert.Equal(t, w.Header().Get("Content-Type"), "text/plain; charset=utf-8") }
func TestRenderJSON(t *testing.T) { w := httptest.NewRecorder() data := map[string]interface{}{ "foo": "bar", } err := (JSON{data}).Write(w) assert.NoError(t, err) assert.Equal(t, w.Body.String(), "{\"foo\":\"bar\"}\n") assert.Equal(t, w.Header().Get("Content-Type"), "application/json; charset=utf-8") }
func TestRenderXML(t *testing.T) { w := httptest.NewRecorder() data := xmlmap{ "foo": "bar", } err := (XML{data}).Write(w) assert.NoError(t, err) assert.Equal(t, w.Body.String(), "<map><foo>bar</foo></map>") assert.Equal(t, w.Header().Get("Content-Type"), "application/xml; charset=utf-8") }
func TestEncodeMap(t *testing.T) { w := new(bytes.Buffer) err := Encode(w, Event{ Event: "a map", Data: map[string]interface{}{ "foo": "b\n\rar", "bar": "id: 2", }, }) assert.NoError(t, err) assert.Equal(t, w.String(), "event: a map\ndata: {\"bar\":\"id: 2\",\"foo\":\"b\\n\\rar\"}\n\n") }
func TestRenderSSE(t *testing.T) { w := httptest.NewRecorder() err := (Event{ Event: "msg", Data: "hi! how are you?", }).Write(w) assert.NoError(t, err) assert.Equal(t, w.Body.String(), "event: msg\ndata: hi! how are you?\n\n") assert.Equal(t, w.Header().Get("Content-Type"), "text/event-stream") assert.Equal(t, w.Header().Get("Cache-Control"), "no-cache") }
func TestRenderData(t *testing.T) { w := httptest.NewRecorder() data := []byte("#!PNG some raw data") err := (Data{ ContentType: "image/png", Data: data, }).Write(w) assert.NoError(t, err) assert.Equal(t, w.Body.String(), "#!PNG some raw data") assert.Equal(t, w.Header().Get("Content-Type"), "image/png") }
func TestEncodeStruct(t *testing.T) { myStruct := struct { A int B string `json:"value"` }{1, "number"} w := new(bytes.Buffer) err := Encode(w, Event{ Event: "a struct", Data: myStruct, }) assert.NoError(t, err) assert.Equal(t, w.String(), "event: a struct\ndata: {\"A\":1,\"value\":\"number\"}\n\n") w.Reset() err = Encode(w, Event{ Event: "a struct", Data: &myStruct, }) assert.NoError(t, err) assert.Equal(t, w.String(), "event: a struct\ndata: {\"A\":1,\"value\":\"number\"}\n\n") }
func TestContextAutoBindJSON(t *testing.T) { c, _, _ := createTestContext() c.Request, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}")) c.Request.Header.Add("Content-Type", MIMEJSON) var obj struct { Foo string `json:"foo"` Bar string `json:"bar"` } assert.NoError(t, c.Bind(&obj)) assert.Equal(t, obj.Bar, "foo") assert.Equal(t, obj.Foo, "bar") assert.Empty(t, c.Errors) }
func TestContextBindWithJSON(t *testing.T) { c, w, _ := createTestContext() c.Request, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}")) c.Request.Header.Add("Content-Type", MIMEXML) // set fake content-type var obj struct { Foo string `json:"foo"` Bar string `json:"bar"` } assert.NoError(t, c.BindJSON(&obj)) assert.Equal(t, obj.Bar, "foo") assert.Equal(t, obj.Foo, "bar") assert.Equal(t, w.Body.Len(), 0) }
func testBodyBinding(t *testing.T, b Binding, name, path, badPath, body, badBody string) { assert.Equal(t, b.Name(), name) obj := FooStruct{} req := requestWithBody("POST", path, body) err := b.Bind(req, &obj) assert.NoError(t, err) assert.Equal(t, obj.Foo, "bar") obj = FooStruct{} req = requestWithBody("POST", badPath, badBody) err = JSON.Bind(req, &obj) assert.Error(t, err) }
func TestRenderHTMLTemplate(t *testing.T) { w := httptest.NewRecorder() templ := template.Must(template.New("t").Parse(`Hello {{.name}}`)) htmlRender := HTMLProduction{Template: templ} instance := htmlRender.Instance("t", map[string]interface{}{ "name": "alexandernyquist", }) err := instance.Write(w) assert.NoError(t, err) assert.Equal(t, w.Body.String(), "Hello alexandernyquist") assert.Equal(t, w.Header().Get("Content-Type"), "text/html; charset=utf-8") }
func TestContextGolangContext(t *testing.T) { c, _, _ := createTestContext() c.Request, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}")) assert.NoError(t, c.Err()) assert.Nil(t, c.Done()) ti, ok := c.Deadline() assert.Equal(t, ti, time.Time{}) assert.False(t, ok) assert.Equal(t, c.Value(0), c.Request) assert.Nil(t, c.Value("foo")) c.Set("foo", "bar") assert.Equal(t, c.Value("foo"), "bar") assert.Nil(t, c.Value(1)) }
func TestContextPostFormMultipart(t *testing.T) { c, _, _ := createTestContext() c.Request = createMultipartRequest() var obj struct { Foo string `form:"foo"` Bar string `form:"bar"` } assert.NoError(t, c.Bind(&obj)) assert.Equal(t, obj.Bar, "foo") assert.Equal(t, obj.Foo, "bar") assert.Empty(t, c.Query("foo")) assert.Empty(t, c.Query("bar")) assert.Equal(t, c.PostForm("foo"), "bar") assert.Equal(t, c.PostForm("bar"), "foo") }
func testFormBinding(t *testing.T, method, path, badPath, body, badBody string) { b := Form assert.Equal(t, b.Name(), "form") obj := FooBarStruct{} req := requestWithBody(method, path, body) if method == "POST" { req.Header.Add("Content-Type", MIMEPOSTForm) } err := b.Bind(req, &obj) assert.NoError(t, err) assert.Equal(t, obj.Foo, "bar") assert.Equal(t, obj.Bar, "foo") obj = FooBarStruct{} req = requestWithBody(method, badPath, badBody) err = JSON.Bind(req, &obj) assert.Error(t, err) }
func TestContextQueryAndPostForm(t *testing.T) { c, _, _ := createTestContext() body := bytes.NewBufferString("foo=bar&page=11&both=POST") c.Request, _ = http.NewRequest("POST", "/?both=GET&id=main", body) c.Request.Header.Add("Content-Type", MIMEPOSTForm) assert.Equal(t, c.DefaultPostForm("foo", "none"), "bar") assert.Equal(t, c.PostForm("foo"), "bar") assert.Empty(t, c.Query("foo")) assert.Equal(t, c.DefaultPostForm("page", "0"), "11") assert.Equal(t, c.PostForm("page"), "11") assert.Equal(t, c.Query("page"), "") assert.Equal(t, c.PostForm("both"), "POST") assert.Equal(t, c.Query("both"), "GET") assert.Equal(t, c.DefaultPostForm("id", "000"), "000") assert.Equal(t, c.Query("id"), "main") assert.Empty(t, c.PostForm("id")) assert.Equal(t, c.DefaultPostForm("NoKey", "nada"), "nada") assert.Empty(t, c.PostForm("NoKey")) assert.Empty(t, c.Query("NoKey")) var obj struct { Foo string `form:"foo"` Id string `form:"id"` Page string `form:"page"` Both string `form:"both"` } assert.NoError(t, c.Bind(&obj)) assert.Equal(t, obj.Foo, "bar") assert.Equal(t, obj.Id, "main") assert.Equal(t, obj.Page, "11") assert.Equal(t, obj.Both, "POST") }