Skip to content

Commit

Permalink
Improve/fix form handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
felixfontein committed Dec 9, 2020
1 parent 50985a5 commit fcfcaef
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 13 deletions.
29 changes: 29 additions & 0 deletions tests/unit/plugins/lookup/test_open_url_test_lookup.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,35 @@ def test_basic(self):
assert result[0]['status'] == 200
assert result[0]['content'] == base64.b64encode('hello'.encode('utf-8')).decode('utf-8')

def test_multiple(self):
open_url = OpenUrlProxy([
OpenUrlCall('POST', 200)
.result_json({'1': 2})
.return_header('content-type', 'application/json')
.expect_header('foo', 'bar')
.expect_header_unset('baz')
.expect_url('http://example.com'),
OpenUrlCall('POST', 500)
.result_error('Error!'.encode('utf-8'))
.expect_form_present('name')
.expect_form_value('email', 'name@example.com')
.expect_form_value_absent('firstname')
.expect_url('http://example.org'),
])
with patch('ansible_collections.community.internal_test_tools.plugins.lookup.open_url_test_lookup.open_url', open_url):
result = self.lookup.run(
['http://example.com', 'http://example.org'],
[],
method='POST',
headers=dict(foo='bar'),
data=base64.b64encode('name=foo&email=name@example.com'.encode('utf-8')).decode('utf-8'),
)
open_url.assert_is_done()

assert len(result) == 2
assert result[0]['status'] == 200
assert result[1]['status'] == 500

def test_error(self):
open_url = OpenUrlProxy([
OpenUrlCall('PUT', 404)
Expand Down
4 changes: 1 addition & 3 deletions tests/unit/plugins/modules/test_fetch_url_test_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ class TestFetchURLTestModule(BaseTestModule):
MOCK_ANSIBLE_MODULEUTILS_BASIC_ANSIBLEMODULE = 'ansible_collections.community.internal_test_tools.plugins.modules.fetch_url_test_module.AnsibleModule'
MOCK_ANSIBLE_MODULEUTILS_URLS_FETCH_URL = 'ansible_collections.community.internal_test_tools.plugins.modules.fetch_url_test_module.fetch_url'

# Tests for state (absent and present)

def test_absent_idempotency(self, mocker):
def test_basic(self, mocker):
result = self.run_module_success(mocker, fetch_url_test_module, {
'call_sequence': [
{
Expand Down
11 changes: 6 additions & 5 deletions tests/unit/utils/fetch_url_module_framework.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ def test_absent(self, mocker):
import ansible.module_utils.basic # noqa
import ansible.module_utils.urls # noqa

from ansible.module_utils._text import to_native
from ansible_collections.community.internal_test_tools.tests.unit.plugins.modules.utils import set_module_args
from ansible.module_utils.six.moves.urllib.parse import parse_qs

Expand Down Expand Up @@ -212,16 +213,16 @@ def _validate_form(self, call, data):
'''
form = {}
if data is not None:
form = parse_qs(data, keep_blank_values=True)
form = parse_qs(to_native(data), keep_blank_values=True)
for k in call.form_present:
assert k in form
assert k in form, 'Form key "{0}" not present'.format(k)
for k, v in call.form_values.items():
if len(v) == 0:
assert k not in form
assert k not in form, 'Form key "{0}" not absent'.format(k)
else:
assert form[k] == v
assert form[k] == v, 'Form key "{0}" has not values {1}, but {2}'.format(k, v, form[k])
for k, v in call.form_values_one.items():
assert v <= set(form[k])
assert v <= set(form[k]), 'Form key "{0}" has values {2}, which does not include all of {1}'.format(k, v, form[k])

def _validate_headers(self, call, headers):
'''
Expand Down
11 changes: 6 additions & 5 deletions tests/unit/utils/open_url_framework.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ def test_populate(inventory, mocker):

from mock import MagicMock

from ansible.module_utils._text import to_native
from ansible.module_utils.six.moves.urllib.error import HTTPError
from ansible.module_utils.six.moves.urllib.parse import parse_qs

Expand Down Expand Up @@ -234,16 +235,16 @@ def _validate_form(self, call, data):
'''
form = {}
if data is not None:
form = parse_qs(data, keep_blank_values=True)
form = parse_qs(to_native(data), keep_blank_values=True)
for k in call.form_present:
assert k in form
assert k in form, 'Form key "{0}" not present'.format(k)
for k, v in call.form_values.items():
if len(v) == 0:
assert k not in form
assert k not in form, 'Form key "{0}" not absent'.format(k)
else:
assert form[k] == v
assert form[k] == v, 'Form key "{0}" has not values {1}, but {2}'.format(k, v, form[k])
for k, v in call.form_values_one.items():
assert v <= set(form[k])
assert v <= set(form[k]), 'Form key "{0}" has values {2}, which does not include all of {1}'.format(k, v, form[k])

def _validate_headers(self, call, headers):
'''
Expand Down

0 comments on commit fcfcaef

Please sign in to comment.