improve code coverage of signal testing, remove some unnecessary code in package implementation

This commit is contained in:
Sonja Happ 2019-09-11 14:41:13 +02:00
parent def9787cba
commit e81769e76b
3 changed files with 139 additions and 15 deletions

View file

@ -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
}

View file

@ -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)
}

View file

@ -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
}