github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/mock/mock.go (about) 1 package mock 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "io/ioutil" 8 "mime/multipart" 9 "net/http" 10 "net/http/httptest" 11 "net/textproto" 12 "os" 13 "strings" 14 15 "github.com/ngocphuongnb/tetua/app/auth" 16 "github.com/ngocphuongnb/tetua/app/logger" 17 "github.com/ngocphuongnb/tetua/app/server" 18 fiber "github.com/ngocphuongnb/tetua/packages/fiberserver" 19 ) 20 21 var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") 22 23 func CreateLogger(silences ...bool) *MockLogger { 24 silences = append(silences, false) 25 mockLogger := &MockLogger{ 26 Silence: silences[0], 27 } 28 logger.New(mockLogger) 29 return mockLogger 30 } 31 32 func CreateServer() server.Server { 33 if logger.Get() == nil { 34 CreateLogger() 35 } 36 s := fiber.New(fiber.Config{JwtSigningKey: "sesj5JYrRxrB2yUWkBFM7KKWCY2ykxBw"}) 37 s.Use(auth.AssignUserInfo) 38 s.Use(auth.Check) 39 40 return s 41 } 42 43 func escapeQuotes(s string) string { 44 return quoteEscaper.Replace(s) 45 } 46 47 func CreateUploadRequest(method, uri, fieldName, fileName string) *http.Request { 48 uploadFilePath := fileName 49 requestBody := new(bytes.Buffer) 50 writer := multipart.NewWriter(requestBody) 51 contentType := "application/octet-stream" 52 53 if strings.HasSuffix(fileName, ".jpg") || strings.HasSuffix(fileName, ".jpeg") { 54 contentType = "image/jpeg" 55 } 56 57 if strings.HasSuffix(fileName, ".png") { 58 contentType = "image/png" 59 } 60 61 header := make(textproto.MIMEHeader) 62 header.Set( 63 "Content-Disposition", 64 fmt.Sprintf(`form-data; name="%s"; filename="%s"`, escapeQuotes(fieldName), escapeQuotes(fileName)), 65 ) 66 header.Set("Content-Type", contentType) 67 part, _ := writer.CreatePart(header) 68 69 sampleFile, _ := os.Open(uploadFilePath) 70 io.Copy(part, sampleFile) 71 writer.Close() 72 73 req := httptest.NewRequest(method, uri, requestBody) 74 req.Header.Set("Content-Type", writer.FormDataContentType()) 75 76 return req 77 } 78 79 func Request(s server.Server, method, uri string, headers ...map[string]string) (string, *http.Response) { 80 req := httptest.NewRequest(method, uri, nil) 81 if len(headers) > 0 { 82 for k, v := range headers[0] { 83 req.Header.Set(k, v) 84 } 85 } 86 resp, _ := s.Test(req) 87 body, _ := ioutil.ReadAll(resp.Body) 88 89 return string(body), resp 90 } 91 92 func SendRequest(s server.Server, req *http.Request) (string, *http.Response) { 93 resp, _ := s.Test(req) 94 body, _ := ioutil.ReadAll(resp.Body) 95 96 return string(body), resp 97 } 98 99 func GetRequest(s server.Server, uri string, headers ...map[string]string) (string, *http.Response) { 100 return Request(s, "GET", uri, headers...) 101 } 102 103 func PostRequest(s server.Server, uri string, headers ...map[string]string) (string, *http.Response) { 104 return Request(s, "POST", uri, headers...) 105 }