mirror of
https://git.rwth-aachen.de/acs/public/villas/web-backend-go/
synced 2025-03-30 00:00:12 +01:00
improve code coverage of signal testing, remove some unnecessary code in package implementation
This commit is contained in:
parent
def9787cba
commit
e81769e76b
3 changed files with 139 additions and 15 deletions
|
@ -95,8 +95,7 @@ func addSignal(c *gin.Context) {
|
|||
|
||||
// Add signal to model
|
||||
err := newSignal.addToSimulationModel()
|
||||
if err != nil {
|
||||
helper.DBError(c, err)
|
||||
if helper.DBError(c, err) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -135,16 +134,11 @@ func updateSignal(c *gin.Context) {
|
|||
}
|
||||
|
||||
// Create the updatedSignal from oldDashboard
|
||||
updatedSignal, err := req.updatedSignal(oldSignal)
|
||||
if err != nil {
|
||||
helper.BadRequestError(c, err.Error())
|
||||
return
|
||||
}
|
||||
updatedSignal := req.updatedSignal(oldSignal)
|
||||
|
||||
// Update the signal in the DB
|
||||
err = oldSignal.update(updatedSignal)
|
||||
if err != nil {
|
||||
helper.DBError(c, err)
|
||||
err := oldSignal.update(updatedSignal)
|
||||
if helper.DBError(c, err) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -192,8 +186,7 @@ func deleteSignal(c *gin.Context) {
|
|||
}
|
||||
|
||||
err := sig.delete()
|
||||
if err != nil {
|
||||
helper.DBError(c, err)
|
||||
if helper.DBError(c, err) {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -97,6 +97,10 @@ func addScenarioAndSimulatorAndSimulationModel() (scenarioID uint, simulatorID u
|
|||
// Read newSimulationModel's ID from the response
|
||||
newSimulationModelID, _ := helper.GetResponseID(resp)
|
||||
|
||||
// add the guest user to the new scenario
|
||||
_, resp, _ = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/scenarios/%v/user?username=User_C", newScenarioID), "PUT", nil)
|
||||
|
||||
return uint(newScenarioID), uint(newSimulatorID), uint(newSimulationModelID)
|
||||
}
|
||||
|
||||
|
@ -139,7 +143,6 @@ func TestAddSignal(t *testing.T) {
|
|||
"/api/authenticate", "POST", helper.UserACredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// test POST signals/ $newSignal
|
||||
newSignal := SignalRequest{
|
||||
Name: database.InSignalA.Name,
|
||||
Unit: database.InSignalA.Unit,
|
||||
|
@ -147,9 +150,35 @@ func TestAddSignal(t *testing.T) {
|
|||
Index: 1,
|
||||
SimulationModelID: simulationModelID,
|
||||
}
|
||||
|
||||
// authenticate as normal userB who has no access to new scenario
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserBCredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// try to POST to simulation model without access
|
||||
// should result in unprocessable entity
|
||||
code, resp, err := helper.TestEndpoint(router, token,
|
||||
"/api/signals", "POST", helper.KeyModels{"signal": newSignal})
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// authenticate as normal user
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserACredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// try to POST a signal with non JSON body
|
||||
// should result in a bad request
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
"/api/signals", "POST", "this is not a JSON")
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 400, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// test POST signals/ $newSignal
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
"/api/signals", "POST", helper.KeyModels{"signal": newSignal})
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 200, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// Compare POST's response with the newSignal
|
||||
|
@ -180,6 +209,18 @@ func TestAddSignal(t *testing.T) {
|
|||
"/api/signals", "POST", helper.KeyModels{"model": malformedNewSignal})
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// authenticate as normal userB who has no access to new scenario
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserBCredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Try to Get the newSignal as user B
|
||||
// should result in unprocessable entity
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "GET", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
}
|
||||
|
||||
func TestUpdateSignal(t *testing.T) {
|
||||
|
@ -219,6 +260,44 @@ func TestUpdateSignal(t *testing.T) {
|
|||
Unit: database.InSignalB.Unit,
|
||||
Index: 1,
|
||||
}
|
||||
|
||||
// authenticate as normal userB who has no access to new scenario
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserBCredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// try to PUT signal without access
|
||||
// should result in unprocessable entity
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "PUT", helper.KeyModels{"signal": updatedSignal})
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// authenticate as guest user
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.GuestCredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// try to update signal as guest who has access to scenario
|
||||
// should result in unprocessable entity
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "PUT", helper.KeyModels{"signal": updatedSignal})
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// authenticate as normal user
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserACredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// try to PUT with non JSON body
|
||||
// should result in bad request
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "PUT", "This is not JSON")
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 400, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// test PUT
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "PUT", helper.KeyModels{"signal": updatedSignal})
|
||||
assert.NoError(t, err)
|
||||
|
@ -278,6 +357,23 @@ func TestDeleteSignal(t *testing.T) {
|
|||
newSignalID, err := helper.GetResponseID(resp)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// authenticate as normal userB who has no access to new scenario
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserBCredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Try to DELETE signal with no access
|
||||
// should result in unprocessable entity
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "DELETE", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// authenticate as normal user
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserACredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Count the number of all the input signals returned for simulation model
|
||||
initialNumber, err := helper.LengthOfResponse(router, token,
|
||||
fmt.Sprintf("/api/signals?modelID=%v&direction=in", simulationModelID), "GET", nil)
|
||||
|
@ -296,6 +392,10 @@ func TestDeleteSignal(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 200, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// Read newSignalout's ID from the response
|
||||
newSignaloutID, err := helper.GetResponseID(resp)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Delete the added newSignal
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignalID), "DELETE", nil)
|
||||
|
@ -312,6 +412,12 @@ func TestDeleteSignal(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, initialNumber-1, finalNumber)
|
||||
|
||||
// Delete the output signal
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals/%v", newSignaloutID), "DELETE", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 200, code, "Response body: \n%v\n", resp)
|
||||
}
|
||||
|
||||
func TestGetAllInputSignalsOfSimulationModel(t *testing.T) {
|
||||
|
@ -393,4 +499,29 @@ func TestGetAllInputSignalsOfSimulationModel(t *testing.T) {
|
|||
|
||||
assert.Equal(t, initialNumber+2, finalNumber)
|
||||
|
||||
// Get the number of output signals
|
||||
outputNumber, err := helper.LengthOfResponse(router, token,
|
||||
fmt.Sprintf("/api/signals?modelID=%v&direction=out", simulationModelID), "GET", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, initialNumber+2, outputNumber)
|
||||
|
||||
// Try to get all signals for non-existing direction
|
||||
// should result in bad request
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals?modelID=%v&direction=thisiswrong", simulationModelID), "GET", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 400, code, "Response body: \n%v\n", resp)
|
||||
|
||||
// authenticate as normal userB who has no access to new scenario
|
||||
token, err = helper.AuthenticateForTest(router,
|
||||
"/api/authenticate", "POST", helper.UserBCredentials)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// try to get all input signals
|
||||
// should result in unprocessable entity
|
||||
code, resp, err = helper.TestEndpoint(router, token,
|
||||
fmt.Sprintf("/api/signals?modelID=%v&direction=in", simulationModelID), "GET", nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equalf(t, 422, code, "Response body: \n%v\n", resp)
|
||||
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ func (r *addSignalRequest) createSignal() Signal {
|
|||
return s
|
||||
}
|
||||
|
||||
func (r *updateSignalRequest) updatedSignal(oldSignal Signal) (Signal, error) {
|
||||
func (r *updateSignalRequest) updatedSignal(oldSignal Signal) Signal {
|
||||
// Use the old Signal as a basis for the updated Signal `s`
|
||||
s := oldSignal
|
||||
|
||||
|
@ -69,5 +69,5 @@ func (r *updateSignalRequest) updatedSignal(oldSignal Signal) (Signal, error) {
|
|||
s.Unit = r.Unit
|
||||
}
|
||||
|
||||
return s, nil
|
||||
return s
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue