From 9b910a49270311fd6f099f0f0674a1fd0ab48a20 Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Tue, 30 Jun 2020 11:29:36 +0200 Subject: Add experiment endpoint tests --- .../v2/experiments/experimentId/test_endpoint.py | 136 +++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py (limited to 'web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py') diff --git a/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py b/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py new file mode 100644 index 00000000..0c9c9abc --- /dev/null +++ b/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py @@ -0,0 +1,136 @@ +from opendc.util.database import DB + + +def test_get_experiment_non_existing(client, mocker): + mocker.patch.object(DB, 'fetch_one', return_value=None) + assert '404' in client.get('/api/v2/experiments/1').status + + +def test_get_experiment_no_authorizations(client, mocker): + mocker.patch.object(DB, 'fetch_one', return_value={'simulationId': '1', 'authorizations': []}) + res = client.get('/api/v2/experiments/1') + assert '403' in res.status + + +def test_get_experiment_not_authorized(client, mocker): + mocker.patch.object(DB, + 'fetch_one', + return_value={ + 'simulationId': '1', + '_id': '1', + 'authorizations': [{ + 'simulationId': '2', + 'authorizationLevel': 'OWN' + }] + }) + res = client.get('/api/v2/experiments/1') + assert '403' in res.status + + +def test_get_experiment(client, mocker): + mocker.patch.object(DB, + 'fetch_one', + return_value={ + 'simulationId': '1', + '_id': '1', + 'authorizations': [{ + 'simulationId': '1', + 'authorizationLevel': 'EDIT' + }] + }) + res = client.get('/api/v2/experiments/1') + assert '200' in res.status + + +def test_update_experiment_missing_parameter(client): + assert '400' in client.put('/api/v2/experiments/1').status + + +def test_update_experiment_non_existing(client, mocker): + mocker.patch.object(DB, 'fetch_one', return_value=None) + assert '404' in client.put('/api/v2/experiments/1', json={'experiment': { + 'topologyId': '1', + 'traceId': '1', + 'schedulerName': 'default', + 'name': 'test', + }}).status + + +def test_update_experiment_not_authorized(client, mocker): + mocker.patch.object(DB, + 'fetch_one', + return_value={ + '_id': '1', + 'simulationId': '1', + 'authorizations': [{ + 'simulationId': '1', + 'authorizationLevel': 'VIEW' + }] + }) + mocker.patch.object(DB, 'update', return_value={}) + assert '403' in client.put('/api/v2/experiments/1', json={'experiment': { + 'topologyId': '1', + 'traceId': '1', + 'schedulerName': 'default', + 'name': 'test', + }}).status + + +def test_update_experiment(client, mocker): + mocker.patch.object(DB, + 'fetch_one', + return_value={ + '_id': '1', + 'simulationId': '1', + 'authorizations': [{ + 'simulationId': '1', + 'authorizationLevel': 'OWN' + }] + }) + mocker.patch.object(DB, 'update', return_value={}) + + res = client.put('/api/v2/experiments/1', json={'experiment': { + 'topologyId': '1', + 'traceId': '1', + 'schedulerName': 'default', + 'name': 'test', + }}) + assert '200' in res.status + + +def test_delete_simulation_non_existing(client, mocker): + mocker.patch.object(DB, 'fetch_one', return_value=None) + assert '404' in client.delete('/api/v2/experiments/1').status + + +def test_delete_simulation_different_user(client, mocker): + mocker.patch.object(DB, + 'fetch_one', + return_value={ + '_id': '1', + 'simulationId': '1', + 'googleId': 'other_test', + 'authorizations': [{ + 'simulationId': '1', + 'authorizationLevel': 'VIEW' + }] + }) + mocker.patch.object(DB, 'delete_one', return_value=None) + assert '403' in client.delete('/api/v2/experiments/1').status + + +def test_delete_simulation(client, mocker): + mocker.patch.object(DB, + 'fetch_one', + return_value={ + '_id': '1', + 'simulationId': '1', + 'googleId': 'test', + 'authorizations': [{ + 'simulationId': '1', + 'authorizationLevel': 'OWN' + }] + }) + mocker.patch.object(DB, 'delete_one', return_value={}) + res = client.delete('/api/v2/experiments/1') + assert '200' in res.status -- cgit v1.2.3 From 676ccde281841005e3f318bf267ea1dbcdf6fc87 Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Tue, 30 Jun 2020 11:43:07 +0200 Subject: Add experiment POST --- .../v2/experiments/experimentId/test_endpoint.py | 44 +++++++++++++--------- 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py') diff --git a/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py b/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py index 0c9c9abc..35b8b762 100644 --- a/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py +++ b/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py @@ -48,12 +48,15 @@ def test_update_experiment_missing_parameter(client): def test_update_experiment_non_existing(client, mocker): mocker.patch.object(DB, 'fetch_one', return_value=None) - assert '404' in client.put('/api/v2/experiments/1', json={'experiment': { - 'topologyId': '1', - 'traceId': '1', - 'schedulerName': 'default', - 'name': 'test', - }}).status + assert '404' in client.put('/api/v2/experiments/1', + json={ + 'experiment': { + 'topologyId': '1', + 'traceId': '1', + 'schedulerName': 'default', + 'name': 'test', + } + }).status def test_update_experiment_not_authorized(client, mocker): @@ -68,12 +71,15 @@ def test_update_experiment_not_authorized(client, mocker): }] }) mocker.patch.object(DB, 'update', return_value={}) - assert '403' in client.put('/api/v2/experiments/1', json={'experiment': { - 'topologyId': '1', - 'traceId': '1', - 'schedulerName': 'default', - 'name': 'test', - }}).status + assert '403' in client.put('/api/v2/experiments/1', + json={ + 'experiment': { + 'topologyId': '1', + 'traceId': '1', + 'schedulerName': 'default', + 'name': 'test', + } + }).status def test_update_experiment(client, mocker): @@ -89,12 +95,14 @@ def test_update_experiment(client, mocker): }) mocker.patch.object(DB, 'update', return_value={}) - res = client.put('/api/v2/experiments/1', json={'experiment': { - 'topologyId': '1', - 'traceId': '1', - 'schedulerName': 'default', - 'name': 'test', - }}) + res = client.put( + '/api/v2/experiments/1', + json={'experiment': { + 'topologyId': '1', + 'traceId': '1', + 'schedulerName': 'default', + 'name': 'test', + }}) assert '200' in res.status -- cgit v1.2.3 From 1c58ae3b25120ac670b897665bac7d8f18156220 Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Tue, 30 Jun 2020 14:01:17 +0200 Subject: Fix more violations and ensure experimentIds handling --- web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py') diff --git a/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py b/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py index 35b8b762..c460585f 100644 --- a/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py +++ b/web-server/opendc/api/v2/experiments/experimentId/test_endpoint.py @@ -134,11 +134,13 @@ def test_delete_simulation(client, mocker): '_id': '1', 'simulationId': '1', 'googleId': 'test', + 'experimentIds': ['1'], 'authorizations': [{ 'simulationId': '1', 'authorizationLevel': 'OWN' }] }) mocker.patch.object(DB, 'delete_one', return_value={}) + mocker.patch.object(DB, 'update', return_value=None) res = client.delete('/api/v2/experiments/1') assert '200' in res.status -- cgit v1.2.3