routebuildermdl_test.go 3.29 KiB
Newer Older
package routebuildermdl

import (
	"bytes"
	"mime/multipart"
	"net/http"
	"net/http/httptest"
	"testing"

	"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/errormdl"

	"github.com/stretchr/testify/assert"

	"github.com/gin-gonic/gin"
)

var router *gin.Engine

func DummyService(data []byte) (interface{}, error) {
	return "success", nil
}

func RDummyService(data []byte) (interface{}, error) {
	return "success", nil
}

func RBDummyService(data []byte) (interface{}, error) {
	return "success", nil
}
func MultiparService(form *multipart.Form) (interface{}, error) {
	return "success", nil
}
func init() {
	router = gin.New()
	o := router.Group("/o")
	r := router.Group("/r")
	c := r.Group("/c")
	Init(o, r, c)
	RegisterNormalService("DummyService", DummyService, false, false)
	RegisterNormalService("RDummyService", RDummyService, true, false)
	RegisterNormalService("RBDummyService", RBDummyService, true, true)
	RegisterFormBasedService("MultiparService", MultiparService, true, true)

}

func Test_OpenHandler(t *testing.T) {
	login := `
	{
		"loginId": "demo",
		"password": "demo"
	}
	`
	req, _ := http.NewRequest("POST", "/o/mql", bytes.NewBuffer([]byte(login)))
	req.Header.Set("Service-Header", "DummyService")
	resp := httptest.NewRecorder()
	router.ServeHTTP(resp, req)

	assert.Equal(t, resp.Code, 200)
}

func Test_RestrictedHandler(t *testing.T) {
	login := `
	{
		"loginId": "demo",
		"password": "demo"
	}
	`
	req, _ := http.NewRequest("POST", "/r/mql", bytes.NewBuffer([]byte(login)))
	req.Header.Set("Service-Header", "RDummyService")
	resp := httptest.NewRecorder()
	router.ServeHTTP(resp, req)

	assert.Equal(t, resp.Code, 200)
}

func Test_RoleBasedHandler(t *testing.T) {
	login := `
	{
		"loginId": "demo",
		"password": "demo"
	}
	`
	req, _ := http.NewRequest("POST", "/r/c/mql", bytes.NewBuffer([]byte(login)))
	req.Header.Set("Service-Header", "RBDummyService")
	resp := httptest.NewRecorder()
	router.ServeHTTP(resp, req)

	assert.Equal(t, resp.Code, 200)
}

func Test1_RestrictedHandler(t *testing.T) {
	login := `
	{
		"loginId": "demo",
		"password": "demo"
	}
	`
	req, _ := http.NewRequest("POST", "/r/c/mql", bytes.NewBuffer([]byte(login)))
	req.Header.Set("Service-Header", "RDummyService")
	resp := httptest.NewRecorder()
	router.ServeHTTP(resp, req)

	assert.Equal(t, resp.Code, 417)
}

func Test1_MultipartHandler(t *testing.T) {
	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)
	part, _ := writer.CreateFormFile("file", "tmp.json")
	part.Write([]byte("tmp data"))
	writer.Close()
	req, _ := http.NewRequest("POST", "/r/c/mql", body)
	req.Header.Set("Service-Header", "MultiparService")
	req.Header.Add("Content-Type", writer.FormDataContentType())
	resp := httptest.NewRecorder()
	router.ServeHTTP(resp, req)

	assert.Equal(t, resp.Code, 200)
}

func Test2_MultipartHandler(t *testing.T) {
	errormdl.IsTestingNegetiveCaseOn = true
	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)
	part, _ := writer.CreateFormFile("file", "tmp.json")
	part.Write([]byte("tmp data"))
	writer.Close()
	req, _ := http.NewRequest("POST", "/r/c/mql", body)
	req.Header.Set("Service-Header", "MultiparService")
	req.Header.Add("Content-Type", writer.FormDataContentType())
	resp := httptest.NewRecorder()
	router.ServeHTTP(resp, req)
	errormdl.IsTestingNegetiveCaseOn = false

	assert.Equal(t, resp.Code, 417)
}