package testutils import ( "encoding/json" "fmt" "log" "net/http" "net/http/httptest" "strings" "testing" "git.artlef.fr/bibliomane/internal/config" "git.artlef.fr/bibliomane/internal/setup" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" ) func TestSetup() *gin.Engine { c := config.LoadConfigFromFile("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", "/ws/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) }