VILLASweb-backend-go/routes/scenario/scenario_test.go

120 lines
3.9 KiB
Go

package scenario
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"testing"
"git.rwth-aachen.de/acs/public/villas/villasweb-backend-go/common"
"git.rwth-aachen.de/acs/public/villas/villasweb-backend-go/routes/user"
)
// Test /scenarios endpoints
func TestScenarioEndpoints(t *testing.T) {
myUsers := []common.User{common.UserA, common.UserB}
msgUsers := common.ResponseMsgUsers{myUsers}
// TODO: rename that variable since it is not a user but userS with
// only one entry.
myUserA := []common.User{common.UserA}
msgUserA := common.ResponseMsgUsers{myUserA}
var myScenarios = []common.ScenarioResponse{common.ScenarioA_response, common.ScenarioB_response}
var msgScenarios = common.ResponseMsgScenarios{Scenarios: myScenarios}
var msgScenario = common.ResponseMsgScenario{Scenario: common.ScenarioC_response}
var msgScenarioUpdated = common.ResponseMsgScenario{Scenario: common.ScenarioCUpdated_response}
db := common.DummyInitDB()
defer db.Close()
common.DummyPopulateDB(db)
router := gin.Default()
api := router.Group("/api")
// All endpoints require authentication except when someone wants to
// login (POST /authenticate)
user.VisitorAuthenticate(api.Group("/authenticate"))
api.Use(user.Authentication(true))
RegisterScenarioEndpoints(api.Group("/scenarios"))
credjson, _ := json.Marshal(common.CredUser)
token := common.AuthenticateForTest(t, router, "/api/authenticate",
"POST", credjson, 200)
// test GET scenarios/
err := common.NewTestEndpoint(router, token, "/api/scenarios",
"GET", nil, 200, msgScenarios)
assert.NoError(t, err)
// test POST scenarios/
err = common.NewTestEndpoint(router, token, "/api/scenarios",
"POST", msgScenario, 200, common.MsgOK)
assert.NoError(t, err)
// test GET scenarios/:ScenarioID
err = common.NewTestEndpoint(router, token, "/api/scenarios/3",
"GET", nil, 200, msgScenario)
assert.NoError(t, err)
// test PUT scenarios/:ScenarioID
err = common.NewTestEndpoint(router, token, "/api/scenarios/3",
"PUT", msgScenarioUpdated, 200, common.MsgOK)
assert.NoError(t, err)
err = common.NewTestEndpoint(router, token, "/api/scenarios/3",
"GET", nil, 200, msgScenarioUpdated)
assert.NoError(t, err)
// test DELETE scenarios/:ScenarioID
err = common.NewTestEndpoint(router, token, "/api/scenarios/3",
"DELETE", nil, 200, common.MsgOK)
assert.NoError(t, err)
err = common.NewTestEndpoint(router, token, "/api/scenarios", "GET",
nil, 200, msgScenarios)
assert.NoError(t, err)
// test GET scenarios/:ScenarioID/users
err = common.NewTestEndpoint(router, token, "/api/scenarios/1/users",
"GET", nil, 200, msgUsers)
assert.NoError(t, err)
// test DELETE scenarios/:ScenarioID/user
err = common.NewTestEndpoint(router, token,
"/api/scenarios/1/user?username=User_B", "DELETE", nil, 200, common.MsgOK)
assert.NoError(t, err)
err = common.NewTestEndpoint(router, token, "/api/scenarios/1/users",
"GET", nil, 200, msgUserA)
assert.NoError(t, err)
// test PUT scenarios/:ScenarioID/user
err = common.NewTestEndpoint(router, token,
"/api/scenarios/1/user?username=User_B", "PUT", nil, 200, common.MsgOK)
assert.NoError(t, err)
err = common.NewTestEndpoint(router, token, "/api/scenarios/1/users",
"GET", nil, 200, msgUsers)
assert.NoError(t, err)
// test DELETE scenarios/:ScenarioID/user for logged in user User_A
err = common.NewTestEndpoint(router, token,
"/api/scenarios/1/user?username=User_A", "DELETE", nil, 200, common.MsgOK)
assert.NoError(t, err)
// test if deletion of user from scenario has worked
w2 := httptest.NewRecorder()
req2, _ := http.NewRequest("GET", "/api/scenarios/1/users", nil)
req2.Header.Add("Authorization", "Bearer "+token)
router.ServeHTTP(w2, req2)
assert.Equal(t, 422, w2.Code)
fmt.Println(w2.Body.String())
assert.Equal(t, "\"Access denied (for scenario ID).\"", w2.Body.String())
// TODO add tests for other return codes
}