11
11
import pytest
12
12
13
13
from openeo .capabilities import ComparableVersion
14
- from openeo_driver .backend import BatchJobMetadata
14
+ from openeo_driver .backend import BatchJobMetadata , UserDefinedProcessMetadata
15
15
from openeo_driver .dummy import dummy_backend
16
16
import openeo_driver .testing
17
17
from openeo_driver .testing import TEST_USER , ApiResponse , TEST_USER_AUTH_HEADER
18
- from openeo_driver .views import app , EndpointRegistry , build_backend_deploy_metadata , _normalize_collection_metadata
18
+ from openeo_driver .views import app , EndpointRegistry , build_backend_deploy_metadata , _normalize_collection_metadata , \
19
+ backend_implementation
19
20
from .data import TEST_DATA_ROOT
20
21
from .test_users import _build_basic_http_auth_header
21
22
@@ -112,7 +113,6 @@ def test_capabilities_endpoints(self, api100):
112
113
assert endpoints ["/result" ] == ["POST" ]
113
114
assert endpoints ["/jobs" ] == ["GET" , "POST" ]
114
115
assert endpoints ["/processes" ] == ["GET" ]
115
- assert endpoints ["/processes/{process_id}" ] == ["GET" ]
116
116
assert endpoints ["/udf_runtimes" ] == ["GET" ]
117
117
assert endpoints ["/file_formats" ] == ["GET" ]
118
118
assert endpoints ["/service_types" ] == ["GET" ]
@@ -232,8 +232,12 @@ def test_file_formats(self, api100):
232
232
}
233
233
}
234
234
235
- def test_processes (self , api ):
236
- resp = api .get ('/processes' ).assert_status_code (200 ).json
235
+ @pytest .mark .parametrize ("endpoint" , [
236
+ "/processes" ,
237
+ "/processes/backend"
238
+ ])
239
+ def test_processes (self , api , endpoint ):
240
+ resp = api .get (endpoint ).assert_status_code (200 ).json
237
241
processes = resp ["processes" ]
238
242
process_ids = set (p ['id' ] for p in processes )
239
243
assert {"load_collection" , "min" , "max" , "sin" , "merge_cubes" , "mask" }.issubset (process_ids )
@@ -267,25 +271,6 @@ def test_processes_non_standard_histogram(self, api):
267
271
'schema' : {'type' : 'object' }
268
272
}
269
273
270
- def test_process_details (self , api ):
271
- spec = api .get ('/processes/sin' ).assert_status_code (200 ).json
272
- assert spec ['id' ] == 'sin'
273
- assert "Computes the sine" in spec ['description' ]
274
- if api .api_version_compare .at_least ("1.0.0" ):
275
- assert spec ["parameters" ] == [
276
- {'name' : 'x' , 'description' : 'An angle in radians.' , 'schema' : {'type' : ['number' , 'null' ]}}
277
- ]
278
- else :
279
- assert spec ["parameters" ] == {
280
- 'x' : {
281
- 'description' : 'An angle in radians.' , 'required' : True , 'schema' : {'type' : ['number' , 'null' ]}
282
- }
283
- }
284
- assert spec ["returns" ]["schema" ] == {'type' : ['number' , 'null' ]}
285
-
286
- def test_process_details_invalid (self , api ):
287
- api .get ('/processes/blergh' ).assert_error (400 , 'ProcessUnsupported' )
288
-
289
274
def test_processes_040_vs_100 (self , api040 , api100 ):
290
275
pids040 = {p ['id' ] for p in api040 .get ("/processes" ).assert_status_code (200 ).json ["processes" ]}
291
276
pids100 = {p ['id' ] for p in api100 .get ("/processes" ).assert_status_code (200 ).json ["processes" ]}
@@ -1028,8 +1013,27 @@ def foo_post():
1028
1013
assert methods == ({"GET" }, {"POST" })
1029
1014
1030
1015
1016
+ @pytest .fixture
1017
+ def udp_store () -> dummy_backend .DummyUserDefinedProcesses :
1018
+ udps = backend_implementation .user_defined_processes
1019
+ assert isinstance (udps , dummy_backend .DummyUserDefinedProcesses )
1020
+ udps .reset ({
1021
+ ('Mr.Test' , 'udp1' ): UserDefinedProcessMetadata (
1022
+ id = 'udp1' ,
1023
+ process_graph = {'process1' : {}},
1024
+ public = True ,
1025
+ ),
1026
+ ('Mr.Test' , 'udp2' ): UserDefinedProcessMetadata (
1027
+ id = 'udp2' ,
1028
+ process_graph = {'process1' : {}},
1029
+ public = False ,
1030
+ )
1031
+ })
1032
+ return udps
1033
+
1034
+
1031
1035
class TestUserDefinedProcesses :
1032
- def test_add_udp (self , api100 ):
1036
+ def test_add_udp (self , api100 , udp_store ):
1033
1037
api100 .put ('/process_graphs/evi' , headers = TEST_USER_AUTH_HEADER , json = {
1034
1038
'id' : 'evi' ,
1035
1039
'parameters' : [
@@ -1041,13 +1045,13 @@ def test_add_udp(self, api100):
1041
1045
'public' : True
1042
1046
}).assert_status_code (200 )
1043
1047
1044
- new_udp = dummy_backend . DummyUserDefinedProcesses ._processes ['Mr.Test' , 'evi' ]
1048
+ new_udp = udp_store ._processes ['Mr.Test' , 'evi' ]
1045
1049
assert new_udp .id == 'evi'
1046
1050
assert new_udp .parameters == [{'name' : 'red' }]
1047
1051
assert new_udp .process_graph == {'sub' : {}}
1048
1052
assert new_udp .public
1049
1053
1050
- def test_update_udp (self , api100 ):
1054
+ def test_update_udp (self , api100 , udp_store ):
1051
1055
api100 .put ('/process_graphs/udp1' , headers = TEST_USER_AUTH_HEADER , json = {
1052
1056
'id' : 'udp1' ,
1053
1057
'parameters' : [
@@ -1059,13 +1063,13 @@ def test_update_udp(self, api100):
1059
1063
'public' : True
1060
1064
}).assert_status_code (200 )
1061
1065
1062
- modified_udp = dummy_backend . DummyUserDefinedProcesses ._processes ['Mr.Test' , 'udp1' ]
1066
+ modified_udp = udp_store ._processes ['Mr.Test' , 'udp1' ]
1063
1067
assert modified_udp .id == 'udp1'
1064
1068
assert modified_udp .process_graph == {'add' : {}}
1065
1069
assert modified_udp .parameters == [{'name' : 'blue' }]
1066
1070
assert modified_udp .public
1067
1071
1068
- def test_list_udps (self , api100 ):
1072
+ def test_list_udps (self , api100 , udp_store ):
1069
1073
resp = api100 .get ('/process_graphs' , headers = TEST_USER_AUTH_HEADER ).assert_status_code (200 )
1070
1074
1071
1075
udps = resp .json ['processes' ]
@@ -1074,27 +1078,50 @@ def test_list_udps(self, api100):
1074
1078
assert 'process_graph' not in udp1
1075
1079
assert udp1 ['public' ]
1076
1080
1077
- def test_get_udp (self , api100 ):
1081
+ def test_get_udp (self , api100 , udp_store ):
1078
1082
resp = api100 .get ('/process_graphs/udp1' , headers = TEST_USER_AUTH_HEADER ).assert_status_code (200 )
1079
1083
1080
1084
udp = resp .json
1081
1085
assert udp ['id' ] == 'udp1'
1082
1086
assert udp ['public' ]
1083
1087
1084
- def test_get_unknown_udp (self , api100 ):
1088
+ def test_get_unknown_udp (self , api100 , udp_store ):
1085
1089
api100 .get ('/process_graphs/unknown' , headers = TEST_USER_AUTH_HEADER ).assert_status_code (404 )
1086
1090
1087
- def test_delete_udp (self , api100 ):
1088
- assert ('Mr.Test' , 'udp2' ) in dummy_backend . DummyUserDefinedProcesses ._processes
1091
+ def test_delete_udp (self , api100 , udp_store ):
1092
+ assert ('Mr.Test' , 'udp2' ) in udp_store ._processes
1089
1093
1090
1094
api100 .delete ('/process_graphs/udp2' , headers = TEST_USER_AUTH_HEADER ).assert_status_code (204 )
1091
1095
1092
- assert ('Mr.Test' , 'udp1' ) in dummy_backend . DummyUserDefinedProcesses ._processes
1093
- assert ('Mr.Test' , 'udp2' ) not in dummy_backend . DummyUserDefinedProcesses ._processes
1096
+ assert ('Mr.Test' , 'udp1' ) in udp_store ._processes
1097
+ assert ('Mr.Test' , 'udp2' ) not in udp_store ._processes
1094
1098
1095
- def test_delete_unknown_udp (self , api100 ):
1099
+ def test_delete_unknown_udp (self , api100 , udp_store ):
1096
1100
api100 .delete ('/process_graphs/unknown' , headers = TEST_USER_AUTH_HEADER ).assert_status_code (404 )
1097
1101
1102
+ def test_public_udp (self , api100 , udp_store ):
1103
+ api100 .put ('/process_graphs/evi' , headers = TEST_USER_AUTH_HEADER , json = {
1104
+ 'id' : 'evi' ,
1105
+ 'parameters' : [{'name' : 'red' }],
1106
+ 'process_graph' : {'sub' : {}},
1107
+ 'public' : True
1108
+ }).assert_status_code (200 )
1109
+ api100 .put ('/process_graphs/secret' , headers = TEST_USER_AUTH_HEADER , json = {
1110
+ 'id' : 'secret' ,
1111
+ 'parameters' : [{'name' : 'red' }],
1112
+ 'process_graph' : {'sub' : {}},
1113
+ 'public' : False
1114
+ }).assert_status_code (200 )
1115
+
1116
+ r = api100 .get ("/processes/u:Mr.Test" ).assert_status_code (200 )
1117
+ assert r .json == {
1118
+ "processes" : [
1119
+ {"id" : "udp1" , "public" : True },
1120
+ {"id" : "evi" , "parameters" : [{"name" : "red" }], "public" : True }
1121
+ ],
1122
+ "links" : [],
1123
+ }
1124
+
1098
1125
1099
1126
def test_debug_echo_get (api ):
1100
1127
res = api .get ("/_debug/echo?xev=lol" , headers = {"foo" : "bar" }).assert_status_code (200 ).json
0 commit comments