summaryrefslogtreecommitdiff
path: root/web-server/opendc/api
diff options
context:
space:
mode:
Diffstat (limited to 'web-server/opendc/api')
-rw-r--r--web-server/opendc/api/__init__.py0
-rw-r--r--web-server/opendc/api/v2/__init__.py0
-rw-r--r--web-server/opendc/api/v2/paths.json18
-rw-r--r--web-server/opendc/api/v2/portfolios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py65
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py43
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py119
-rw-r--r--web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py149
-rw-r--r--web-server/opendc/api/v2/prefabs/__init__.py0
-rw-r--r--web-server/opendc/api/v2/prefabs/endpoint.py23
-rw-r--r--web-server/opendc/api/v2/prefabs/prefabId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/prefabs/prefabId/endpoint.py53
-rw-r--r--web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py140
-rw-r--r--web-server/opendc/api/v2/prefabs/test_endpoint.py22
-rw-r--r--web-server/opendc/api/v2/projects/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/endpoint.py32
-rw-r--r--web-server/opendc/api/v2/projects/projectId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py17
-rw-r--r--web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py40
-rw-r--r--web-server/opendc/api/v2/projects/projectId/endpoint.py66
-rw-r--r--web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py35
-rw-r--r--web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py83
-rw-r--r--web-server/opendc/api/v2/projects/projectId/test_endpoint.py119
-rw-r--r--web-server/opendc/api/v2/projects/projectId/topologies/__init__.py0
-rw-r--r--web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py31
-rw-r--r--web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py50
-rw-r--r--web-server/opendc/api/v2/projects/test_endpoint.py23
-rw-r--r--web-server/opendc/api/v2/scenarios/__init__.py0
-rw-r--r--web-server/opendc/api/v2/scenarios/scenarioId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py57
-rw-r--r--web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py140
-rw-r--r--web-server/opendc/api/v2/schedulers/__init__.py0
-rw-r--r--web-server/opendc/api/v2/schedulers/endpoint.py9
-rw-r--r--web-server/opendc/api/v2/schedulers/test_endpoint.py2
-rw-r--r--web-server/opendc/api/v2/topologies/__init__.py0
-rw-r--r--web-server/opendc/api/v2/topologies/topologyId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/topologies/topologyId/endpoint.py56
-rw-r--r--web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py116
-rw-r--r--web-server/opendc/api/v2/traces/__init__.py0
-rw-r--r--web-server/opendc/api/v2/traces/endpoint.py10
-rw-r--r--web-server/opendc/api/v2/traces/test_endpoint.py6
-rw-r--r--web-server/opendc/api/v2/traces/traceId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/traces/traceId/endpoint.py14
-rw-r--r--web-server/opendc/api/v2/traces/traceId/test_endpoint.py13
-rw-r--r--web-server/opendc/api/v2/users/__init__.py0
-rw-r--r--web-server/opendc/api/v2/users/endpoint.py30
-rw-r--r--web-server/opendc/api/v2/users/test_endpoint.py34
-rw-r--r--web-server/opendc/api/v2/users/userId/__init__.py0
-rw-r--r--web-server/opendc/api/v2/users/userId/endpoint.py59
-rw-r--r--web-server/opendc/api/v2/users/userId/test_endpoint.py53
54 files changed, 0 insertions, 1727 deletions
diff --git a/web-server/opendc/api/__init__.py b/web-server/opendc/api/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/__init__.py b/web-server/opendc/api/v2/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/paths.json b/web-server/opendc/api/v2/paths.json
deleted file mode 100644
index 90d5a2e6..00000000
--- a/web-server/opendc/api/v2/paths.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- "/users",
- "/users/{userId}",
- "/projects",
- "/projects/{projectId}",
- "/projects/{projectId}/authorizations",
- "/projects/{projectId}/topologies",
- "/projects/{projectId}/portfolios",
- "/topologies/{topologyId}",
- "/portfolios/{portfolioId}",
- "/portfolios/{portfolioId}/scenarios",
- "/scenarios/{scenarioId}",
- "/schedulers",
- "/traces",
- "/traces/{traceId}",
- "/prefabs",
- "/prefabs/{prefabId}"
-]
diff --git a/web-server/opendc/api/v2/portfolios/__init__.py b/web-server/opendc/api/v2/portfolios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/portfolios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py b/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py
deleted file mode 100644
index c0ca64e0..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from opendc.models.portfolio import Portfolio
-from opendc.models.project import Project
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'})
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved portfolio.', portfolio.obj)
-
-
-def PUT(request):
- """Update this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'}, body={'portfolio': {
- 'name': 'string',
- 'targets': {
- 'enabledMetrics': 'list',
- 'repeatsPerScenario': 'int',
- },
- }})
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, True)
-
- portfolio.set_property('name',
- request.params_body['portfolio']['name'])
- portfolio.set_property('targets.enabledMetrics',
- request.params_body['portfolio']['targets']['enabledMetrics'])
- portfolio.set_property('targets.repeatsPerScenario',
- request.params_body['portfolio']['targets']['repeatsPerScenario'])
-
- portfolio.update()
-
- return Response(200, 'Successfully updated portfolio.', portfolio.obj)
-
-
-def DELETE(request):
- """Delete this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'})
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, True)
-
- project = Project.from_id(portfolio.obj['projectId'])
- project.check_exists()
- if request.params_path['portfolioId'] in project.obj['portfolioIds']:
- project.obj['portfolioIds'].remove(request.params_path['portfolioId'])
- project.update()
-
- old_object = portfolio.delete()
-
- return Response(200, 'Successfully deleted portfolio.', old_object)
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py
deleted file mode 100644
index 1c5e0ab6..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from opendc.models.portfolio import Portfolio
-from opendc.models.scenario import Scenario
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Add a new Scenario for this Portfolio."""
-
- request.check_required_parameters(path={'portfolioId': 'string'},
- body={
- 'scenario': {
- 'name': 'string',
- 'trace': {
- 'traceId': 'string',
- 'loadSamplingFraction': 'float',
- },
- 'topology': {
- 'topologyId': 'string',
- },
- 'operational': {
- 'failuresEnabled': 'bool',
- 'performanceInterferenceEnabled': 'bool',
- 'schedulerName': 'string',
- },
- }
- })
-
- portfolio = Portfolio.from_id(request.params_path['portfolioId'])
-
- portfolio.check_exists()
- portfolio.check_user_access(request.google_id, True)
-
- scenario = Scenario(request.params_body['scenario'])
-
- scenario.set_property('portfolioId', request.params_path['portfolioId'])
- scenario.set_property('simulationState', 'QUEUED')
-
- scenario.insert()
-
- portfolio.obj['scenarioIds'].append(scenario.get_id())
- portfolio.update()
-
- return Response(200, 'Successfully added Scenario.', scenario.obj)
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py
deleted file mode 100644
index 8b55bab0..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_scenario_missing_parameter(client):
- assert '400' in client.post('/api/v2/portfolios/1/scenarios').status
-
-
-def test_add_scenario_non_existing_portfolio(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.post('/api/v2/portfolios/1/scenarios',
- json={
- 'scenario': {
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- }
- }).status
-
-
-def test_add_scenario_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'portfolioId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- assert '403' in client.post('/api/v2/portfolios/1/scenarios',
- json={
- 'scenario': {
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- }
- }).status
-
-
-def test_add_scenario(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'portfolioId': '1',
- 'portfolioIds': ['1'],
- 'scenarioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }],
- 'simulationState': 'QUEUED',
- })
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- 'portfolioId': '1',
- 'simulationState': 'QUEUED',
- })
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.post(
- '/api/v2/portfolios/1/scenarios',
- json={
- 'scenario': {
- 'name': 'test',
- 'trace': {
- 'traceId': '1',
- 'loadSamplingFraction': 1.0,
- },
- 'topology': {
- 'topologyId': '1',
- },
- 'operational': {
- 'failuresEnabled': True,
- 'performanceInterferenceEnabled': False,
- 'schedulerName': 'DEFAULT',
- },
- }
- })
- assert 'portfolioId' in res.json['content']
- assert 'simulationState' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py
deleted file mode 100644
index 7ac346d4..00000000
--- a/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_portfolio_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/portfolios/1').status
-
-
-def test_get_portfolio_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'projectId': '1', 'authorizations': []})
- res = client.get('/api/v2/portfolios/1')
- assert '403' in res.status
-
-
-def test_get_portfolio_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'projectId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/portfolios/1')
- assert '403' in res.status
-
-
-def test_get_portfolio(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'projectId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/portfolios/1')
- assert '200' in res.status
-
-
-def test_update_portfolio_missing_parameter(client):
- assert '400' in client.put('/api/v2/portfolios/1').status
-
-
-def test_update_portfolio_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/portfolios/1', json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_update_portfolio_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/portfolios/1', json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_update_portfolio(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'targets': {
- 'enabledMetrics': [],
- 'repeatsPerScenario': 1
- }
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- res = client.put('/api/v2/portfolios/1', json={'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }})
- assert '200' in res.status
-
-
-def test_delete_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/portfolios/1').status
-
-
-def test_delete_project_different_user(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'googleId': 'other_test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/portfolios/1').status
-
-
-def test_delete_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'googleId': 'test',
- 'portfolioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value={})
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.delete('/api/v2/portfolios/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/prefabs/__init__.py b/web-server/opendc/api/v2/prefabs/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/prefabs/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/prefabs/endpoint.py b/web-server/opendc/api/v2/prefabs/endpoint.py
deleted file mode 100644
index 723a2f0d..00000000
--- a/web-server/opendc/api/v2/prefabs/endpoint.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from datetime import datetime
-
-from opendc.models.prefab import Prefab
-from opendc.models.user import User
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Create a new prefab, and return that new prefab."""
-
- request.check_required_parameters(body={'prefab': {'name': 'string'}})
-
- prefab = Prefab(request.params_body['prefab'])
- prefab.set_property('datetimeCreated', Database.datetime_to_string(datetime.now()))
- prefab.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
-
- user = User.from_google_id(request.google_id)
- prefab.set_property('authorId', user.get_id())
-
- prefab.insert()
-
- return Response(200, 'Successfully created prefab.', prefab.obj)
diff --git a/web-server/opendc/api/v2/prefabs/prefabId/__init__.py b/web-server/opendc/api/v2/prefabs/prefabId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/prefabs/prefabId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/prefabs/prefabId/endpoint.py b/web-server/opendc/api/v2/prefabs/prefabId/endpoint.py
deleted file mode 100644
index e8508ee0..00000000
--- a/web-server/opendc/api/v2/prefabs/prefabId/endpoint.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from datetime import datetime
-
-from opendc.models.prefab import Prefab
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Prefab."""
-
- request.check_required_parameters(path={'prefabId': 'string'})
-
- prefab = Prefab.from_id(request.params_path['prefabId'])
- print(prefab.obj)
- prefab.check_exists()
- print("before cua")
- prefab.check_user_access(request.google_id)
- print("after cua")
-
- return Response(200, 'Successfully retrieved prefab', prefab.obj)
-
-
-def PUT(request):
- """Update a prefab's name and/or contents."""
-
- request.check_required_parameters(body={'prefab': {'name': 'name'}}, path={'prefabId': 'string'})
-
- prefab = Prefab.from_id(request.params_path['prefabId'])
-
- prefab.check_exists()
- prefab.check_user_access(request.google_id)
-
- prefab.set_property('name', request.params_body['prefab']['name'])
- prefab.set_property('rack', request.params_body['prefab']['rack'])
- prefab.set_property('datetime_last_edited', Database.datetime_to_string(datetime.now()))
- prefab.update()
-
- return Response(200, 'Successfully updated prefab.', prefab.obj)
-
-
-def DELETE(request):
- """Delete this Prefab."""
-
- request.check_required_parameters(path={'prefabId': 'string'})
-
- prefab = Prefab.from_id(request.params_path['prefabId'])
-
- prefab.check_exists()
- prefab.check_user_access(request.google_id)
-
- old_object = prefab.delete()
-
- return Response(200, 'Successfully deleted prefab.', old_object)
diff --git a/web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py b/web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py
deleted file mode 100644
index b25c881d..00000000
--- a/web-server/opendc/api/v2/prefabs/prefabId/test_endpoint.py
+++ /dev/null
@@ -1,140 +0,0 @@
-from opendc.util.database import DB
-from unittest.mock import Mock
-
-
-def test_get_prefab_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/prefabs/1').status
-
-def test_get_private_prefab_not_authorized(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- res = client.get('/api/v2/prefabs/1')
- assert '403' in res.status
-
-
-def test_get_private_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '1',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- res = client.get('/api/v2/prefabs/1')
- assert '200' in res.status
-
-def test_get_public_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'public',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- res = client.get('/api/v2/prefabs/1')
- assert '200' in res.status
-
-
-def test_update_prefab_missing_parameter(client):
- assert '400' in client.put('/api/v2/prefabs/1').status
-
-
-def test_update_prefab_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/prefabs/1', json={'prefab': {'name': 'S'}}).status
-
-
-def test_update_prefab_not_authorized(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/prefabs/1', json={'prefab': {'name': 'test prefab', 'rack' : {}}}).status
-
-
-def test_update_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '1',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'update', return_value={})
- res = client.put('/api/v2/prefabs/1', json={'prefab': {'name': 'test prefab', 'rack' : {}}})
- assert '200' in res.status
-
-
-def test_delete_prefab_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/prefabs/1').status
-
-
-def test_delete_prefab_different_user(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '2',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/prefabs/1').status
-
-
-def test_delete_prefab(client, mocker):
- DB.fetch_one = Mock()
- DB.fetch_one.side_effect = [{
- '_id': '1',
- 'name': 'test prefab',
- 'authorId': '1',
- 'visibility': 'private',
- 'rack': {}
- },
- {
- '_id': '1'
- }
- ]
- mocker.patch.object(DB, 'delete_one', return_value={'prefab': {'name': 'name'}})
- res = client.delete('/api/v2/prefabs/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/prefabs/test_endpoint.py b/web-server/opendc/api/v2/prefabs/test_endpoint.py
deleted file mode 100644
index 47029579..00000000
--- a/web-server/opendc/api/v2/prefabs/test_endpoint.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_prefab_missing_parameter(client):
- assert '400' in client.post('/api/v2/prefabs').status
-
-
-def test_add_prefab(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'authorizations': []})
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'datetimeCreated': '000',
- 'datetimeLastEdited': '000',
- 'authorId': 1
- })
- res = client.post('/api/v2/prefabs', json={'prefab': {'name': 'test prefab'}})
- assert 'datetimeCreated' in res.json['content']
- assert 'datetimeLastEdited' in res.json['content']
- assert 'authorId' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/__init__.py b/web-server/opendc/api/v2/projects/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/endpoint.py b/web-server/opendc/api/v2/projects/endpoint.py
deleted file mode 100644
index bf031382..00000000
--- a/web-server/opendc/api/v2/projects/endpoint.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from datetime import datetime
-
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.models.user import User
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Create a new project, and return that new project."""
-
- request.check_required_parameters(body={'project': {'name': 'string'}})
-
- topology = Topology({'name': 'Default topology', 'rooms': []})
- topology.insert()
-
- project = Project(request.params_body['project'])
- project.set_property('datetimeCreated', Database.datetime_to_string(datetime.now()))
- project.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
- project.set_property('topologyIds', [topology.get_id()])
- project.set_property('portfolioIds', [])
- project.insert()
-
- topology.set_property('projectId', project.get_id())
- topology.update()
-
- user = User.from_google_id(request.google_id)
- user.obj['authorizations'].append({'projectId': project.get_id(), 'authorizationLevel': 'OWN'})
- user.update()
-
- return Response(200, 'Successfully created project.', project.obj)
diff --git a/web-server/opendc/api/v2/projects/projectId/__init__.py b/web-server/opendc/api/v2/projects/projectId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py b/web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/authorizations/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py b/web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py
deleted file mode 100644
index 9f6a60ec..00000000
--- a/web-server/opendc/api/v2/projects/projectId/authorizations/endpoint.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from opendc.models.project import Project
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Find all authorizations for a Project."""
-
- request.check_required_parameters(path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, False)
-
- authorizations = project.get_all_authorizations()
-
- return Response(200, 'Successfully retrieved project authorizations', authorizations)
diff --git a/web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py
deleted file mode 100644
index c3bbc093..00000000
--- a/web-server/opendc/api/v2/projects/projectId/authorizations/test_endpoint.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_authorizations_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- mocker.patch.object(DB, 'fetch_all', return_value=None)
- assert '404' in client.get('/api/v2/projects/1/authorizations').status
-
-
-def test_get_authorizations_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'name': 'test trace',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'fetch_all', return_value=[])
- res = client.get('/api/v2/projects/1/authorizations')
- assert '403' in res.status
-
-
-def test_get_authorizations(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'name': 'test trace',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'fetch_all', return_value=[])
- res = client.get('/api/v2/projects/1/authorizations')
- assert len(res.json['content']) == 0
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/projectId/endpoint.py b/web-server/opendc/api/v2/projects/projectId/endpoint.py
deleted file mode 100644
index 77b66d75..00000000
--- a/web-server/opendc/api/v2/projects/projectId/endpoint.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from datetime import datetime
-
-from opendc.models.portfolio import Portfolio
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.models.user import User
-from opendc.util.database import Database
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Project."""
-
- request.check_required_parameters(path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved project', project.obj)
-
-
-def PUT(request):
- """Update a project's name."""
-
- request.check_required_parameters(body={'project': {'name': 'name'}}, path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- project.set_property('name', request.params_body['project']['name'])
- project.set_property('datetime_last_edited', Database.datetime_to_string(datetime.now()))
- project.update()
-
- return Response(200, 'Successfully updated project.', project.obj)
-
-
-def DELETE(request):
- """Delete this Project."""
-
- request.check_required_parameters(path={'projectId': 'string'})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- for topology_id in project.obj['topologyIds']:
- topology = Topology.from_id(topology_id)
- topology.delete()
-
- for portfolio_id in project.obj['portfolioIds']:
- portfolio = Portfolio.from_id(portfolio_id)
- portfolio.delete()
-
- user = User.from_google_id(request.google_id)
- user.obj['authorizations'] = list(
- filter(lambda x: str(x['projectId']) != request.params_path['projectId'], user.obj['authorizations']))
- user.update()
-
- old_object = project.delete()
-
- return Response(200, 'Successfully deleted project.', old_object)
diff --git a/web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py b/web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/portfolios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py b/web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py
deleted file mode 100644
index 0bc65565..00000000
--- a/web-server/opendc/api/v2/projects/projectId/portfolios/endpoint.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from opendc.models.portfolio import Portfolio
-from opendc.models.project import Project
-from opendc.util.rest import Response
-
-
-def POST(request):
- """Add a new Portfolio for this Project."""
-
- request.check_required_parameters(path={'projectId': 'string'},
- body={
- 'portfolio': {
- 'name': 'string',
- 'targets': {
- 'enabledMetrics': 'list',
- 'repeatsPerScenario': 'int',
- },
- }
- })
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- portfolio = Portfolio(request.params_body['portfolio'])
-
- portfolio.set_property('projectId', request.params_path['projectId'])
- portfolio.set_property('scenarioIds', [])
-
- portfolio.insert()
-
- project.obj['portfolioIds'].append(portfolio.get_id())
- project.update()
-
- return Response(200, 'Successfully added Portfolio.', portfolio.obj)
diff --git a/web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py
deleted file mode 100644
index 24416cc3..00000000
--- a/web-server/opendc/api/v2/projects/projectId/portfolios/test_endpoint.py
+++ /dev/null
@@ -1,83 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_portfolio_missing_parameter(client):
- assert '400' in client.post('/api/v2/projects/1/portfolios').status
-
-
-def test_add_portfolio_non_existing_project(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.post('/api/v2/projects/1/portfolios',
- json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_add_portfolio_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- assert '403' in client.post('/api/v2/projects/1/portfolios',
- json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- }).status
-
-
-def test_add_portfolio(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'portfolioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- },
- 'projectId': '1',
- 'scenarioIds': [],
- })
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.post(
- '/api/v2/projects/1/portfolios',
- json={
- 'portfolio': {
- 'name': 'test',
- 'targets': {
- 'enabledMetrics': ['test'],
- 'repeatsPerScenario': 2
- }
- }
- })
- assert 'projectId' in res.json['content']
- assert 'scenarioIds' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/projectId/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/test_endpoint.py
deleted file mode 100644
index 7a862e8d..00000000
--- a/web-server/opendc/api/v2/projects/projectId/test_endpoint.py
+++ /dev/null
@@ -1,119 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/projects/1').status
-
-
-def test_get_project_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'authorizations': []})
- res = client.get('/api/v2/projects/1')
- assert '403' in res.status
-
-
-def test_get_project_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/projects/1')
- assert '403' in res.status
-
-
-def test_get_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/projects/1')
- assert '200' in res.status
-
-
-def test_update_project_missing_parameter(client):
- assert '400' in client.put('/api/v2/projects/1').status
-
-
-def test_update_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/projects/1', json={'project': {'name': 'S'}}).status
-
-
-def test_update_project_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/projects/1', json={'project': {'name': 'S'}}).status
-
-
-def test_update_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- res = client.put('/api/v2/projects/1', json={'project': {'name': 'S'}})
- assert '200' in res.status
-
-
-def test_delete_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/projects/1').status
-
-
-def test_delete_project_different_user(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'googleId': 'other_test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }],
- 'topologyIds': []
- })
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/projects/1').status
-
-
-def test_delete_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'googleId': 'test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'topologyIds': [],
- 'portfolioIds': [],
- })
- mocker.patch.object(DB, 'update', return_value=None)
- mocker.patch.object(DB, 'delete_one', return_value={'googleId': 'test'})
- res = client.delete('/api/v2/projects/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/projects/projectId/topologies/__init__.py b/web-server/opendc/api/v2/projects/projectId/topologies/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/projects/projectId/topologies/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py b/web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py
deleted file mode 100644
index 211dc15d..00000000
--- a/web-server/opendc/api/v2/projects/projectId/topologies/endpoint.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from datetime import datetime
-
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.util.rest import Response
-from opendc.util.database import Database
-
-
-def POST(request):
- """Add a new Topology to the specified project and return it"""
-
- request.check_required_parameters(path={'projectId': 'string'}, body={'topology': {'name': 'string'}})
-
- project = Project.from_id(request.params_path['projectId'])
-
- project.check_exists()
- project.check_user_access(request.google_id, True)
-
- topology = Topology({
- 'projectId': request.params_path['projectId'],
- 'name': request.params_body['topology']['name'],
- 'rooms': request.params_body['topology']['rooms'],
- })
-
- topology.insert()
-
- project.obj['topologyIds'].append(topology.get_id())
- project.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
- project.update()
-
- return Response(200, 'Successfully inserted topology.', topology.obj)
diff --git a/web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py b/web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py
deleted file mode 100644
index ca123a73..00000000
--- a/web-server/opendc/api/v2/projects/projectId/topologies/test_endpoint.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_topology_missing_parameter(client):
- assert '400' in client.post('/api/v2/projects/1/topologies').status
-
-
-def test_add_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'topologyIds': []
- })
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'datetimeCreated': '000',
- 'datetimeLastEdited': '000',
- 'topologyIds': []
- })
- mocker.patch.object(DB, 'update', return_value={})
- res = client.post('/api/v2/projects/1/topologies', json={'topology': {'name': 'test project', 'rooms': []}})
- assert 'rooms' in res.json['content']
- assert '200' in res.status
-
-
-def test_add_topology_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- assert '403' in client.post('/api/v2/projects/1/topologies',
- json={
- 'topology': {
- 'name': 'test_topology',
- 'rooms': {}
- }
- }).status
diff --git a/web-server/opendc/api/v2/projects/test_endpoint.py b/web-server/opendc/api/v2/projects/test_endpoint.py
deleted file mode 100644
index a50735b0..00000000
--- a/web-server/opendc/api/v2/projects/test_endpoint.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_add_project_missing_parameter(client):
- assert '400' in client.post('/api/v2/projects').status
-
-
-def test_add_project(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'authorizations': []})
- mocker.patch.object(DB,
- 'insert',
- return_value={
- '_id': '1',
- 'datetimeCreated': '000',
- 'datetimeLastEdited': '000',
- 'topologyIds': []
- })
- mocker.patch.object(DB, 'update', return_value={})
- res = client.post('/api/v2/projects', json={'project': {'name': 'test project'}})
- assert 'datetimeCreated' in res.json['content']
- assert 'datetimeLastEdited' in res.json['content']
- assert 'topologyIds' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/scenarios/__init__.py b/web-server/opendc/api/v2/scenarios/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/scenarios/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/scenarios/scenarioId/__init__.py b/web-server/opendc/api/v2/scenarios/scenarioId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/scenarios/scenarioId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py b/web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py
deleted file mode 100644
index 02d39063..00000000
--- a/web-server/opendc/api/v2/scenarios/scenarioId/endpoint.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from opendc.models.scenario import Scenario
-from opendc.models.portfolio import Portfolio
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Scenario."""
-
- request.check_required_parameters(path={'scenarioId': 'string'})
-
- scenario = Scenario.from_id(request.params_path['scenarioId'])
-
- scenario.check_exists()
- scenario.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved scenario.', scenario.obj)
-
-
-def PUT(request):
- """Update this Scenarios name."""
-
- request.check_required_parameters(path={'scenarioId': 'string'}, body={'scenario': {
- 'name': 'string',
- }})
-
- scenario = Scenario.from_id(request.params_path['scenarioId'])
-
- scenario.check_exists()
- scenario.check_user_access(request.google_id, True)
-
- scenario.set_property('name',
- request.params_body['scenario']['name'])
-
- scenario.update()
-
- return Response(200, 'Successfully updated scenario.', scenario.obj)
-
-
-def DELETE(request):
- """Delete this Scenario."""
-
- request.check_required_parameters(path={'scenarioId': 'string'})
-
- scenario = Scenario.from_id(request.params_path['scenarioId'])
-
- scenario.check_exists()
- scenario.check_user_access(request.google_id, True)
-
- portfolio = Portfolio.from_id(scenario.obj['portfolioId'])
- portfolio.check_exists()
- if request.params_path['scenarioId'] in portfolio.obj['scenarioIds']:
- portfolio.obj['scenarioIds'].remove(request.params_path['scenarioId'])
- portfolio.update()
-
- old_object = scenario.delete()
-
- return Response(200, 'Successfully deleted scenario.', old_object)
diff --git a/web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py b/web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py
deleted file mode 100644
index 09b7d0c0..00000000
--- a/web-server/opendc/api/v2/scenarios/scenarioId/test_endpoint.py
+++ /dev/null
@@ -1,140 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_scenario_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/scenarios/1').status
-
-
-def test_get_scenario_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={
- 'portfolioId': '1',
- 'authorizations': []
- })
- res = client.get('/api/v2/scenarios/1')
- assert '403' in res.status
-
-
-def test_get_scenario_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'portfolioId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/scenarios/1')
- assert '403' in res.status
-
-
-def test_get_scenario(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- 'portfolioId': '1',
- '_id': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/scenarios/1')
- assert '200' in res.status
-
-
-def test_update_scenario_missing_parameter(client):
- assert '400' in client.put('/api/v2/scenarios/1').status
-
-
-def test_update_scenario_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/scenarios/1', json={
- 'scenario': {
- 'name': 'test',
- }
- }).status
-
-
-def test_update_scenario_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/scenarios/1', json={
- 'scenario': {
- 'name': 'test',
- }
- }).status
-
-
-def test_update_scenario(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }],
- 'targets': {
- 'enabledMetrics': [],
- 'repeatsPerScenario': 1
- }
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- res = client.put('/api/v2/scenarios/1', json={'scenario': {
- 'name': 'test',
- }})
- assert '200' in res.status
-
-
-def test_delete_project_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/scenarios/1').status
-
-
-def test_delete_project_different_user(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'googleId': 'other_test',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value=None)
- assert '403' in client.delete('/api/v2/scenarios/1').status
-
-
-def test_delete_project(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'portfolioId': '1',
- 'googleId': 'test',
- 'scenarioIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value={})
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.delete('/api/v2/scenarios/1')
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/schedulers/__init__.py b/web-server/opendc/api/v2/schedulers/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/schedulers/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/schedulers/endpoint.py b/web-server/opendc/api/v2/schedulers/endpoint.py
deleted file mode 100644
index a96fdd88..00000000
--- a/web-server/opendc/api/v2/schedulers/endpoint.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from opendc.util.rest import Response
-
-SCHEDULERS = ['DEFAULT']
-
-
-def GET(_):
- """Get all available Schedulers."""
-
- return Response(200, 'Successfully retrieved Schedulers.', [{'name': name} for name in SCHEDULERS])
diff --git a/web-server/opendc/api/v2/schedulers/test_endpoint.py b/web-server/opendc/api/v2/schedulers/test_endpoint.py
deleted file mode 100644
index a0bd8758..00000000
--- a/web-server/opendc/api/v2/schedulers/test_endpoint.py
+++ /dev/null
@@ -1,2 +0,0 @@
-def test_get_schedulers(client):
- assert '200' in client.get('/api/v2/schedulers').status
diff --git a/web-server/opendc/api/v2/topologies/__init__.py b/web-server/opendc/api/v2/topologies/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/topologies/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/topologies/topologyId/__init__.py b/web-server/opendc/api/v2/topologies/topologyId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/topologies/topologyId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/topologies/topologyId/endpoint.py b/web-server/opendc/api/v2/topologies/topologyId/endpoint.py
deleted file mode 100644
index 512b050a..00000000
--- a/web-server/opendc/api/v2/topologies/topologyId/endpoint.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from datetime import datetime
-
-from opendc.util.database import Database
-from opendc.models.project import Project
-from opendc.models.topology import Topology
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Topology."""
-
- request.check_required_parameters(path={'topologyId': 'string'})
-
- topology = Topology.from_id(request.params_path['topologyId'])
-
- topology.check_exists()
- topology.check_user_access(request.google_id, False)
-
- return Response(200, 'Successfully retrieved topology.', topology.obj)
-
-
-def PUT(request):
- """Update this topology"""
- request.check_required_parameters(path={'topologyId': 'string'}, body={'topology': {'name': 'string', 'rooms': {}}})
- topology = Topology.from_id(request.params_path['topologyId'])
-
- topology.check_exists()
- topology.check_user_access(request.google_id, True)
-
- topology.set_property('name', request.params_body['topology']['name'])
- topology.set_property('rooms', request.params_body['topology']['rooms'])
- topology.set_property('datetimeLastEdited', Database.datetime_to_string(datetime.now()))
-
- topology.update()
-
- return Response(200, 'Successfully updated topology.', topology.obj)
-
-
-def DELETE(request):
- """Delete this topology"""
- request.check_required_parameters(path={'topologyId': 'string'})
-
- topology = Topology.from_id(request.params_path['topologyId'])
-
- topology.check_exists()
- topology.check_user_access(request.google_id, True)
-
- project = Project.from_id(topology.obj['projectId'])
- project.check_exists()
- if request.params_path['topologyId'] in project.obj['topologyIds']:
- project.obj['topologyIds'].remove(request.params_path['topologyId'])
- project.update()
-
- old_object = topology.delete()
-
- return Response(200, 'Successfully deleted topology.', old_object)
diff --git a/web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py b/web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py
deleted file mode 100644
index b25cb798..00000000
--- a/web-server/opendc/api/v2/topologies/topologyId/test_endpoint.py
+++ /dev/null
@@ -1,116 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'EDIT'
- }]
- })
- res = client.get('/api/v2/topologies/1')
- assert '200' in res.status
-
-
-def test_get_topology_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/topologies/1').status
-
-
-def test_get_topology_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '2',
- 'authorizationLevel': 'OWN'
- }]
- })
- res = client.get('/api/v2/topologies/1')
- assert '403' in res.status
-
-
-def test_get_topology_no_authorizations(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'projectId': '1', 'authorizations': []})
- res = client.get('/api/v2/topologies/1')
- assert '403' in res.status
-
-
-def test_update_topology_missing_parameter(client):
- assert '400' in client.put('/api/v2/topologies/1').status
-
-
-def test_update_topology_non_existent(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/topologies/1', json={'topology': {'name': 'test_topology', 'rooms': {}}}).status
-
-
-def test_update_topology_not_authorized(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'VIEW'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
- assert '403' in client.put('/api/v2/topologies/1', json={
- 'topology': {
- 'name': 'updated_topology',
- 'rooms': {}
- }
- }).status
-
-
-def test_update_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'update', return_value={})
-
- assert '200' in client.put('/api/v2/topologies/1', json={
- 'topology': {
- 'name': 'updated_topology',
- 'rooms': {}
- }
- }).status
-
-
-def test_delete_topology(client, mocker):
- mocker.patch.object(DB,
- 'fetch_one',
- return_value={
- '_id': '1',
- 'projectId': '1',
- 'googleId': 'test',
- 'topologyIds': ['1'],
- 'authorizations': [{
- 'projectId': '1',
- 'authorizationLevel': 'OWN'
- }]
- })
- mocker.patch.object(DB, 'delete_one', return_value={})
- mocker.patch.object(DB, 'update', return_value=None)
- res = client.delete('/api/v2/topologies/1')
- assert '200' in res.status
-
-
-def test_delete_nonexistent_topology(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/topologies/1').status
diff --git a/web-server/opendc/api/v2/traces/__init__.py b/web-server/opendc/api/v2/traces/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/traces/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/traces/endpoint.py b/web-server/opendc/api/v2/traces/endpoint.py
deleted file mode 100644
index ee699e02..00000000
--- a/web-server/opendc/api/v2/traces/endpoint.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from opendc.models.trace import Trace
-from opendc.util.rest import Response
-
-
-def GET(_):
- """Get all available Traces."""
-
- traces = Trace.get_all()
-
- return Response(200, 'Successfully retrieved Traces', traces.obj)
diff --git a/web-server/opendc/api/v2/traces/test_endpoint.py b/web-server/opendc/api/v2/traces/test_endpoint.py
deleted file mode 100644
index 9f806085..00000000
--- a/web-server/opendc/api/v2/traces/test_endpoint.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_traces(client, mocker):
- mocker.patch.object(DB, 'fetch_all', return_value=[])
- assert '200' in client.get('/api/v2/traces').status
diff --git a/web-server/opendc/api/v2/traces/traceId/__init__.py b/web-server/opendc/api/v2/traces/traceId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/traces/traceId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/traces/traceId/endpoint.py b/web-server/opendc/api/v2/traces/traceId/endpoint.py
deleted file mode 100644
index 670f88d1..00000000
--- a/web-server/opendc/api/v2/traces/traceId/endpoint.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from opendc.models.trace import Trace
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this Trace."""
-
- request.check_required_parameters(path={'traceId': 'string'})
-
- trace = Trace.from_id(request.params_path['traceId'])
-
- trace.check_exists()
-
- return Response(200, 'Successfully retrieved trace.', trace.obj)
diff --git a/web-server/opendc/api/v2/traces/traceId/test_endpoint.py b/web-server/opendc/api/v2/traces/traceId/test_endpoint.py
deleted file mode 100644
index 56792ca9..00000000
--- a/web-server/opendc/api/v2/traces/traceId/test_endpoint.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_trace_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/traces/1').status
-
-
-def test_get_trace(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'name': 'test trace'})
- res = client.get('/api/v2/traces/1')
- assert 'name' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/users/__init__.py b/web-server/opendc/api/v2/users/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/users/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/users/endpoint.py b/web-server/opendc/api/v2/users/endpoint.py
deleted file mode 100644
index 0dcf2463..00000000
--- a/web-server/opendc/api/v2/users/endpoint.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from opendc.models.user import User
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Search for a User using their email address."""
-
- request.check_required_parameters(query={'email': 'string'})
-
- user = User.from_email(request.params_query['email'])
-
- user.check_exists()
-
- return Response(200, 'Successfully retrieved user.', user.obj)
-
-
-def POST(request):
- """Add a new User."""
-
- request.check_required_parameters(body={'user': {'email': 'string'}})
-
- user = User(request.params_body['user'])
- user.set_property('googleId', request.google_id)
- user.set_property('authorizations', [])
-
- user.check_already_exists()
-
- user.insert()
-
- return Response(200, 'Successfully created user.', user.obj)
diff --git a/web-server/opendc/api/v2/users/test_endpoint.py b/web-server/opendc/api/v2/users/test_endpoint.py
deleted file mode 100644
index d60429b3..00000000
--- a/web-server/opendc/api/v2/users/test_endpoint.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_user_by_email_missing_parameter(client):
- assert '400' in client.get('/api/v2/users').status
-
-
-def test_get_user_by_email_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/users?email=test@test.com').status
-
-
-def test_get_user_by_email(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'email': 'test@test.com'})
- res = client.get('/api/v2/users?email=test@test.com')
- assert 'email' in res.json['content']
- assert '200' in res.status
-
-
-def test_add_user_missing_parameter(client):
- assert '400' in client.post('/api/v2/users').status
-
-
-def test_add_user_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'email': 'test@test.com'})
- assert '409' in client.post('/api/v2/users', json={'user': {'email': 'test@test.com'}}).status
-
-
-def test_add_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- mocker.patch.object(DB, 'insert', return_value={'email': 'test@test.com'})
- res = client.post('/api/v2/users', json={'user': {'email': 'test@test.com'}})
- assert 'email' in res.json['content']
- assert '200' in res.status
diff --git a/web-server/opendc/api/v2/users/userId/__init__.py b/web-server/opendc/api/v2/users/userId/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/web-server/opendc/api/v2/users/userId/__init__.py
+++ /dev/null
diff --git a/web-server/opendc/api/v2/users/userId/endpoint.py b/web-server/opendc/api/v2/users/userId/endpoint.py
deleted file mode 100644
index be3462c0..00000000
--- a/web-server/opendc/api/v2/users/userId/endpoint.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from opendc.models.project import Project
-from opendc.models.user import User
-from opendc.util.rest import Response
-
-
-def GET(request):
- """Get this User."""
-
- request.check_required_parameters(path={'userId': 'string'})
-
- user = User.from_id(request.params_path['userId'])
-
- user.check_exists()
-
- return Response(200, 'Successfully retrieved user.', user.obj)
-
-
-def PUT(request):
- """Update this User's given name and/or family name."""
-
- request.check_required_parameters(body={'user': {
- 'givenName': 'string',
- 'familyName': 'string'
- }},
- path={'userId': 'string'})
-
- user = User.from_id(request.params_path['userId'])
-
- user.check_exists()
- user.check_correct_user(request.google_id)
-
- user.set_property('givenName', request.params_body['user']['givenName'])
- user.set_property('familyName', request.params_body['user']['familyName'])
-
- user.update()
-
- return Response(200, 'Successfully updated user.', user.obj)
-
-
-def DELETE(request):
- """Delete this User."""
-
- request.check_required_parameters(path={'userId': 'string'})
-
- user = User.from_id(request.params_path['userId'])
-
- user.check_exists()
- user.check_correct_user(request.google_id)
-
- for authorization in user.obj['authorizations']:
- if authorization['authorizationLevel'] != 'OWN':
- continue
-
- project = Project.from_id(authorization['projectId'])
- project.delete()
-
- old_object = user.delete()
-
- return Response(200, 'Successfully deleted user.', old_object)
diff --git a/web-server/opendc/api/v2/users/userId/test_endpoint.py b/web-server/opendc/api/v2/users/userId/test_endpoint.py
deleted file mode 100644
index cdff2229..00000000
--- a/web-server/opendc/api/v2/users/userId/test_endpoint.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from opendc.util.database import DB
-
-
-def test_get_user_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.get('/api/v2/users/1').status
-
-
-def test_get_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'email': 'test@test.com'})
- res = client.get('/api/v2/users/1')
- assert 'email' in res.json['content']
- assert '200' in res.status
-
-
-def test_update_user_missing_parameter(client):
- assert '400' in client.put('/api/v2/users/1').status
-
-
-def test_update_user_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.put('/api/v2/users/1', json={'user': {'givenName': 'A', 'familyName': 'B'}}).status
-
-
-def test_update_user_different_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'other_test'})
- assert '403' in client.put('/api/v2/users/1', json={'user': {'givenName': 'A', 'familyName': 'B'}}).status
-
-
-def test_update_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'test'})
- mocker.patch.object(DB, 'update', return_value={'givenName': 'A', 'familyName': 'B'})
- res = client.put('/api/v2/users/1', json={'user': {'givenName': 'A', 'familyName': 'B'}})
- assert 'givenName' in res.json['content']
- assert '200' in res.status
-
-
-def test_delete_user_non_existing(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value=None)
- assert '404' in client.delete('/api/v2/users/1').status
-
-
-def test_delete_user_different_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'other_test'})
- assert '403' in client.delete('/api/v2/users/1').status
-
-
-def test_delete_user(client, mocker):
- mocker.patch.object(DB, 'fetch_one', return_value={'_id': '1', 'googleId': 'test', 'authorizations': []})
- mocker.patch.object(DB, 'delete_one', return_value={'googleId': 'test'})
- res = client.delete('/api/v2/users/1')
- assert 'googleId' in res.json['content']
- assert '200' in res.status