Draft design: web mock module
This commit is contained in:
		
							parent
							
								
									7f4eb6e93c
								
							
						
					
					
						commit
						3df2787f86
					
				| @ -1,4 +1,5 @@ | |||||||
| # developing | # developing | ||||||
|  | - Web mock and test support. [4565](https://github.com/beego/beego/pull/4565) | ||||||
| - Error codes definition of cache module. [4493](https://github.com/beego/beego/pull/4493) | - Error codes definition of cache module. [4493](https://github.com/beego/beego/pull/4493) | ||||||
| - Remove generateCommentRoute http hook. Using `bee generate routers` commands instead.[4486](https://github.com/beego/beego/pull/4486) [bee PR 762](https://github.com/beego/bee/pull/762) | - Remove generateCommentRoute http hook. Using `bee generate routers` commands instead.[4486](https://github.com/beego/beego/pull/4486) [bee PR 762](https://github.com/beego/bee/pull/762) | ||||||
| - Fix: /abc.html/aaa match /abc/aaa. [4459](https://github.com/beego/beego/pull/4459) | - Fix: /abc.html/aaa match /abc/aaa. [4459](https://github.com/beego/beego/pull/4459) | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								server/web/mock/context.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								server/web/mock/context.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | // Copyright 2021 beego | ||||||
|  | // | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | // you may not use this file except in compliance with the License. | ||||||
|  | // You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | // http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, software | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | // See the License for the specific language governing permissions and | ||||||
|  | // limitations under the License. | ||||||
|  | 
 | ||||||
|  | package mock | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	beegoCtx "github.com/beego/beego/v2/server/web/context" | ||||||
|  | 	"net/http" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func NewMockContext(req *http.Request) (*beegoCtx.Context, *HttpResponse) { | ||||||
|  | 	ctx := beegoCtx.NewContext() | ||||||
|  | 	resp := NewMockHttpResponse() | ||||||
|  | 	ctx.Reset(resp, req) | ||||||
|  | 	return ctx, resp | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								server/web/mock/context_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								server/web/mock/context_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | // Copyright 2021 beego | ||||||
|  | // | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | // you may not use this file except in compliance with the License. | ||||||
|  | // You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | // http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, software | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | // See the License for the specific language governing permissions and | ||||||
|  | // limitations under the License. | ||||||
|  | 
 | ||||||
|  | package mock | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/beego/beego/v2/server/web" | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  | 	"net/http" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type TestController struct { | ||||||
|  | 	web.Controller | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestMockContext(t *testing.T) { | ||||||
|  | 	req, err := http.NewRequest("GET", "http://localhost:8080/hello?name=tom", bytes.NewReader([]byte{})) | ||||||
|  | 	assert.Nil(t, err) | ||||||
|  | 	ctx, resp := NewMockContext(req) | ||||||
|  | 	ctrl := &TestController{ | ||||||
|  | 		Controller: web.Controller{ | ||||||
|  | 			Ctx: ctx, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	ctrl.HelloWorld() | ||||||
|  | 	result := resp.BodyToString() | ||||||
|  | 	assert.Equal(t, "name=tom", result) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GET hello?name=XXX | ||||||
|  | func (c *TestController) HelloWorld() { | ||||||
|  | 	name := c.GetString("name") | ||||||
|  | 	c.Ctx.WriteString(fmt.Sprintf("name=%s", name)) | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								server/web/mock/response.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								server/web/mock/response.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | // Copyright 2021 beego | ||||||
|  | // | ||||||
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | // you may not use this file except in compliance with the License. | ||||||
|  | // You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | // http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, software | ||||||
|  | // distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | // See the License for the specific language governing permissions and | ||||||
|  | // limitations under the License. | ||||||
|  | 
 | ||||||
|  | package mock | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"net/http" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // HttpResponse mock response, which should be used in tests | ||||||
|  | type HttpResponse struct { | ||||||
|  | 	body       []byte | ||||||
|  | 	header     http.Header | ||||||
|  | 	StatusCode int | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // NewMockHttpResponse you should only use this in your test code | ||||||
|  | func NewMockHttpResponse() *HttpResponse { | ||||||
|  | 	return &HttpResponse{ | ||||||
|  | 		body: make([]byte, 0), | ||||||
|  | 		header: make(http.Header), | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Header return headers | ||||||
|  | func (m *HttpResponse) Header() http.Header { | ||||||
|  | 	return m.header | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Write append the body | ||||||
|  | func (m *HttpResponse) Write(bytes []byte) (int, error) { | ||||||
|  | 	m.body = append(m.body, bytes...) | ||||||
|  | 	return len(bytes), nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // WriteHeader set the status code | ||||||
|  | func (m *HttpResponse) WriteHeader(statusCode int) { | ||||||
|  | 	m.StatusCode = statusCode | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // JsonUnmarshal convert the body to object | ||||||
|  | func (m *HttpResponse) JsonUnmarshal(value interface{}) error { | ||||||
|  | 	return json.Unmarshal(m.body, value) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // BodyToString return the body as the string | ||||||
|  | func (m *HttpResponse) BodyToString() string { | ||||||
|  | 	return string(m.body) | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user