Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds argspec tests for required, required_one_of and required_by #72245

Merged
merged 4 commits into from Oct 22, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
32 changes: 32 additions & 0 deletions test/integration/targets/argspec/library/argspec.py
Expand Up @@ -11,6 +11,14 @@
def main():
module = AnsibleModule(
{
'required': {
'required': True,
},
'required_one_of_one': {},
'required_one_of_two': {},
'required_by_one': {},
'required_by_two': {},
'required_by_three': {},
'state': {
'type': 'str',
'choices': ['absent', 'present'],
Expand All @@ -20,6 +28,24 @@ def main():
'mapping': {
'type': 'dict',
},
'required_one_of': {
'required_one_of': [['thing', 'other']],
'type': 'list',
'elements': 'dict',
'options': {
'thing': {},
'other': {},
},
},
'required_by': {
'required_by': {'thing': 'other'},
'type': 'list',
'elements': 'dict',
'options': {
'thing': {},
'other': {},
},
},
'required_together': {
'required_together': [['thing', 'other']],
'type': 'list',
Expand Down Expand Up @@ -72,6 +98,12 @@ def main():
mutually_exclusive=(
('path', 'content'),
),
required_one_of=(
('required_one_of_one', 'required_one_of_two'),
),
required_by={
'required_by_one': ('required_by_two', 'required_by_three'),
},
required_together=(
('required_together_one', 'required_together_two'),
),
Expand Down
139 changes: 135 additions & 4 deletions test/integration/targets/argspec/tasks/main.yml
@@ -1,53 +1,108 @@
- argspec:
required: value
required_one_of_one: value

- argspec:
required_one_of_one: value
register: argspec_required_fail
ignore_errors: true

- argspec:
required: value
required_one_of_two: value

- argspec:
required: value
register: argspec_required_one_of_fail
ignore_errors: true

- argspec:
required: value
required_one_of_two: value
required_by_one: value
required_by_two: value
required_by_three: value

- argspec:
required: value
required_one_of_two: value
required_by_one: value
required_by_two: value
register: argspec_required_by_fail
ignore_errors: true

- argspec:
state: absent
required: value
required_one_of_one: value

- argspec:
state: present
required: value
required_one_of_one: value
register: argspec_required_if_fail
ignore_errors: true

- argspec:
state: present
path: foo
required: value
required_one_of_one: value

- argspec:
state: present
content: foo
required: value
required_one_of_one: value

- argspec:
state: present
content: foo
path: foo
required: value
required_one_of_one: value
register: argspec_mutually_exclusive_fail
ignore_errors: true

- argspec:
mapping:
foo: bar
required: value
required_one_of_one: value
register: argspec_good_mapping

- argspec:
mapping: foo=bar
required: value
required_one_of_one: value
register: argspec_good_mapping_kv

- argspec:
mapping: !!str '{"foo": "bar"}'
required: value
required_one_of_one: value
register: argspec_good_mapping_json

- argspec:
mapping: foo
required: value
required_one_of_one: value
register: argspec_bad_mapping_string
ignore_errors: true

- argspec:
mapping: 1
required: value
required_one_of_one: value
register: argspec_bad_mapping_int
ignore_errors: true

- argspec:
mapping:
- foo
- bar
required: value
required_one_of_one: value
register: argspec_bad_mapping_list
ignore_errors: true

Expand All @@ -56,90 +111,162 @@
- thing: foo
other: bar
another: baz
required: value
required_one_of_one: value

- argspec:
required_together:
- another: baz
required: value
required_one_of_one: value

- argspec:
required_together:
- thing: foo
required: value
required_one_of_one: value
register: argspec_required_together_fail
ignore_errors: true

- argspec:
required_together:
- thing: foo
other: bar
required: value
required_one_of_one: value

- argspec:
required_if:
- thing: bar
required: value
required_one_of_one: value

- argspec:
required_if:
- thing: foo
other: bar
required: value
required_one_of_one: value

- argspec:
required_if:
- thing: foo
register: argpsec_required_if_fail
required: value
required_one_of_one: value
register: argspec_required_if_fail_2
ignore_errors: true

- argspec:
required_one_of:
- thing: foo
other: bar
required: value
required_one_of_one: value

- argspec:
required_one_of:
- {}
required: value
required_one_of_one: value
register: argspec_required_one_of_fail_2
ignore_errors: true

- argspec:
required_by:
- thing: foo
other: bar
required: value
required_one_of_one: value

- argspec:
required_by:
- thing: foo
required: value
required_one_of_one: value
register: argspec_required_by_fail_2
ignore_errors: true

- argspec:
json: !!str '{"foo": "bar"}'
required: value
required_one_of_one: value
register: argspec_good_json_string

- argspec:
json:
foo: bar
required: value
required_one_of_one: value
register: argspec_good_json_dict

- argspec:
json: 1
required: value
required_one_of_one: value
register: argspec_bad_json
ignore_errors: true

- argspec:
fail_on_missing_params:
- needed_param
needed_param: whatever
required: value
required_one_of_one: value

- argspec:
fail_on_missing_params:
- needed_param
required: value
required_one_of_one: value
register: argspec_fail_on_missing_params_bad
ignore_errors: true

- argspec:
required_together_one: foo
required_together_two: bar
required: value
required_one_of_one: value

- argspec:
required_together_one: foo
register: argspec_fail_required_together
required: value
required_one_of_one: value
register: argspec_fail_required_together_2
ignore_errors: true

- argspec:
suboptions_list_no_elements:
- thing: foo
required: value
required_one_of_one: value
register: argspec_suboptions_list_no_elements

- argspec:
choices_with_strings_like_bools: on
required: value
required_one_of_one: value
register: argspec_choices_with_strings_like_bools_true

- argspec:
choices_with_strings_like_bools: 'on'
required: value
required_one_of_one: value
register: argspec_choices_with_strings_like_bools_true_bool

- argspec:
choices_with_strings_like_bools: off
required: value
required_one_of_one: value
register: argspec_choices_with_strings_like_bools_false

- assert:
that:
- argspec_required_fail is failed

- argspec_required_one_of_fail is failed

- argspec_required_by_fail is failed

- argspec_required_if_fail is failed

- argspec_mutually_exclusive_fail is failed
Expand All @@ -159,7 +286,11 @@

- argspec_required_together_fail is failed

- argpsec_required_if_fail is failed
- argspec_required_if_fail_2 is failed

- argspec_required_one_of_fail_2 is failed

- argspec_required_by_fail_2 is failed

- argspec_good_json_string is successful
- >-
Expand All @@ -171,7 +302,7 @@

- argspec_fail_on_missing_params_bad is failed

- argspec_fail_required_together is failed
- argspec_fail_required_together_2 is failed

- >-
argspec_suboptions_list_no_elements.suboptions_list_no_elements.0 == {'thing': 'foo'}
Expand Down