@@ -207,11 +207,12 @@ def test_site_rules_copied_to_new_projects(randstr, data_builder, file_form, as_
207207 data_builder .delete_group (group , recursive = True )
208208
209209
210- def test_rules (randstr , data_builder , file_form , as_root , as_admin , with_user , api_db ):
210+ def test_project_rules (randstr , data_builder , file_form , as_root , as_admin , with_user , api_db ):
211211 # create versioned gear to cover code selecting latest gear
212+ # add gear config to latest gear to check rules inheriting it
212213 gear_name = randstr ()
213214 gear_1 = data_builder .create_gear (gear = {'name' : gear_name , 'version' : '0.0.1' })
214- gear_2 = data_builder .create_gear (gear = {'name' : gear_name , 'version' : '0.0.2' })
215+ gear_2 = data_builder .create_gear (gear = {'name' : gear_name , 'version' : '0.0.2' , 'config' : { 'param' : { 'type' : 'string' }} })
215216 project = data_builder .create_project ()
216217
217218 bad_payload = {'test' : 'rules' }
@@ -254,15 +255,39 @@ def test_rules(randstr, data_builder, file_form, as_root, as_admin, with_user, a
254255 'alg' : 'non-existent-gear-name' ,
255256 'name' : 'csv-job-trigger-rule' ,
256257 'any' : [],
257- 'all' : [
258- {'type' : 'file.type' , 'value' : 'tabular data' },
259- ]
258+ 'all' : [],
260259 }
261260
261+ # try to add project rule w/ invalid rule-item (invalid type)
262+ # NOTE this is a legacy rule
263+ rule_json ['all' ] = [{'type' : 'invalid' , 'value' : 'test' }]
264+ r = as_admin .post ('/projects/' + project + '/rules' , json = rule_json )
265+ assert r .status_code == 400
266+ assert "'invalid' is not one of" in r .json ()['message' ]
267+
268+ # try to add project rule w/ invalid rule-item (missing value)
269+ # NOTE this is a legacy rule
270+ rule_json ['all' ] = [{'type' : 'file.name' }]
271+ r = as_admin .post ('/projects/' + project + '/rules' , json = rule_json )
272+ assert r .status_code == 400
273+ assert "'value' is a required property" in r .json ()['message' ]
274+
275+ # set valid rule-item
276+ rule_json ['all' ] = [{'type' : 'file.type' , 'value' : 'tabular data' }]
277+
278+ # try to add project rule w/ invalid gear config
279+ # NOTE this is a legacy rule
280+ rule_json ['config' ] = {'foo' : 'bar' }
281+ r = as_admin .post ('/projects/' + project + '/rules' , json = rule_json )
282+ assert r .status_code == 400
283+ assert "'bar' is not of type u'object'" in r .json ()['message' ]
284+ del rule_json ['config' ]
285+
262286 # try to add project rule w/ non-existent gear
263287 # NOTE this is a legacy rule
264288 r = as_admin .post ('/projects/' + project + '/rules' , json = rule_json )
265289 assert r .status_code == 400
290+ assert "Cannot find gear" in r .json ()['message' ]
266291
267292 # add project rule w/ proper gear alg
268293 # NOTE this is a legacy rule
@@ -271,10 +296,11 @@ def test_rules(randstr, data_builder, file_form, as_root, as_admin, with_user, a
271296 assert r .ok
272297 rule = r .json ()['_id' ]
273298
274- # get project rules (verify rule was added)
299+ # get project rules (verify rule was added and uses default gear config )
275300 r = as_admin .get ('/projects/' + project + '/rules' )
276301 assert r .ok
277302 assert r .json ()[0 ]['alg' ] == gear_name
303+ assert r .json ()[0 ]['config' ] == {'param' : {'type' : 'string' }}
278304
279305 # try to get single project rule using non-existent rule id
280306 r = as_admin .get ('/projects/' + project + '/rules/000000000000000000000000' )
@@ -292,10 +318,14 @@ def test_rules(randstr, data_builder, file_form, as_root, as_admin, with_user, a
292318 r = with_user .session .put ('/projects/' + project + '/rules/' + rule , json = {'alg' : gear_name })
293319 assert r .status_code == 403
294320
295- # try to update rule to with invalid gear alg
321+ # try to update rule with invalid gear alg
296322 r = as_admin .put ('/projects/' + project + '/rules/' + rule , json = {'alg' : 'not-a-real-gear' })
297323 assert r .status_code == 400
298324
325+ # try to update rule with invalid gear config
326+ r = as_admin .put ('/projects/' + project + '/rules/' + rule , json = {'config' : {'foo' : 'bar' }})
327+ assert r .status_code == 400
328+
299329 # update name of rule
300330 rule_name = 'improved-csv-trigger-rule'
301331 r = as_admin .put ('/projects/' + project + '/rules/' + rule , json = {'name' : rule_name })
0 commit comments