# Tools to create. # Notes on conditional boolean values... # - if you set truevalue/falsevalue - it doesn't look like the when can remain # true/false - so go through and simplify that. means don't need to create test # cases that test that. Linting also at very least warns on this. # - gx_conditional_boolean_empty_default # - gx_conditional_boolean_empty_else # - gx_conditional_select_* # - gx_repeat_select_required # - gx_repeat_repeat_select_required # - gx_repeat_conditional_boolean_optional # Things to verify: # - non optional, multi-selects require a selection (see TODO below...) # - https://github.com/galaxyproject/galaxy/issues/18541 gx_int: request_valid: &gx_int_request_valid - parameter: 5 - parameter: 6 # galaxy parameters created with a value - so doesn't need to appear in request even though non-optional - {} request_invalid: &gx_int_request_invalid - parameter: "5" - parameter: null - parameter: "null" - parameter: "None" - parameter: { 5 } - parameter: {__class__: 'ConnectedValue'} # int parameters have no differences between relaxed and strict, internal or external # requests, or dereferenced or not. relaxed_request_valid: *gx_int_request_valid relaxed_request_invalid: *gx_int_request_invalid request_internal_valid: *gx_int_request_valid request_internal_invalid: *gx_int_request_invalid request_internal_dereferenced_valid: *gx_int_request_valid request_internal_dereferenced_invalid: *gx_int_request_invalid job_internal_valid: - parameter: 5 job_internal_invalid: - parameter: null - {} job_runtime_valid: - parameter: 5 job_runtime_invalid: - parameter: null - {} landing_request_valid: - {} - parameter: 5 landing_request_invalid: - parameter: "moo" - parameter: "5" landing_request_internal_valid: - {} - parameter: 5 landing_request_internal_invalid: - parameter: "moo" - parameter: "5" test_case_xml_valid: - parameter: 5 - {} test_case_xml_invalid: - parameter: null - parameter: "5" test_case_json_valid: - parameter: 5 - {} test_case_json_invalid: - parameter: null - parameter: "5" workflow_step_valid: - parameter: 5 - {} workflow_step_invalid: - parameterx: 5 - parameter: 'foobar' workflow_step_linked_valid: - parameter: 5 - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: null - parameter: 'foobar' - parameter: {__class__: 'ConnectedValue2'} gx_boolean: request_valid: - parameter: True - parameter: False - {} request_invalid: - parameter: {} - parameter: "true" # This is borderline... should we allow truevalue/falsevalue in the API. # Marius and John were on fence here. - parameter: "mytrue" - parameter: null - parameter: {__class__: 'ConnectedValue'} job_internal_valid: - parameter: true - parameter: false job_internal_invalid: - {} job_runtime_valid: - parameter: true - parameter: false job_runtime_invalid: - {} landing_request_valid: - {} - parameter: true - parameter: false landing_request_invalid: - parameter: "true" - parameter: "5" landing_request_internal_valid: - {} - parameter: true - parameter: false landing_request_internal_invalid: - parameter: "moo" - parameter: "true" - parameter: "5" workflow_step_valid: - parameter: True - {} workflow_step_invalid: - parameter: "true" - parameter: mytrue - parameter: null workflow_step_linked_valid: - parameter: True - {} - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: "true" - parameter: {__class__: 'ConnectedValue3'} gx_boolean_user: request_valid: - parameter: True - parameter: False - {} request_invalid: - parameter: {} - parameter: "true" - parameter: "mytrue" - parameter: null - parameter: {__class__: 'ConnectedValue'} job_internal_valid: - parameter: true - parameter: false job_internal_invalid: - {} job_runtime_valid: - parameter: true - parameter: false job_runtime_invalid: - {} landing_request_valid: - {} - parameter: true - parameter: false landing_request_invalid: - parameter: "true" - parameter: "5" landing_request_internal_valid: - {} - parameter: true - parameter: false landing_request_internal_invalid: - parameter: "moo" - parameter: "true" - parameter: "5" workflow_step_valid: - parameter: True - {} workflow_step_invalid: - parameter: "true" - parameter: mytrue - parameter: null workflow_step_linked_valid: - parameter: True - {} - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: "true" - parameter: {__class__: 'ConnectedValue3'} gx_int_optional: request_valid: &gx_int_optional_request_valid - parameter: 5 - parameter: null - {} request_invalid: &gx_int_optional_request_invalid - parameter: "5" - parameter: "None" - parameter: "null" - parameter: [5] - parameter: {__class__: 'ConnectedValue'} relaxed_request_valid: *gx_int_optional_request_valid relaxed_request_invalid: *gx_int_optional_request_invalid request_internal_valid: *gx_int_optional_request_valid request_internal_invalid: *gx_int_optional_request_invalid request_internal_dereferenced_valid: *gx_int_optional_request_valid request_internal_dereferenced_invalid: *gx_int_optional_request_invalid job_internal_valid: - parameter: 5 - parameter: null job_internal_invalid: - {} job_runtime_valid: - parameter: 5 - parameter: null job_runtime_invalid: - {} test_case_xml_valid: - parameter: null landing_request_valid: - {} - parameter: 5 - parameter: null landing_request_invalid: - parameter: "moo" - parameter: "5" landing_request_internal_valid: - {} - parameter: 5 - parameter: null landing_request_internal_invalid: - parameter: "moo" - parameter: "5" workflow_step_valid: - parameter: 5 - parameter: null - {} workflow_step_invalid: - parameter: "5" - parameter: "None" - parameter: "null" - parameter: [5] workflow_step_linked_valid: - parameter: 5 - parameter: null - {} - parameter: {__class__: 'ConnectedValue'} gx_int_required: &gx_int_required request_valid: - parameter: 5 - parameter: 6 request_invalid: - {} - parameter: null - parameter: "null" - parameter: "None" - parameter: { 5 } - parameter: {__class__: 'ConnectedValue'} job_internal_valid: - parameter: 5 job_internal_invalid: - {} job_runtime_valid: - parameter: 5 job_runtime_invalid: - {} # and actual request will require a value but the landing only needs to specify parameters # of interest - forcing users to make the rest of the selections. landing_request_valid: - {} - parameter: 5 landing_request_invalid: - parameter: "moo" - parameter: "5" landing_request_internal_valid: - {} - parameter: 5 landing_request_internal_invalid: - parameter: "moo" - parameter: "5" gx_int_required_via_empty_string: <<: *gx_int_required gx_int_validation_range: request_valid: - parameter: 1 - parameter: 9 request_invalid: - parameter: {} - parameter: {__class__: 'ConnectedValue'} - parameter: -1 - parameter: 11 - parameter: 10 workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} gx_int_min_max: request_valid: - parameter: 1 - parameter: 9 - parameter: 10 request_invalid: - parameter: -1 - parameter: 11 workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: -1 gx_text_regex_validation: request_valid: - parameter: acgt - parameter: a - parameter: aaaggttac request_invalid: - parameter: acgu - parameter: nucleic workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} gx_text_expression_validation: request_valid: - parameter: the code was foobar - parameter: foobar request_invalid: - parameter: the code was not foo bar - parameter: '' workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: '' gx_text_empty_validation: request_valid: - parameter: foobar - {} request_invalid: - parameter: '' job_internal_valid: - parameter: foobar job_internal_invalid: - {} - parameter: '' job_runtime_valid: - parameter: foobar job_runtime_invalid: - {} - parameter: '' workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: '' gx_text: request_valid: &gx_text_request_valid - parameter: moocow - parameter: 'some spaces' - parameter: '' # The legacy API behavior is to make these non-null request parameters into implicit # "" values for text parameters. - {} - parameter: null request_invalid: &gx_text_request_invalid - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {__class__: 'ConnectedValue'} request_internal_valid: *gx_text_request_valid request_internal_invalid: *gx_text_request_invalid request_internal_dereferenced_valid: *gx_text_request_valid request_internal_dereferenced_invalid: *gx_text_request_invalid landing_request_valid: *gx_text_request_valid landing_request_invalid: *gx_text_request_invalid landing_request_internal_valid: *gx_text_request_valid landing_request_internal_invalid: *gx_text_request_invalid job_internal_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null job_internal_invalid: - {} - parameter: { "moo": "cow" } job_runtime_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null job_runtime_invalid: - {} - parameter: { "moo": "cow" } workflow_step_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} - parameter: null workflow_step_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} - parameter: {__class__: 'ConnectedValue'} - parameter: null workflow_step_linked_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {"class": 'ConnectedValue'} gx_text_optional: request_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null request_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } landing_request_valid: &gx_text_optional_landing_request_valid - parameter: "moo cow" - {} - parameter: null landing_request_invalid: &gx_text_optional_landing_request_invalid - parameter: 5 - parameter: 6 landing_request_internal_valid: *gx_text_optional_landing_request_valid landing_request_internal_invalid: *gx_text_optional_landing_request_invalid workflow_step_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null workflow_step_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } gx_text_optional_false: request_valid: - parameter: "mytext" # Should this be invalid? -John - {} request_invalid: - parameter: null relaxed_request_valid: - parameter: "mytext" - parameter: null - {} relaxed_request_invalid: - parameter: 5 gx_text_default: request_valid: &gx_text_default_request_valid - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} # these are implicitly null just like gx_text - parameter: null request_invalid: &gx_text_default_request_invalid - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {__class__: 'ConnectedValue'} request_internal_valid: *gx_text_default_request_valid request_internal_invalid: *gx_text_default_request_invalid request_internal_dereferenced_valid: *gx_text_default_request_valid request_internal_dereferenced_invalid: *gx_text_default_request_invalid landing_request_valid: *gx_text_default_request_valid landing_request_invalid: *gx_text_default_request_invalid landing_request_internal_valid: *gx_text_default_request_valid landing_request_internal_invalid: *gx_text_default_request_invalid job_internal_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null job_internal_invalid: - {} - parameter: { "moo": "cow" } job_runtime_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null job_runtime_invalid: - {} - parameter: { "moo": "cow" } workflow_step_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} - parameter: null workflow_step_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} - parameter: {__class__: 'ConnectedValue'} - parameter: null workflow_step_linked_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } - parameter: {"class": 'ConnectedValue'} gx_text_length_validation: request_valid: - parameter: "mytext" - parameter: "mytext123" request_invalid: - parameter: "s" # too short - parameter: "mytext1231231231sd" # too long gx_text_length_validation_negate: request_valid: - parameter: "m" - parameter: "mytext123mocowdowees" request_invalid: - parameter: "goldilocks" gx_select: request_valid: - parameter: "--ex1" - parameter: "ex2" # see API Tests -> test_tools.py -> test_select_first_by_default - {} request_invalid: # Not allowing selecting booleans by truevalue/falsevalue - don't allow selecting # selects by label. - parameter: "Ex1" # Do not allow lists for non-multi-selects - parameter: ["ex2"] - parameter: null - parameter: {} - parameter: 5 request_internal_valid: &gx_select_request_valid - parameter: "--ex1" - parameter: "ex2" request_internal_invalid: &gx_select_request_invalid - parameter: {} request_internal_dereferenced_valid: *gx_select_request_valid request_internal_dereferenced_invalid: *gx_select_request_invalid landing_request_valid: &gx_select_landing_request_valid - parameter: "--ex1" - parameter: "ex2" - {} landing_request_invalid: &gx_select_landing_request_invalid - parameter: 5 - parameter: null - parameter: "Ex1" landing_request_internal_valid: *gx_select_landing_request_valid landing_request_internal_invalid: *gx_select_landing_request_invalid job_internal_valid: - parameter: '--ex1' - parameter: 'ex2' job_internal_invalid: - {} job_runtime_valid: - parameter: '--ex1' - parameter: 'ex2' job_runtime_invalid: - {} test_case_xml_valid: - parameter: 'ex2' - parameter: '--ex1' - {} test_case_xml_invalid: - parameter: {} - parameter: null test_case_json_valid: - parameter: 'ex2' - parameter: '--ex1' - {} test_case_json_invalid: - parameter: {} - parameter: null workflow_step_valid: - parameter: "--ex1" - {} workflow_step_invalid: - parameter: 'foobar' - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: - parameter: "--ex1" - parameter: {__class__: 'ConnectedValue'} - {} workflow_step_linked_invalid: - parameter: 'foobar' - parameter: null gx_select_optional: request_valid: - parameter: "--ex1" - parameter: "ex2" - parameter: null - {} request_invalid: # Not allowing selecting booleans by truevalue/falsevalue - don't allow selecting # selects by label. - parameter: "Ex1" # Do not allow lists for non-multi-selects - parameter: ["ex2"] - parameter: {} - parameter: 5 landing_request_valid: &gx_select_optional_landing_request_valid - parameter: "--ex1" - parameter: "ex2" - parameter: null - {} landing_request_invalid: &gx_select_optional_landing_request_invalid - parameter: 5 - parameter: "Ex1" - parameter: {} landing_request_internal_valid: *gx_select_optional_landing_request_valid landing_request_internal_invalid: *gx_select_optional_landing_request_invalid job_internal_valid: - parameter: '--ex1' - parameter: 'ex2' - parameter: null job_internal_invalid: - parameter: 'invalid' - {} job_runtime_valid: - parameter: '--ex1' - parameter: 'ex2' - parameter: null job_runtime_invalid: - parameter: 'invalid' - {} test_case_xml_valid: - {} workflow_step_valid: - parameter: "--ex1" - parameter: "ex2" - parameter: null - {} workflow_step_invalid: - parameter: "Ex1" - parameter: ["ex2"] - parameter: {} - parameter: 5 - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: - parameter: "--ex1" - parameter: "ex2" - parameter: null - {} - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: "Ex1" - parameter: ["ex2"] - parameter: {} - parameter: 5 gx_select_multiple: request_valid: - parameter: ["--ex1"] - parameter: ["ex2"] # ugh... but these aren't optional... - parameter: null - {} request_invalid: - parameter: ["Ex1"] - parameter: {} - parameter: 5 landing_request_valid: &gx_select_multiple_landing_request_valid - parameter: ["--ex1"] - parameter: ["ex2"] - parameter: null - {} landing_request_invalid: &gx_select_multiple_landing_request_invalid - parameter: 5 - parameter: ["Ex1"] - parameter: {} - parameter: false landing_request_internal_valid: *gx_select_multiple_landing_request_valid landing_request_internal_invalid: *gx_select_multiple_landing_request_invalid workflow_step_valid: - parameter: ["--ex1"] - parameter: ["ex2"] - {} # could come in linked... # ... hmmm? this should maybe be invalid right? - parameter: null job_internal_valid: - parameter: ["--ex1"] # itd be coool if this was forced to empty list - probably breaks backward compat though... - parameter: null job_internal_invalid: - {} - parameter: "--ex1" job_runtime_valid: - parameter: ["--ex1"] - parameter: null job_runtime_invalid: - {} - parameter: "--ex1" workflow_step_invalid: - parameter: ["Ex1"] - parameter: {} - parameter: 5 - parameter: {__class__: 'ConnectedValue'} - parameter: [{__class__: 'ConnectedValue'}] test_case_xml_valid: # XML test cases use comma-separated strings for multiple values - parameter: "--ex1,ex2" - parameter: "--ex1" - parameter: ["--ex1"] test_case_xml_invalid: - parameter: {} test_case_json_valid: # JSON test cases accept lists directly (no string splitting) - parameter: ["--ex1"] - parameter: ["--ex1", "ex2"] test_case_json_invalid: - parameter: "--ex1" - parameter: {} workflow_step_linked_valid: - parameter: ["--ex1"] - parameter: ["ex2"] - parameter: [{__class__: 'ConnectedValue'}] - {} - parameter: null workflow_step_linked_invalid: - parameter: ["Ex1"] - parameter: {} - parameter: 5 # might be wrong? I guess we would expect the semantic of this to do like a map-over # but as far as I am aware that is not implemented https://github.com/galaxyproject/galaxy/issues/18541 - parameter: {__class__: 'ConnectedValue'} gx_select_multiple_optional: request_valid: - parameter: ["--ex1"] - parameter: ["ex2"] - {} - parameter: null request_invalid: - parameter: ["Ex1"] - parameter: {} - parameter: 5 gx_select_no_options_validation: job_internal_valid: - parameter: "--ex1" job_internal_invalid: - {} job_runtime_valid: - parameter: "--ex1" job_runtime_invalid: - {} gx_genomebuild: request_valid: - parameter: hg19 - parameter: hg18 # implicitly selects top option "?" - {} request_invalid: - parameter: null - parameter: 9 landing_request_valid: &gx_genomebuild_landing_request_valid - parameter: hg19 - parameter: hg18 - {} landing_request_invalid: &gx_genomebuild_landing_request_invalid - parameter: null - parameter: 9 landing_request_internal_valid: *gx_genomebuild_landing_request_valid landing_request_internal_invalid: *gx_genomebuild_landing_request_invalid job_internal_valid: - parameter: hg19 job_internal_invalid: - {} job_runtime_valid: - parameter: hg19 job_runtime_invalid: - {} gx_genomebuild_optional: request_valid: - parameter: hg19 - parameter: hg18 # these yield actual null parameters instead of ? - {} - parameter: null request_invalid: - parameter: 8 - parameter: true landing_request_valid: &gx_genomebuild_optional_landing_request_valid - parameter: hg19 - parameter: hg18 - {} - parameter: null landing_request_invalid: &gx_genomebuild_optional_landing_request_invalid - parameter: 9 landing_request_internal_valid: *gx_genomebuild_optional_landing_request_valid landing_request_internal_invalid: *gx_genomebuild_optional_landing_request_invalid job_internal_valid: - parameter: null job_internal_invalid: - {} job_runtime_valid: - parameter: null job_runtime_invalid: - {} gx_genomebuild_multiple: request_valid: - parameter: ["hg18", hg19"] # I don't love this but this is how the legacy API works and the tool parameters # wrappers work this way also. Not sure how I would change this. - parameter: null request_invalid: - parameter: 6 job_internal_valid: - parameter: ["hg18", hg19"] - parameter: null job_internal_invalid: - {} job_runtime_valid: - parameter: ["hg18", hg19"] - parameter: null job_runtime_invalid: - {} gx_directory_uri: request_valid: - parameter: "gxfiles://foobar/" - parameter: "gxfiles://foobar" request_invalid: - parameter: "justsomestring" - parameter: true - parameter: null landing_request_valid: &gx_directory_uri_landing_request_valid - parameter: "gxfiles://foobar/" - parameter: "gxfiles://foobar" - {} landing_request_invalid: &gx_directory_uri_landing_request_invalid - parameter: true - parameter: null - parameter: 8 landing_request_internal_valid: *gx_directory_uri_landing_request_valid landing_request_internal_invalid: *gx_directory_uri_landing_request_invalid job_internal_valid: - parameter: "gxfiles://foobar/" - parameter: "gxfiles://foobar" job_internal_invalid: - parameter: "justsomestring" - parameter: true - parameter: null job_runtime_valid: - parameter: "gxfiles://foobar/" - parameter: "gxfiles://foobar" job_runtime_invalid: - parameter: "justsomestring" - parameter: true - parameter: null gx_directory_uri_validation: request_valid: - parameter: "gxfiles://mycoolsource/api/index.json" request_invalid: - parameter: {__class__: 'ConnectedValue'} - parameter: "gxfiles://tooshort/index.json" - parameter: "gxfiles://mycoolsource/api/wrongex.js" - parameter: "gxfiles://mycoolsource/badexp.json" workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} - parameter: "gxfiles://mycoolsource/api/index.json" workflow_step_linked_invalid: - parameter: "gxfiles://tooshort/index.json" - parameter: "gxfiles://mycoolsource/api/wrongex.js" - parameter: "gxfiles://mycoolsource/badexp.json" gx_hidden: request_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' # it will use a default if value is set in definition and no value supplied (see hidden_param.xml) - {} request_invalid: - parameter: null - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } landing_request_valid: &gx_hidden_landing_request_valid - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} landing_request_invalid: &gx_hidden_landing_request_invalid - parameter: null - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } landing_request_internal_valid: *gx_hidden_landing_request_valid landing_request_internal_invalid: *gx_hidden_landing_request_invalid job_internal_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' job_internal_invalid: - {} job_runtime_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' job_runtime_invalid: - {} workflow_step_valid: - parameter: moocow - {} workflow_step_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } workflow_step_linked_valid: - parameter: moocow - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: 5 - parameter: null gx_hidden_optional: request_valid: - parameter: moocow - parameter: 'some spaces' - parameter: '' - parameter: null request_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } landing_request_valid: &gx_hidden_optional_landing_request_valid - parameter: moocow - parameter: 'some spaces' - parameter: '' - {} - parameter: null landing_request_invalid: &gx_hidden_optional_landing_request_invalid - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } landing_request_internal_valid: *gx_hidden_optional_landing_request_valid landing_request_internal_invalid: *gx_hidden_optional_landing_request_invalid workflow_step_valid: - parameter: moocow - {} - parameter: null workflow_step_invalid: - parameter: 5 - parameter: {} - parameter: { "moo": "cow" } workflow_step_linked_valid: - parameter: moocow - parameter: {__class__: 'ConnectedValue'} - parameter: null workflow_step_linked_invalid: - parameter: 5 gx_hidden_validation: request_valid: - parameter: "http://mycoolservice.com/api/index.json" request_invalid: - parameter: {__class__: 'ConnectedValue'} - parameter: "http://mycoolservice.com/index.json" - parameter: "http://mycoolservice.com/api/wrongex.js" - parameter: "http://mycoolservice.com/badexp.json" workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} - parameter: "http://mycoolservice.com/api/index.json" workflow_step_linked_invalid: - parameter: "http://mycoolservice.com/index.json" - parameter: "http://mycoolservice.com/api/wrongex.js" - parameter: "http://mycoolservice.com/badexp.json" gx_float: request_valid: - parameter: 5 - parameter: 5.0 - parameter: 5.0001 # galaxy parameters created with a value - so doesn't need to appear in request even though non-optional - {} request_invalid: - parameter: null - parameter: "5" - parameter: "5.0" - parameter: { "moo": "cow" } job_internal_valid: - parameter: 5 - parameter: 5.0 job_internal_invalid: - {} - parameter: "5" - parameter: "5.0" - parameter: null job_runtime_valid: - parameter: 5 - parameter: 5.0 job_runtime_invalid: - {} - parameter: "5" - parameter: "5.0" - parameter: null landing_request_valid: - {} - parameter: 5 - parameter: 5.0 landing_request_invalid: - parameter: "moo" - parameter: "5" - parameter: "5.0" landing_request_internal_valid: - {} - parameter: 5 - parameter: 5.0 landing_request_internal_invalid: - parameter: "moo" - parameter: "5" - parameter: "5.0" test_case_xml_valid: - parameter: 5 - parameter: 5.0 - {} test_case_xml_invalid: - parameter: null - parameter: "5.0" - parameter: "5.1" workflow_step_valid: - parameter: 5 - parameter: 5.0 - {} workflow_step_invalid: - parameterx: 5 - parameter: 'foobar' workflow_step_linked_valid: - parameter: 5 - parameter: 5.4 - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: null - parameter: 'foobar' - parameter: {__class__: 'ConnectedValue2'} gx_float_optional: request_valid: - parameter: 5 - parameter: 5.0 - parameter: 5.0001 - parameter: null - {} request_invalid: - parameter: "5" - parameter: "5.0" - parameter: {} - parameter: { "moo": "cow" } job_internal_valid: - parameter: 5 - parameter: 5.0 - parameter: null job_internal_invalid: - {} - parameter: "5" - parameter: "5.0" job_runtime_valid: - parameter: 5 - parameter: 5.0 - parameter: null job_runtime_invalid: - {} - parameter: "5" - parameter: "5.0" landing_request_valid: - {} - parameter: 5 - parameter: 5.0 - parameter: null landing_request_invalid: - parameter: "moo" - parameter: "5" - parameter: "5.0" landing_request_internal_valid: - {} - parameter: 5 - parameter: 5.0 - parameter: null landing_request_internal_invalid: - parameter: "moo" - parameter: "5" - parameter: "5.0" test_case_xml_valid: - parameter: 5 - parameter: 5.0 - {} - parameter: null test_case_xml_invalid: - parameter: "5.0" - parameter: "5.1" workflow_step_valid: - parameter: 5 - parameter: 5.0 - {} workflow_step_invalid: - parameterx: 5 - parameter: 'foobar' workflow_step_linked_valid: - parameter: 5 - parameter: 5.4 - parameter: {__class__: 'ConnectedValue'} - parameter: null workflow_step_linked_invalid: - parameter: 'foobar' - parameter: {__class__: 'ConnectedValue2'} gx_float_validation_range: request_valid: - parameter: 0.1 - parameter: 9.7 - parameter: 5 request_invalid: - parameter: 10 - parameter: 0 - parameter: 9.8 # endpoint not included because specified in validator gx_float_min_max: request_valid: - parameter: 0.1 - parameter: 9.7 - parameter: 5 - parameter: 9.8 # endpoint implicitly included when max attribute set on param request_invalid: - parameter: 10 - parameter: 0 gx_color: request_valid: - parameter: '#aabbcc' - parameter: '#000000' request_invalid: - parameter: null - parameter: {} - parameter: '#abcd' workflow_step_valid: - parameter: '#aabbcc' - parameter: '#000000' - {} workflow_step_invalid: - parameterx: '#aabbcc' - parameter: 'foobar' - parameter: 5 workflow_step_linked_valid: - parameter: '#aabbcc' - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - parameter: null - parameter: 'foobar' - parameter: 5 - parameter: {__class__: 'ConnectedValue2'} gx_data: request_valid: - parameter: {src: hda, id: abcdabcd} - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", "ext": "txt"} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd}]} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd, map_over_type: paired}]} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd, map_over_type: "list:paired"}]} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd, map_over_type: null}]} - parameter: {__class__: "Batch", values: [{src: dce, id: abcdabcd}]} - parameter: {__class__: "Batch", values: [{src: dce, id: abcdabcd, map_over_type: paired}]} - parameter: {__class__: "Batch", values: [{src: dce, id: abcdabcd, map_over_type: null}]} request_invalid: - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} # map_over_type only valid on hdca/dce, not hda/ldda - parameter: {__class__: "Batch", values: [{src: hda, id: abcdabcd, map_over_type: paired}]} - parameter: {src: dce, id: abcdabcd} - parameter: {src: hda, id: 7} - parameter: {src: hdca, id: abcdabcd} - parameter: null - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" request_internal_valid: - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5, map_over_type: paired}]} - parameter: {__class__: "Batch", values: [{src: dce, id: 5}]} - parameter: {__class__: "Batch", values: [{src: dce, id: 5, map_over_type: paired}]} - parameter: {src: hda, id: 5} - parameter: {src: hda, id: 0} - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} request_internal_invalid: - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd}]} # map_over_type only valid on hdca/dce, not hda/ldda - parameter: {__class__: "Batch", values: [{src: hda, id: 5, map_over_type: paired}]} - parameter: {src: hda, id: abcdabcd} - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" request_internal_dereferenced_valid: - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5, map_over_type: paired}]} - parameter: {__class__: "Batch", values: [{src: dce, id: 5}]} - parameter: {__class__: "Batch", values: [{src: dce, id: 5, map_over_type: paired}]} - parameter: {src: hda, id: 5} - parameter: {src: hda, id: 0} request_internal_dereferenced_invalid: # the difference between request internal and request internal dereferenced is that these have been converted # to datasets. - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} landing_request_valid: - parameter: {src: hda, id: abcdabcd} - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", "ext": "txt"} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd}]} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd, map_over_type: paired}]} - {} - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", "ext": "txt"} landing_request_invalid: - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {src: hda, id: 5} - parameter: {src: hda, id: 0} landing_request_internal_valid: - parameter: {src: hda, id: 5} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - {} - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", "ext": "txt"} landing_request_internal_invalid: - parameter: {src: hda, id: abcdabcd} - parameter: {__class__: "Batch", values: [{src: hdca, id: abcdabcd}]} job_internal_valid: - parameter: {src: hda, id: 7} # subcollection mapping expansion produces DCE refs via to_decoded_json - parameter: {src: dce, id: 5} job_internal_invalid: # valid request but after the job has been created, map/reduce concepts should have been # expanded out. - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {src: hda, id: abcdabcd} # DCE with encoded string ID should fail - parameter: {src: dce, id: abcdabcd} # url parameters should be dereferrenced into datasets by this point... - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", "ext": "txt"} - {} job_runtime_valid: - parameter: {class: File, basename: "f.txt", location: "step_input://0", path: "/tmp/f.txt", nameroot: "f", nameext: ".txt", format: "txt", size: 100} # DCE resolved to File preserves element_identifier for output naming - parameter: {class: File, basename: "f.txt", location: "step_input://0", path: "/tmp/f.txt", nameroot: "f", nameext: ".txt", format: "txt", size: 100, element_identifier: "test0"} job_runtime_invalid: - parameter: {src: hda, id: 7} - parameter: null - {} - parameter: {class: File} test_case_xml_valid: - parameter: {class: File, path: foo.bed} - parameter: {class: File, location: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt"} test_case_xml_invalid: - parameter: foo.bed - parameter: null - {} test_case_json_valid: - parameter: {class: File, path: foo.bed} - parameter: {class: File, location: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt"} test_case_json_invalid: - parameter: foo.bed - parameter: null - {} workflow_step_valid: - {} workflow_step_invalid: - {src: hda, id: abcdabcd} - {src: hda, id: 7} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - {} - {src: hda, id: abcdabcd} - {src: hda, id: 7} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {__class__: 'ConnectedValueX'} gx_data_optional: request_valid: &data_optional_request_valid - parameter: {src: hda, id: abcdabcd} - parameter: null - {} request_invalid: &data_optional_request_invalid - parameter: {src: hda, id: 5} - parameter: {src: hdca, id: abcdabcd} - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - parameter: true - parameter: 5 - parameter: "5" request_internal_valid: &data_optional_request_internal_valid - parameter: {src: hda, id: 5} - parameter: null - {} request_internal_invalid: &data_optional_request_internal_invalid - parameter: {src: hda, id: abcdabcd} - parameter: {src: hdca, id: abcdabcd} - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - parameter: true - parameter: 5 - parameter: "5" job_internal_valid: &data_optional_job_internal_valid - parameter: null - parameter: {src: hda, id: 5} job_internal_invalid: &data_optional_job_internal_invalid - {} job_runtime_valid: - parameter: {class: File, basename: "f.txt", location: "step_input://0", path: "/tmp/f.txt", nameroot: "f", nameext: ".txt", format: "txt", size: 100} - parameter: null job_runtime_invalid: - parameter: {src: hda, id: 7} - parameter: {class: File} - {} workflow_step_valid: &data_optional_workflow_step_valid - {} workflow_step_invalid: &data_optional_workflow_step_invalid - {src: hda, id: abcdabcd} - {src: hda, id: 7} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_valid: &data_optional_workflow_step_linked_valid - {} - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: &data_optional_workflow_step_linked_invalid - {src: hda, id: abcdabcd} - {src: hda, id: 7} - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: {__class__: 'ConnectedValueX'} test_case_xml_valid: &data_optional_test_case_xml_valid - {} - parameter: {class: "File", path: "1.bed"} test_case_xml_invalid: &data_optional_test_case_xml_invalid - parameter: {class: "NotAFile", path: "1.bed"} gx_hidden_data: request_valid: *data_optional_request_valid request_invalid: *data_optional_request_invalid request_internal_valid: *data_optional_request_internal_valid request_internal_invalid: *data_optional_request_internal_invalid job_internal_valid: *data_optional_job_internal_valid job_internal_invalid: *data_optional_job_internal_invalid workflow_step_valid: *data_optional_workflow_step_valid workflow_step_invalid: *data_optional_workflow_step_invalid workflow_step_linked_valid: *data_optional_workflow_step_linked_valid workflow_step_linked_invalid: *data_optional_workflow_step_linked_invalid test_case_xml_valid: *data_optional_test_case_xml_valid test_case_xml_invalid: *data_optional_test_case_xml_invalid gx_data_multiple: request_valid: - parameter: {src: hda, id: abcdabcd} - parameter: {src: hdca, id: abcdabcd} - parameter: [{src: hda, id: abcdabcd}] - parameter: [{src: hdca, id: abcdabcd}] - parameter: [{src: hdca, id: abcdabcd}, {src: hda, id: abcdabcd}] request_invalid: - parameter: {src: hda, id: 5} - parameter: [{src: hdca, id: 5}, {src: hda, id: 5}] - parameter: null - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" request_internal_valid: - parameter: {src: hda, id: 5} - parameter: {src: hdca, id: 5} - parameter: [{src: hda, id: 5}] - parameter: [{src: hdca, id: 5}] - parameter: [{src: hdca, id: 5}, {src: hda, id: 5}] - parameter: [{src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"}] - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} request_internal_invalid: - parameter: {src: hda, id: abcdabcd} - parameter: [{src: hdca, id: abcdabcd}, {src: hda, id: abcdabcd}] - parameter: null - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" request_internal_dereferenced_valid: - parameter: {__class__: "Batch", values: [{src: hdca, id: 5}]} - parameter: [{src: hda, id: 5}] - parameter: [{src: hda, id: 0}] request_internal_dereferenced_invalid: # the difference between request internal and request internal dereferenced is that these have been converted # to datasets. - parameter: [{src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"}] landing_request_valid: - parameter: [{src: hda, id: abcdabcd}] - {} landing_request_invalid: - parameter: [{src: hda, id: 6}] landing_request_internal_valid: - parameter: [{src: hda, id: 6}] - {} landing_request_internal_invalid: - parameter: [{src: hda, id: abcdabcd}] job_internal_valid: - parameter: {src: hda, id: 5} - parameter: [{src: hda, id: 5}, {src: hda, id: 6}] job_internal_invalid: - {} job_runtime_valid: - parameter: - {class: File, basename: "f1.txt", location: "step_input://0", path: "/tmp/f1.txt", nameroot: "f1", nameext: ".txt", format: "txt", size: 100} - parameter: - {class: File, basename: "f1.txt", location: "step_input://0", path: "/tmp/f1.txt", nameroot: "f1", nameext: ".txt", format: "txt", size: 100} - {class: File, basename: "f2.txt", location: "step_input://1", path: "/tmp/f2.txt", nameroot: "f2", nameext: ".txt", format: "txt", size: 200} job_runtime_invalid: - parameter: {src: hda, id: 5} - parameter: null - {} gx_data_multiple_optional: request_valid: - parameter: {src: hda, id: abcdabcd} - parameter: {src: hdca, id: abcdabcd} - parameter: [{src: hda, id: abcdabcd}] - parameter: [{src: hdca, id: abcdabcd}] - parameter: [{src: hdca, id: abcdabcd}, {src: hda, id: abcdabcd}] - parameter: null - {} - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} - parameter: [{src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"}] request_invalid: - parameter: {src: hda, id: 5} - parameter: {} - parameter: true - parameter: 5 - parameter: "5" request_internal_valid: - parameter: {src: hda, id: 5} - parameter: {src: hdca, id: 5} - parameter: [{src: hda, id: 5}] - parameter: [{src: hdca, id: 5}] - parameter: [{src: hdca, id: 5}, {src: hda, id: 5}] - parameter: null - {} - parameter: [{src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"}] request_internal_invalid: - parameter: {src: hda, id: abcdabcd} - parameter: {} - parameter: true - parameter: 5 - parameter: "5" request_internal_dereferenced_valid: - parameter: {src: hda, id: 5} request_internal_dereferenced_invalid: - parameter: {src: hda, id: abcdabcd} - parameter: [{src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"}] - parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} job_internal_valid: - parameter: {src: hda, id: 5} - parameter: [{src: hda, id: 5}, {src: hda, id: 6}] - parameter: null job_internal_invalid: - {} job_runtime_valid: - parameter: - {class: File, basename: "f1.txt", location: "step_input://0", path: "/tmp/f1.txt", nameroot: "f1", nameext: ".txt", format: "txt", size: 100} - parameter: null job_runtime_invalid: - parameter: {src: hda, id: 5} - {} gx_data_collection: request_valid: - parameter: {src: hdca, id: abcdabcd} - parameter: {class: "Collection", collection_type: "list", elements: []} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" - parameter: {class: "CollectionX", collection_type: "list", elements: []} request_internal_valid: - parameter: {src: hdca, id: 5} - parameter: {class: "Collection", collection_type: "list", elements: []} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" - parameter: {class: "CollectionX", collection_type: "list", elements: []} request_internal_dereferenced_valid: - parameter: {src: hdca, id: 5} request_internal_dereferenced_invalid: - parameter: {src: hdca, id: abcdabcd} # At thsi point the collection should have been dereferenced into datasets, # so we don't allow these json collection representations anymore - must have # an ID. - parameter: {class: "Collection", collection_type: "list", elements: []} landing_request_valid: - parameter: {src: hdca, id: abcdabcd} - {} landing_request_invalid: - parameter: {src: hdca, id: 5} - parameter: [{src: hdca, id: abcdabcd}] landing_request_internal_valid: - parameter: {src: hdca, id: 5} - {} landing_request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: [{src: hdca, id: abcdabcd}] workflow_step_valid: - {} workflow_step_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: 5 - parameter: {} workflow_step_linked_valid: - parameter: {__class__: 'ConnectedValue'} workflow_step_linked_invalid: - {} test_case_xml_valid: - parameter: {class: Collection, collection_type: list, elements: []} - parameter: class: Collection collection_type: list elements: - {identifier: "first", path: "1.bed", class: File} - {identifier: "second", path: "2.bed", class: File} - parameter: name: "A nested listed with a name" class: Collection collection_type: "list:paired" elements: - class: Collection collection_type: paired identifier: first_el elements: - {identifier: "forward", path: "1_f.bed", class: File} - {identifier: "reverse", path: "1_r.bed", class: File} test_case_xml_invalid: # collection type is required - parameter: {class: Collection, elements: []} - parameter: class: Collection collection_type: list elements: - {identifier: "first", path: "1.bed", class: NotAFile} - parameter: class: Collection collection_type: list elements: - {identifier: "first", pathmisspelled: "1.bed", class: File} - parameter: name: "A nested listed with a name" class: Collection collection_type: "list:paired" elements: - class: Collection collection_type: paired identifier: first_el elements: - {identifier: "forward", path: "1_f.bed", class: File} - {identifier: "reverse", path: "1_r.bed", class: FileX} test_case_json_valid: - parameter: {class: Collection, collection_type: list, elements: []} - parameter: class: Collection collection_type: list elements: - {identifier: "first", path: "1.bed", class: File} - {identifier: "second", path: "2.bed", class: File} test_case_json_invalid: # collection type is required - parameter: {class: Collection, elements: []} job_internal_valid: - parameter: {src: hdca, id: 5} - parameter: {src: dce, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: {src: dce, id: abcdabcd} - parameter: null - {} job_runtime_valid: - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 - parameter: class: Collection name: test_paired collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} - parameter: null gx_data_collection_optional: request_valid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} request_invalid: - parameter: {src: hdca, id: 7} - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: true - parameter: 5 - parameter: "5" - parameter: {} request_internal_valid: - parameter: {src: hdca, id: 5} - parameter: null - {} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: true - parameter: 5 - parameter: "5" - parameter: {} landing_request_valid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} landing_request_invalid: - parameter: {src: hdca, id: 5} - parameter: [{src: hdca, id: abcdabcd}] landing_request_internal_valid: - parameter: {src: hdca, id: 5} - parameter: null - {} landing_request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: [{src: hdca, id: abcdabcd}] job_internal_valid: - parameter: {src: hdca, id: 5} - parameter: null job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 - parameter: null job_runtime_invalid: - parameter: {src: hdca, id: 5} - parameter: {class: Collection} - {} gx_conditional_boolean: request_valid: - conditional_parameter: test_parameter: true integer_parameter: 1 - conditional_parameter: test_parameter: true integer_parameter: 2 - conditional_parameter: test_parameter: false boolean_parameter: true # Test parameter has default and so does it "case" - so this should be fine - {} # The boolean_parameter is optional so just setting a test_parameter is fine - conditional_parameter: test_parameter: true - conditional_parameter: test_parameter: false # if test parameter is missing, it should be false in this case (TODO: test inverse) # so boolean_parameter or either type or missing should be fine. - conditional_parameter: boolean_parameter: true - conditional_parameter: boolean_parameter: false - conditional_parameter: {} request_invalid: - conditional_parameter: test_parameter: false integer_parameter: 1 - conditional_parameter: test_parameter: null - conditional_parameter: test_parameter: true integer_parameter: "1" - conditional_parameter: test_parameter: true integer_parameter: null # if test parameter is missing, it should be false in this case # in that case having an integer_parameter is not acceptable. - conditional_parameter: integer_parameter: 5 landing_request_valid: &gx_conditional_boolean_landing_request_valid - {} landing_request_invalid: &gx_conditional_boolean_landing_request_invalid - conditional_parameter: test_parameter: false integer_parameter: 1 landing_request_internal_valid: *gx_conditional_boolean_landing_request_valid landing_request_internal_invalid: *gx_conditional_boolean_landing_request_invalid job_internal_valid: - conditional_parameter: test_parameter: true integer_parameter: 1 - conditional_parameter: test_parameter: false boolean_parameter: false job_internal_invalid: # missing defaults are fine in request, but job_internal records parameters used, # must include defaults. - {} - conditional_parameter: {} - conditional_parameter: test_parameter: true - conditional_parameter: boolean_parameter: true job_runtime_valid: - conditional_parameter: test_parameter: true integer_parameter: 1 - conditional_parameter: test_parameter: false boolean_parameter: false job_runtime_invalid: - {} - conditional_parameter: {} - conditional_parameter: test_parameter: true - conditional_parameter: boolean_parameter: true gx_conditional_boolean_checked: request_valid: # if no test parameter is defined, the default is 'checked' so the test # parameter is true. - conditional_parameter: integer_parameter: 5 - conditional_parameter: integer_parameter: 0 request_invalid: # if test parameter is missing, it should be true (it is 'checked') in this case # in that case having a boolean_parameter is not acceptable. - conditional_parameter: boolean_parameter: false job_internal_invalid: - conditional_parameter: {} - {} gx_conditional_conditional_boolean: request_valid: - outer_conditional_parameter: outer_test_parameter: false boolean_parameter: true - outer_conditional_parameter: outer_test_parameter: true inner_conditional_parameter: inner_test_parameter: true integer_parameter: 5 - outer_conditional_parameter: outer_test_parameter: true inner_conditional_parameter: inner_test_parameter: false boolean_parameter: true # Test parameter has default and so does it "case" - so this should be fine - {} - outer_conditional_parameter: {} - outer_conditional_parameter: outer_test_parameter: true inner_conditional_parameter: {} - outer_conditional_parameter: outer_test_parameter: true request_invalid: - outer_conditional_parameter: outer_test_parameter: true boolean_parameter: true - outer_conditional_parameter: outer_test_parameter: true inner_conditional_parameter: inner_test_parameter: false integer_parameter: 5 - outer_conditional_parameter: outer_test_parameter: true inner_conditional_parameter: inner_test_parameter: true integer_parameter: true job_internal_invalid: - {} - outer_conditional_parameter: {} - outer_conditional_parameter: {} - outer_conditional_parameter: outer_test_parameter: true inner_conditional_parameter: {} - outer_conditional_parameter: outer_test_parameter: true gx_conditional_select: request_valid: - conditional_parameter: test_parameter: a integer_parameter: 1 - conditional_parameter: test_parameter: a integer_parameter: 2 - conditional_parameter: test_parameter: b boolean_parameter: true # Test parameter has default and so does it "case" - so this should be fine - {} # # The select is optional so just setting a test_parameter is fine - conditional_parameter: integer_parameter: 1 request_invalid: - conditional_parameter: test_parameter: b integer_parameter: 1 - conditional_parameter: test_parameter: null - conditional_parameter: test_parameter: a integer_parameter: "1" - conditional_parameter: test_parameter: b integer_parameter: null # if test parameter is missing, it should be false in this case # in that case having an integer_parameter is not acceptable. - conditional_parameter: boolean_parameter: true job_internal_valid: - conditional_parameter: test_parameter: a integer_parameter: 1 - conditional_parameter: test_parameter: b boolean_parameter: true job_internal_invalid: - {} - conditional_parameter: integer_parameter: 1 - conditional_parameter: null - conditional_parameter: {} job_runtime_valid: - conditional_parameter: test_parameter: a integer_parameter: 1 - conditional_parameter: test_parameter: b boolean_parameter: true job_runtime_invalid: - {} - conditional_parameter: integer_parameter: 1 - conditional_parameter: null - conditional_parameter: {} gx_repeat_boolean: request_valid: - parameter: - { boolean_parameter: true } - parameter: [] - parameter: - { boolean_parameter: true } - { boolean_parameter: false } - parameter: [{}] - parameter: [{}, {}] request_invalid: - parameter: - { boolean_parameter: 4 } - parameter: - { foo: 4 } - parameter: - { boolean_parameter: true } - { boolean_parameter: false } - { boolean_parameter: 4 } - parameter: 5 landing_request_valid: &gx_repeat_boolean_landing_request_valid - {} - parameter: - { boolean_parameter: true } - { boolean_parameter: false } - parameter: [{}] - parameter: [{}, {}] landing_request_invalid: &gx_repeat_boolean_landing_request_invalid - parameter: - { boolean_parameter: 4 } landing_request_internal_valid: *gx_repeat_boolean_landing_request_valid landing_request_internal_invalid: *gx_repeat_boolean_landing_request_invalid job_internal_valid: - parameter: - { boolean_parameter: true } - parameter: [] - parameter: - { boolean_parameter: true } - { boolean_parameter: false } job_internal_invalid: - parameter: [{}] - parameter: [{}, {}] job_runtime_valid: - parameter: - { boolean_parameter: true } - parameter: [] - parameter: - { boolean_parameter: true } - { boolean_parameter: false } job_runtime_invalid: - parameter: [{}] - parameter: [{}, {}] gx_repeat_boolean_min: request_valid: - parameter: - { boolean_parameter: true } - { boolean_parameter: false } - parameter: [{}, {}] # even though a minimum is set here - each instance of the repeat does not require a value # so we can skip the repeat all together and Galaxy I think will just use the defaults at # each stage - see API tests -> test_tool_execute.py -> test_optional_repeats_with_mins_filled_id - {} request_invalid: - parameter: [] - parameter: [{}] - parameter: - { boolean_parameter: true } - parameter: - { boolean_parameter: 4 } - parameter: - { foo: 4 } - parameter: - { boolean_parameter: true } - { boolean_parameter: false } - { boolean_parameter: 4 } - parameter: 5 job_internal_valid: - parameter: - { boolean_parameter: true } - { boolean_parameter: false } job_internal_invalid: - parameter: [{}, {}] - parameter: [] job_runtime_valid: - parameter: - { boolean_parameter: true } - { boolean_parameter: false } job_runtime_invalid: - parameter: [{}, {}] - parameter: [] test_case_xml_valid: - {} gx_repeat_data: request_valid: - parameter: - { data_parameter: {src: hda, id: abcdabcd} } - { data_parameter: {src: hda, id: abcdabcd} } - parameter: [] - parameter: - { data_parameter: {src: hda, id: abcdabcd} } # an empty repeat is fine - {} - parameter: - { data_parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} } request_invalid: - parameter: [{}, {}] - parameter: [{}] - parameter: 5 request_internal_valid: - parameter: - { data_parameter: { src: hda, id: 5 } } - parameter: - { data_parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} } request_internal_invalid: - parameter: - { data_parameter: { src: hda, id: abcdabcd } } landing_request_valid: &gx_repeat_data_landing_request_valid - {} # unlike above - in landing mode all parameters are optional so it is find to have an unset data parameters - parameter: [{}] landing_request_invalid: &gx_repeat_data_landing_request_invalid - parameter: 5 landing_request_internal_valid: *gx_repeat_data_landing_request_valid landing_request_internal_invalid: *gx_repeat_data_landing_request_invalid job_internal_valid: - parameter: - { data_parameter: { src: hda, id: 5 } } job_internal_invalid: - parameter: null - parameter: {} - parameter: - { data_parameter: {src: url, url: "https://raw.githubusercontent.com/galaxyproject/planemo/7be1bf5b3971a43eaa73f483125bfb8cabf1c440/tests/data/hello.txt", ext: "txt"} } gx_repeat_data_min: request_valid: - parameter: - { data_parameter: {src: hda, id: abcdabcd} } - { data_parameter: {src: hda, id: abcdabcd} } request_invalid: # data isn't optional and so we need at least one list element - {} - parameter: [] - parameter: - { data_parameter: {src: hda, id: abcdabcd} } - parameter: [{}, {}] - parameter: [{}] - parameter: 5 landing_request_valid: - {} # ignore the min here - can just specify the first set of parameters and I think that should work - parameter: - { data_parameter: {src: hda, id: abcdabcd} } landing_request_invalid: - parameter: - { data_parameter: {src: hda, id: 5} } landing_request_internal_valid: - {} # ignore the min here - can just specify the first set of parameters and I think that should work - parameter: - { data_parameter: {src: hda, id: 5} } landing_request_internal_invalid: - parameter: - { data_parameter: {src: hda, id: abcdabcd} } request_internal_valid: - parameter: - { data_parameter: { src: hda, id: 5 } } - { data_parameter: { src: hda, id: 5 } } request_internal_invalid: - parameter: - { data_parameter: { src: hda, id: abcdabcd } } - parameter: - { data_parameter: { src: hda, id: 5 } } job_internal_valid: - parameter: - { data_parameter: { src: hda, id: 5 } } - { data_parameter: { src: hda, id: 6 } } job_internal_invalid: - parameter: - { data_parameter: { src: hda, id: 5 } } - parameter: - {} - parameter: {} gx_section_boolean: request_valid: - parameter: { boolean_parameter: true } # booleans are optional in requests, so this should be fine? - {} request_invalid: - parameter: { boolean_parameter: 4 } job_internal_valid: - parameter: { boolean_parameter: true } job_internal_invalid: - {} - parameter: { boolean_parameter: 4 } job_runtime_valid: - parameter: { boolean_parameter: true } job_runtime_invalid: - {} - parameter: { boolean_parameter: 4 } gx_section_data: request_valid: - parameter: { data_parameter: { src: hda, id: abcdabcd } } request_invalid: - parameter: { data_parameter: 4 } - parameter: { data_parameter: { src: hda, id: 5 } } - {} request_internal_valid: - parameter: { data_parameter: { src: hda, id: 5 } } request_internal_invalid: - parameter: { data_parameter: { src: hda, id: abcdabcd } } - {} job_internal_valid: - parameter: { data_parameter: { src: hda, id: 5 } } job_internal_invalid: - {} gx_drill_down_exact: request_valid: - parameter: aa - parameter: bbb - parameter: ba # non-leaf nodes seem to be selectable in exact mode - parameter: a request_invalid: - parameter: c - parameter: {} # no implicit default currently - see test_drill_down_first_by_default in API test test_tools.py. - {} - parameter: null job_internal_valid: - parameter: aa job_internal_invalid: - parameter: c - {} job_runtime_valid: - parameter: aa job_runtime_invalid: - parameter: c - {} gx_drill_down_exact_with_selection: request_valid: - parameter: aa - parameter: bbb - parameter: ba # non-leaf nodes seem to be selectable in exact mode - parameter: a request_invalid: - parameter: c # see note above no implicit selection - parameter: {} - parameter: null job_internal_valid: - parameter: aa job_internal_invalid: - parameter: c - parameter: null - {} job_runtime_valid: - parameter: aa job_runtime_invalid: - parameter: c - parameter: null - {} gx_drill_down_recurse: request_valid: - parameter: bba request_invalid: - parameter: a - parameter: c gx_drill_down_recurse_multiple: request_valid: - parameter: [bba] - parameter: [a] request_invalid: - parameter: c gx_data_column: request_valid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: 0 } request_invalid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: "0" } - { ref_parameter: {src: hda, id: abcdabcd}, parameter: [ 0 ] } request_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: 0 } request_internal_invalid: - { ref_parameter: {src: hda, id: 123}, parameter: "0" } job_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: 0 } job_internal_invalid: - { ref_parameter: {src: hda, id: 123} } - { } test_case_xml_valid: - { ref_parameter: {class: "File", path: "1.bed"}, parameter: 3 } test_case_xml_invalid: - { ref_parameter: {class: "File", path: "1.bed"}, parameter: "3" } - { ref_parameter: {class: "File", path: "1.bed"}, parameter: "c2: With name" } test_case_json_valid: - { ref_parameter: {class: "File", path: "1.bed"}, parameter: 3 } test_case_json_invalid: - { ref_parameter: {class: "File", path: "1.bed"}, parameter: "3" } gx_data_column_optional: request_valid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: 0 } - { ref_parameter: {src: hda, id: abcdabcd} } - { ref_parameter: {src: hda, id: abcdabcd}, parameter: null } request_invalid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: "0" } - { ref_parameter: {src: hda, id: abcdabcd}, parameter: [ 0 ] } job_internal_valid: - { ref_parameter: {src: hda, id: 1}, parameter: 0 } - { ref_parameter: {src: hda, id: 1}, parameter: null } job_internal_invalid: - { ref_parameter: {src: hda, id: 1} } - { } - { ref_parameter: {src: hda, id: 1}, parameter: "0" } request_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: 0 } request_internal_invalid: - { ref_parameter: {src: hda, id: 123}, parameter: "0" } gx_data_column_multiple: request_valid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: [0] } request_invalid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: "0" } - { ref_parameter: {src: hda, id: abcdabcd}, parameter: ["0"] } - { ref_parameter: {src: hda, id: abcdabcd} } request_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: [0] } job_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: [0] } job_internal_invalid: - { ref_parameter: {src: hda, id: 123}, parameter: ["0"] } - { ref_parameter: {src: hda, id: 123}, parameter: null } request_internal_invalid: - { ref_parameter: {src: hda, id: 123}, parameter: "0" } - { ref_parameter: {src: hda, id: 123}, parameter: 0 } test_case_xml_valid: # XML test cases use comma-separated strings for multiple column indices - { ref_parameter: {class: "File", path: "1.bed"}, parameter: "1,2,3" } test_case_json_valid: # JSON test cases accept lists directly (no string splitting) - { ref_parameter: {class: "File", path: "1.bed"}, parameter: [1, 2, 3] } test_case_json_invalid: - { ref_parameter: {class: "File", path: "1.bed"}, parameter: "1,2,3" } gx_data_column_multiple_accept_default: request_valid: - { ref_parameter: {src: hda, id: abcdabcd}, parameter: [0] } - { ref_parameter: {src: hda, id: abcdabcd} } request_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: [0] } job_internal_valid: - { ref_parameter: {src: hda, id: 123}, parameter: [0] } job_internal_invalid: - { ref_parameter: {src: hda, id: 123}, parameter: ["0"] } gx_group_tag: request_valid: - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 'type:matched' } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 'matched' } request_invalid: - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: null } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 7 } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: true } - { ref_parameter: { src: hdca, id: abcdabcd} } request_internal_valid: - { ref_parameter: {src: hdca, id: 123}, parameter: 'type: matched' } request_internal_invalid: - { ref_parameter: {src: hdca, id: 123}, parameter: null } gx_group_tag_optional: request_valid: - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 'type:matched' } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 'matched' } - { ref_parameter: { src: hdca, id: abcdabcd} } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: null } request_invalid: - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 7 } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: true } request_internal_valid: - { ref_parameter: {src: hdca, id: 123}, parameter: 'type: matched' } - { ref_parameter: {src: hdca, id: 123}, parameter: null } request_internal_invalid: - { ref_parameter: {src: hdca, id: 123}, parameter: 8 } job_internal_valid: - { ref_parameter: {src: hdca, id: 123}, parameter: null } - { ref_parameter: { src: hdca, id: 123}, parameter: "matched" } job_internal_invalid: - { ref_parameter: {src: hdca, id: 123} } gx_group_tag_multiple: request_valid: - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: ['type:matched'] } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: ['matched'] } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: ['matched'] } request_invalid: - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 'matched' } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: 7 } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: true } - { ref_parameter: { src: hdca, id: abcdabcd}, parameter: null } - { ref_parameter: { src: hdca, id: abcdabcd} } request_internal_valid: - { ref_parameter: {src: hdca, id: 123}, parameter: ['type: matched'] } request_internal_invalid: - { ref_parameter: {src: hdca, id: 123}, parameter: 8 } - { ref_parameter: {src: hdca, id: 123}, parameter: null } job_internal_valid: - { ref_parameter: { src: hdca, id: 123}, parameter: ['matched'] } job_internal_invalid: - { ref_parameter: { src: hdca, id: 123} } - { ref_parameter: { src: hdca, id: 123}, parameter: null } gx_data_collection_list: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Cross-type: paired-shaped data should be rejected by list type - parameter: class: Collection name: wrong_type collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=list but elements is object - parameter: class: Collection name: list_wrong_structure collection_type: list tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 gx_data_collection_paired: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: - parameter: class: Collection name: test_paired collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Cross-type: list-shaped data should be rejected by paired type - parameter: class: Collection name: wrong_type collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Missing reverse element - parameter: class: Collection name: incomplete_paired collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=paired but elements is array - parameter: class: Collection name: paired_wrong_structure collection_type: paired tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_or_paired_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # List collection is valid - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Paired collection is also valid - parameter: class: Collection name: test_paired collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Record collection type should be rejected (not list or paired) - parameter: class: Collection name: wrong_type collection_type: record tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=list but elements is object (paired structure) # With discriminated unions, this should be properly rejected - parameter: class: Collection name: list_wrong_structure collection_type: list tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=paired but elements is array (list structure) # With discriminated unions, this should be properly rejected - parameter: class: Collection name: paired_wrong_structure collection_type: paired tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_record_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: - parameter: class: Collection name: test_record collection_type: record tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 field2: class: File element_identifier: field2 basename: "f2.txt" location: "step_input://1" path: "/tmp/f2.txt" nameroot: "f2" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Cross-type: list-shaped data should be rejected by record type - parameter: class: Collection name: wrong_type collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=record but elements is array - parameter: class: Collection name: record_wrong_structure collection_type: record tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_sample_sheet_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Basic sample_sheet with column_definitions - parameter: class: Collection name: test_sample_sheet collection_type: sample_sheet tags: [] column_definitions: - {name: "condition", type: "str"} elements: - class: File element_identifier: sample1 columns: ["treatment"] basename: "s1.txt" location: "step_input://0" path: "/tmp/s1.txt" nameroot: "s1" nameext: ".txt" format: "txt" size: 100 - class: File element_identifier: sample2 columns: ["control"] basename: "s2.txt" location: "step_input://1" path: "/tmp/s2.txt" nameroot: "s2" nameext: ".txt" format: "txt" size: 100 # Multiple column types - parameter: class: Collection name: test_sample_sheet_multi collection_type: sample_sheet tags: [] column_definitions: - {name: "condition", type: "str"} - {name: "replicate", type: "int"} - {name: "concentration", type: "float"} elements: - class: File element_identifier: sample1 columns: ["treatment", 1, 0.5] basename: "s1.txt" location: "step_input://0" path: "/tmp/s1.txt" nameroot: "s1" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Cross-type: paired-shaped data should be rejected by sample_sheet type - parameter: class: Collection name: wrong_type collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=sample_sheet but elements is object - parameter: class: Collection name: sample_sheet_wrong_structure collection_type: sample_sheet tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 gx_data_collection_paired_or_unpaired_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Paired mode (forward/reverse) - parameter: class: Collection name: test_pou_paired collection_type: paired_or_unpaired tags: [] has_single_item: false elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Unpaired mode (single element) - parameter: class: Collection name: test_pou_unpaired collection_type: paired_or_unpaired tags: [] has_single_item: true elements: unpaired: class: File element_identifier: unpaired basename: "u.txt" location: "step_input://0" path: "/tmp/u.txt" nameroot: "u" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Cross-type: list-shaped data should be rejected - parameter: class: Collection name: wrong_type collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=paired_or_unpaired but elements is array - parameter: class: Collection name: pou_wrong_structure collection_type: paired_or_unpaired tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_paired_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Valid list:paired - array of paired collections - parameter: class: Collection name: test_list_paired collection_type: "list:paired" tags: [] elements: - class: Collection name: sample1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "s1_f.txt" location: "step_input://0" path: "/tmp/s1_f.txt" nameroot: "s1_f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "s1_r.txt" location: "step_input://1" path: "/tmp/s1_r.txt" nameroot: "s1_r" nameext: ".txt" format: "txt" size: 100 - class: Collection name: sample2 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "s2_f.txt" location: "step_input://2" path: "/tmp/s2_f.txt" nameroot: "s2_f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "s2_r.txt" location: "step_input://3" path: "/tmp/s2_r.txt" nameroot: "s2_r" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Wrong outer type: should be list:paired not just paired - parameter: class: Collection name: wrong_outer_type collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Wrong outer structure: list:paired but outer elements is object - parameter: class: Collection name: wrong_outer_structure collection_type: "list:paired" tags: [] elements: sample1: class: Collection name: sample1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Inner structure mismatch: inner collection_type=paired but inner elements is array - parameter: class: Collection name: inner_structure_mismatch collection_type: "list:paired" tags: [] elements: - class: Collection name: sample1 collection_type: paired tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Inner type mismatch: inner collection_type=list but should be paired - parameter: class: Collection name: wrong_inner_type collection_type: "list:paired" tags: [] elements: - class: Collection name: batch1 collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_list_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Valid list:list - array of list collections - parameter: class: Collection name: test_list_list collection_type: "list:list" tags: [] elements: - class: Collection name: batch1 collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "b1_f1.txt" location: "step_input://0" path: "/tmp/b1_f1.txt" nameroot: "b1_f1" nameext: ".txt" format: "txt" size: 100 - class: File element_identifier: f2 basename: "b1_f2.txt" location: "step_input://1" path: "/tmp/b1_f2.txt" nameroot: "b1_f2" nameext: ".txt" format: "txt" size: 100 - class: Collection name: batch2 collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "b2_f1.txt" location: "step_input://2" path: "/tmp/b2_f1.txt" nameroot: "b2_f1" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Wrong outer type: should be list:list not just list - parameter: class: Collection name: wrong_outer_type collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Inner structure mismatch: inner collection_type=list but inner elements is object - parameter: class: Collection name: inner_structure_mismatch collection_type: "list:list" tags: [] elements: - class: Collection name: batch1 collection_type: list tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Inner type mismatch: inner collection_type=paired but should be list - parameter: class: Collection name: wrong_inner_type collection_type: "list:list" tags: [] elements: - class: Collection name: batch1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_list_paired_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Valid list:list:paired - 3 levels deep - parameter: class: Collection name: test_list_list_paired collection_type: "list:list:paired" tags: [] elements: - class: Collection name: batch1 collection_type: "list:paired" tags: [] elements: - class: Collection name: sample1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "b1_s1_f.txt" location: "step_input://0" path: "/tmp/b1_s1_f.txt" nameroot: "b1_s1_f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "b1_s1_r.txt" location: "step_input://1" path: "/tmp/b1_s1_r.txt" nameroot: "b1_s1_r" nameext: ".txt" format: "txt" size: 100 - class: Collection name: sample2 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "b1_s2_f.txt" location: "step_input://2" path: "/tmp/b1_s2_f.txt" nameroot: "b1_s2_f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "b1_s2_r.txt" location: "step_input://3" path: "/tmp/b1_s2_r.txt" nameroot: "b1_s2_r" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Depth mismatch: inner is paired but should be list:paired - parameter: class: Collection name: depth_mismatch collection_type: "list:list:paired" tags: [] elements: - class: Collection name: batch1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Wrong inner type at depth: inner is list:list but should be list:paired - parameter: class: Collection name: wrong_inner_type_at_depth collection_type: "list:list:paired" tags: [] elements: - class: Collection name: batch1 collection_type: "list:list" tags: [] elements: - class: Collection name: inner1 collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_or_record_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # List collection is valid - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Record collection is also valid - parameter: class: Collection name: test_record collection_type: record tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 field2: class: File element_identifier: field2 basename: "f2.txt" location: "step_input://1" path: "/tmp/f2.txt" nameroot: "f2" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Paired collection type should be rejected (not list or record) - parameter: class: Collection name: wrong_type collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=list but elements is object - parameter: class: Collection name: list_wrong_structure collection_type: list tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=record but elements is array - parameter: class: Collection name: record_wrong_structure collection_type: record tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_paired_or_pou_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Paired collection is valid - parameter: class: Collection name: test_paired collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # paired_or_unpaired collection is also valid (paired mode) - parameter: class: Collection name: test_pou_paired collection_type: paired_or_unpaired tags: [] has_single_item: false elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # paired_or_unpaired collection is also valid (unpaired mode) - parameter: class: Collection name: test_pou_unpaired collection_type: paired_or_unpaired tags: [] has_single_item: true elements: unpaired: class: File element_identifier: unpaired basename: "u.txt" location: "step_input://0" path: "/tmp/u.txt" nameroot: "u" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # List collection type should be rejected (not paired or paired_or_unpaired) - parameter: class: Collection name: wrong_type collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # Structure mismatch: collection_type=paired but elements is array - parameter: class: Collection name: paired_wrong_structure collection_type: paired tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_paired_or_list_list_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # list:paired is accepted - parameter: class: Collection name: test_lp collection_type: "list:paired" tags: [] elements: - class: Collection name: p1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # list:list is also accepted - parameter: class: Collection name: test_ll collection_type: "list:list" tags: [] elements: - class: Collection name: inner1 collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Simple paired -- not in union (union is list:paired, list:list) - parameter: class: Collection name: wrong_type collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Simple list -- not in union (union is list:paired, list:list, not plain list) - parameter: class: Collection name: wrong_type_simple_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 gx_data_collection_list_or_list_paired_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # Simple list is accepted - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 # list:paired is also accepted - parameter: class: Collection name: test_lp collection_type: "list:paired" tags: [] elements: - class: Collection name: p1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} # Paired -- not in union (union is list, list:paired) - parameter: class: Collection name: wrong_type collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # Record -- not in union - parameter: class: Collection name: wrong_type_record collection_type: record tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 cwl_int: request_valid: - parameter: 5 request_invalid: - parameter: "5" - {} - parameter: null - parameter: "None" # TODO: Not a thing perhaps? # cwl_null: # request_valid: # - parameter: null # - {} # request_invalid: # - parameter: "5" # - parameter: 5 # - parameter: {} cwl_int_optional: request_valid: - parameter: 5 - parameter: null request_invalid: - parameter: "5" - {} - parameter: "None" cwl_float: request_valid: - parameter: 5 - parameter: 5.0 request_invalid: - parameter: null - parameter: "5" - {} - parameter: "None" cwl_float_optional: request_valid: - parameter: 5 - parameter: 5.0 - parameter: null request_invalid: - parameter: "5" - {} - parameter: "None" cwl_string: request_valid: - parameter: "moo" - parameter: "" request_invalid: - parameter: null - {} - parameter: 5 cwl_string_optional: request_valid: - parameter: "moo" - parameter: "" - parameter: null request_invalid: - {} - parameter: 5 cwl_boolean: request_valid: - parameter: true - parameter: false request_invalid: - parameter: null - {} - parameter: 5 - parameter: "true" - parameter: "True" cwl_boolean_optional: request_valid: - parameter: true - parameter: false - parameter: null request_invalid: - {} - parameter: 5 - parameter: "true" - parameter: "True" cwl_file: request_valid: - parameter: {src: hda, id: abcdabcd} request_invalid: - parameter: {src: hda, id: 7} - parameter: {src: hdca, id: abcdabcd} - parameter: null - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5" gx_data_collection_any_y: request_valid: - parameter: {src: hdca, id: abcdabcd} request_invalid: - parameter: {src: hdca, id: 7} - parameter: null - {} request_internal_valid: - parameter: {src: hdca, id: 5} request_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - parameter: null - {} job_internal_valid: - parameter: {src: hdca, id: 5} job_internal_invalid: - parameter: {src: hdca, id: abcdabcd} - {} job_runtime_valid: # list collection - parameter: class: Collection name: test_list collection_type: list tags: [] elements: - class: File element_identifier: f1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 - class: File element_identifier: f2 basename: "f2.txt" location: "step_input://1" path: "/tmp/f2.txt" nameroot: "f2" nameext: ".txt" format: "txt" size: 100 # paired collection - parameter: class: Collection name: test_paired collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "f.txt" location: "step_input://0" path: "/tmp/f.txt" nameroot: "f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "r.txt" location: "step_input://1" path: "/tmp/r.txt" nameroot: "r" nameext: ".txt" format: "txt" size: 100 # list:paired collection - parameter: class: Collection name: test_list_paired collection_type: "list:paired" tags: [] elements: - class: Collection name: sample1 collection_type: paired tags: [] elements: forward: class: File element_identifier: forward basename: "s1_f.txt" location: "step_input://0" path: "/tmp/s1_f.txt" nameroot: "s1_f" nameext: ".txt" format: "txt" size: 100 reverse: class: File element_identifier: reverse basename: "s1_r.txt" location: "step_input://1" path: "/tmp/s1_r.txt" nameroot: "s1_r" nameext: ".txt" format: "txt" size: 100 # record collection - parameter: class: Collection name: test_record collection_type: record tags: [] elements: field1: class: File element_identifier: field1 basename: "f1.txt" location: "step_input://0" path: "/tmp/f1.txt" nameroot: "f1" nameext: ".txt" format: "txt" size: 100 field2: class: File element_identifier: field2 basename: "f2.txt" location: "step_input://1" path: "/tmp/f2.txt" nameroot: "f2" nameext: ".txt" format: "txt" size: 100 job_runtime_invalid: - parameter: {src: hdca, id: 5} - {} - parameter: class: Collection cwl_directory: request_valid: - parameter: {src: hda, id: abcdabcd} request_invalid: - parameter: {src: hda, id: 7} - parameter: {src: hdca, id: abcdabcd} - parameter: null - parameter: {src: fooda, id: abcdabcd} - parameter: {id: abcdabcd} - parameter: {} - {} - parameter: true - parameter: 5 - parameter: "5"