-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathencoder_test.go
More file actions
87 lines (72 loc) · 3.95 KB
/
encoder_test.go
File metadata and controls
87 lines (72 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package hyperdrive
import (
"encoding/json"
"encoding/xml"
"net/http/httptest"
)
func (suite *HyperdriveTestSuite) TestNullEncoder() {
suite.Implements((*ContentEncoder)(nil), NullEncoder{}, "return an implementation of ContentEncoder")
}
func (suite *HyperdriveTestSuite) TestNullEncoderEncode() {
suite.Error(NullEncoder{}.Encode(suite.TestEndpointResource), "return an error")
}
func (suite *HyperdriveTestSuite) TestJSONEncoder() {
suite.Implements((*ContentEncoder)(nil), JSONEncoder{}, "return an implementation of ContentEncoder")
}
func (suite *HyperdriveTestSuite) TestJSONEncoderEncodeNoError() {
rw := httptest.NewRecorder()
enc := JSONEncoder{Encoder: json.NewEncoder(rw)}
suite.Nil(enc.Encode(suite.TestEndpointResource), "returns nil")
}
func (suite *HyperdriveTestSuite) TestJSONEncoderEncode() {
rw := httptest.NewRecorder()
enc := JSONEncoder{Encoder: json.NewEncoder(rw)}
enc.Encode(suite.TestEndpointResource)
json := `{"resource":"endpoint","name":"Test","path":"/test","methods":["OPTIONS"],"media-types":["application/vnd.api.test.v1.0.1-beta.json","application/vnd.api.test.v1.0.1-beta.xml"],"description":"Test Endpoint","params":[]}` + "\n"
suite.Equal(json, rw.Body.String(), "returns nil")
}
func (suite *HyperdriveTestSuite) TestJSONEncoderEncodeParams() {
rw := httptest.NewRecorder()
enc := JSONEncoder{Encoder: json.NewEncoder(rw)}
enc.Encode(suite.TestEndpointResourceCustom)
json := `{"resource":"endpoint","name":"Test","path":"/test","methods":["OPTIONS"],"media-types":["application/vnd.api.test.v1.0.1-beta.json","application/vnd.api.test.v1.0.1-beta.xml"],"description":"Test Endpoint","params":[{"name":"ID","description":"The unique identifer for this resource.","allowed":["GET","PATCH","POST","PUT"],"required":["GET"]}]}` + "\n"
suite.Equal(json, rw.Body.String(), "returns nil")
}
func (suite *HyperdriveTestSuite) TestXMLEncoder() {
suite.Implements((*ContentEncoder)(nil), XMLEncoder{}, "return an implementation of ContentEncoder")
}
func (suite *HyperdriveTestSuite) TestXMLEncoderEncodeNoError() {
rw := httptest.NewRecorder()
enc := XMLEncoder{Encoder: xml.NewEncoder(rw)}
suite.Nil(enc.Encode(suite.TestEndpointResource), "returns nil")
}
func (suite *HyperdriveTestSuite) TestXMLEncoderEncode() {
rw := httptest.NewRecorder()
enc := XMLEncoder{Encoder: xml.NewEncoder(rw)}
enc.Encode(suite.TestEndpointResource)
xml := `<endpoint name="Test" path="/test" methods="OPTIONS" media-types="application/vnd.api.test.v1.0.1-beta.json,application/vnd.api.test.v1.0.1-beta.xml"><description>Test Endpoint</description><params></params></endpoint>`
suite.Equal(xml, rw.Body.String(), "returns nil")
}
func (suite *HyperdriveTestSuite) TestXMLEncoderEncodeParams() {
rw := httptest.NewRecorder()
enc := XMLEncoder{Encoder: xml.NewEncoder(rw)}
enc.Encode(suite.TestEndpointResourceCustom)
xml := `<endpoint name="Test" path="/test" methods="OPTIONS" media-types="application/vnd.api.test.v1.0.1-beta.json,application/vnd.api.test.v1.0.1-beta.xml"><description>Test Endpoint</description><params><param name="ID" allowed="GET,PATCH,POST,PUT" required="GET"><description>The unique identifer for this resource.</description></param></params></endpoint>`
suite.Equal(xml, rw.Body.String(), "returns nil")
}
func (suite *HyperdriveTestSuite) TestGetEncoder() {
enc, _ := GetEncoder(httptest.NewRecorder(), "text/plain")
suite.Implements((*ContentEncoder)(nil), enc, "return an implementation of ContentEncoder")
}
func (suite *HyperdriveTestSuite) TestGetEncoderXML() {
enc, _ := GetEncoder(httptest.NewRecorder(), "application/xml")
suite.IsType(XMLEncoder{}, enc, "return an XMLEncoder")
}
func (suite *HyperdriveTestSuite) TestGetEncoderJSON() {
enc, _ := GetEncoder(httptest.NewRecorder(), "application/json")
suite.IsType(JSONEncoder{}, enc, "return a JSONEncoder")
}
func (suite *HyperdriveTestSuite) TestGetEncoderNULL() {
enc, _ := GetEncoder(httptest.NewRecorder(), "text/plain")
suite.IsType(NullEncoder{}, enc, "return a NullEncoder")
}