1+ package dotweb
2+
3+ const (
4+ requestHeaderUseMockKey = "dotweb_req_mock"
5+ requestHeaderUseMockFlag = "true"
6+ )
7+
8+ // MockHandle the handle define on mock module
9+ type MockHandle func (ctx Context )
10+
11+ // Mock the define Mock module
12+ type Mock interface {
13+ // Register register MockHandle on route
14+ Register (route string , handler MockHandle )
15+ // RegisterString register return mock string on route
16+ RegisterString (route string , resData string )
17+ // CheckNeedMock check is need do mock logic
18+ CheckNeedMock (Context ) bool
19+ // Do do mock logic
20+ Do (Context )
21+ }
22+
23+ // StandardMock standard mock implement for Mock interface
24+ type StandardMock struct {
25+ routeMap map [string ]MockHandle
26+ }
27+
28+ // NewStandardMock create new StandardMock
29+ func NewStandardMock () * StandardMock {
30+ return & StandardMock {routeMap :make (map [string ]MockHandle )}
31+ }
32+
33+ // CheckNeedMock check is need do mock logic
34+ func (m * StandardMock ) CheckNeedMock (ctx Context ) bool {
35+ if ctx .Request ().QueryHeader (requestHeaderUseMockKey ) == requestHeaderUseMockFlag {
36+ return true
37+ }
38+ return false
39+ }
40+
41+ // Do do mock logic
42+ func (m * StandardMock ) Do (ctx Context ){
43+ handler , exists := m .routeMap [ctx .RouterNode ().Node ().fullPath ]
44+ if exists {
45+ handler (ctx )
46+ }
47+ }
48+
49+ // Register register MockHandle on route
50+ func (m * StandardMock ) Register (route string , handler MockHandle ){
51+ m .routeMap [route ] = handler
52+ }
53+
54+ // RegisterString register return mock string on route
55+ func (m * StandardMock ) RegisterString (route string , resData string ){
56+ m .routeMap [route ] = func (ctx Context ) {
57+ ctx .WriteString (resData )
58+ ctx .Response ().SetHeader (requestHeaderUseMockKey , requestHeaderUseMockFlag )
59+ ctx .End ()
60+ }
61+ }
0 commit comments