Files
bibliomane/internal/testutils/testutils.go

67 lines
1.5 KiB
Go

package testutils
import (
"encoding/json"
"fmt"
"log"
"net/http"
"net/http/httptest"
"strings"
"testing"
"git.artlef.fr/PersonalLibraryManager/internal/config"
"git.artlef.fr/PersonalLibraryManager/internal/setup"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
)
func TestSetup() *gin.Engine {
c := config.LoadConfig("config_test/test.toml")
return setup.Setup(&c)
}
type loginResponse struct {
Message string `json:"message"`
Token string `json:"token"`
}
func ConnectDemoUser(router *gin.Engine) string {
loginJson :=
`{
"username": "demo",
"password":"demopw"
}`
return connectUser(router, loginJson)
}
func ConnectDemo2User(router *gin.Engine) string {
loginJson :=
`{
"username": "demo2",
"password":"demopw"
}`
return connectUser(router, loginJson)
}
func connectUser(router *gin.Engine, loginJson string) string {
w := httptest.NewRecorder()
req, _ := http.NewRequest("POST", "/auth/login", strings.NewReader(loginJson))
router.ServeHTTP(w, req)
var parsedResponse loginResponse
err := json.Unmarshal(w.Body.Bytes(), &parsedResponse)
if err != nil {
log.Fatal(err)
}
return parsedResponse.Token
}
func TestBookPutCallWithDemoPayload(t *testing.T, payload string, bookId string, expectedCode int, url string) {
router := TestSetup()
token := ConnectDemoUser(router)
req, _ := http.NewRequest("PUT", url, strings.NewReader(payload))
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
w := httptest.NewRecorder()
router.ServeHTTP(w, req)
assert.Equal(t, expectedCode, w.Code)
}