diff --git a/test/units/module_utils/network/meraki/__init__.py b/test/units/module_utils/network/meraki/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/units/module_utils/network/meraki/fixtures/orgs.json b/test/units/module_utils/network/meraki/fixtures/orgs.json new file mode 100644 index 00000000000..087db0f244b --- /dev/null +++ b/test/units/module_utils/network/meraki/fixtures/orgs.json @@ -0,0 +1,6 @@ +[ + { + "id": 2930418, + "name": "My organization" + } +] \ No newline at end of file diff --git a/test/units/module_utils/network/meraki/test_meraki.py b/test/units/module_utils/network/meraki/test_meraki.py new file mode 100644 index 00000000000..acd7510b08a --- /dev/null +++ b/test/units/module_utils/network/meraki/test_meraki.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- + +# Copyright 2019 Kevin Breit + +# This file is part of Ansible by Red Hat +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import json +import os +import pytest + +from units.compat import unittest, mock +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.network.meraki.meraki import MerakiModule, meraki_argument_spec +from ansible.module_utils.six import PY2, PY3 +from ansible.module_utils._text import to_native, to_bytes +from units.modules.utils import set_module_args + +fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') +fixture_data = {} +testcase_data = { + "params": {'orgs': ['orgs.json'], + } +} + + +def load_fixture(name): + path = os.path.join(fixture_path, name) + + if path in fixture_data: + return fixture_data[path] + + with open(path) as f: + data = f.read() + + # try: + data = json.loads(data) + # except Exception: + # pass + + fixture_data[path] = data + return data + + +@pytest.fixture(scope="module") +def module(): + argument_spec = meraki_argument_spec() + set_module_args({'auth_key': 'abc123', + }) + module = AnsibleModule(argument_spec=argument_spec, + supports_check_mode=False) + return MerakiModule(module) + + +def mocked_fetch_url(*args, **kwargs): + print(args) + if args[1] == 'https://api.meraki.com/api/v0/404': + info = {'status': 404, + 'msg': '404 - Page is missing', + 'url': 'https://api.meraki.com/api/v0/404', + } + info['body'] = '404' + elif args[1] == 'https://api.meraki.com/api/v0/429': + info = {'status': 429, + 'msg': '429 - Rate limit hit', + 'url': 'https://api.meraki.com/api/v0/429', + } + info['body'] = '429' + return (None, info) + + +def mocked_fail_json(*args, **kwargs): + pass + + +def test_fetch_url_404(module, mocker): + url = '404' + mocker.patch('ansible.module_utils.network.meraki.meraki.fetch_url', side_effect=mocked_fetch_url) + mocker.patch('ansible.module_utils.network.meraki.meraki.MerakiModule.fail_json', side_effect=mocked_fail_json) + data = module.request(url, method='GET') + assert module.status == 404 + + +def test_fetch_url_429(module, mocker): + url = '429' + mocker.patch('ansible.module_utils.network.meraki.meraki.fetch_url', side_effect=mocked_fetch_url) + mocker.patch('ansible.module_utils.network.meraki.meraki.MerakiModule.fail_json', side_effect=mocked_fail_json) + data = module.request(url, method='GET') + assert module.status == 429 + + +def test_define_protocol_https(module): + module.params['use_https'] = True + module.define_protocol() + testdata = module.params['protocol'] + assert testdata == 'https' + + +def test_define_protocol_http(module): + module.params['use_https'] = False + module.define_protocol() + testdata = module.params['protocol'] + assert testdata == 'http' + + +def test_is_org_valid_org_name(module): + data = load_fixture('orgs.json') + org_count = module.is_org_valid(data, org_name="My organization") + assert org_count == 1 + + +def test_is_org_valid_org_id(module): + data = load_fixture('orgs.json') + org_count = module.is_org_valid(data, org_id=2930418) + assert org_count == 1