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  }