@@ -439,3 +439,41 @@ def test_rules(randstr, data_builder, file_form, as_root, as_admin, with_user, a
439439 assert r .ok
440440
441441 # TODO add and test 'new-style' rules
442+
443+
444+ def test_disabled_rules (randstr , data_builder , api_db , as_admin , file_form ):
445+ # Create gear, project and *disabled* rule triggering on any csv (once enabled)
446+ gear_name = randstr ()
447+ gear = data_builder .create_gear (gear = {'name' : gear_name , 'version' : '0.0.1' })
448+ project = data_builder .create_project ()
449+ r = as_admin .post ('/projects/' + project + '/rules' , json = {
450+ 'alg' : gear_name ,
451+ 'name' : 'csv-job-trigger-rule' ,
452+ 'any' : [],
453+ 'all' : [{'type' : 'file.type' , 'value' : 'tabular data' }],
454+ 'disabled' : True ,
455+ })
456+ assert r .ok
457+ rule = r .json ()['_id' ]
458+
459+ # Upload 1st file (while rule is disabled)
460+ r = as_admin .post ('/projects/' + project + '/files' , files = file_form ('test1.csv' ))
461+ assert r .ok
462+
463+ # Verify that no jobs were created
464+ gear_jobs = [job for job in api_db .jobs .find ({'gear_id' : gear })]
465+ assert len (gear_jobs ) == 0
466+
467+ # Enable rule
468+ r = as_admin .put ('/projects/' + project + '/rules/' + rule , json = {'disabled' : False })
469+ assert r .ok
470+
471+ # Upload 1st file (rule is now enabled)
472+ r = as_admin .post ('/projects/' + project + '/files' , files = file_form ('test2.csv' ))
473+ assert r .ok
474+
475+ # Verify that a job was created
476+ gear_jobs = [job for job in api_db .jobs .find ({'gear_id' : gear })]
477+ assert len (gear_jobs ) == 1
478+ assert len (gear_jobs [0 ]['inputs' ]) == 1
479+ assert gear_jobs [0 ]['inputs' ][0 ]['name' ] == 'test2.csv'
0 commit comments