ansible.utils/tests/unit/module_utils/test_index_of.py

121 lines
4.2 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# Copyright 2020 Red Hat
# GNU General Public License v3.0+
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
import unittest
from ansible_collections.ansible.utils.plugins.module_utils.common.index_of import (
index_of,
)
from ansible.template import Templar
class TestIndexOfFilter(unittest.TestCase):
def setUp(self):
self._tests = Templar(loader=None).environment.tests
def test_fail_no_qualfier(self):
obj, test, value = [1, 2], "@@", 1
with self.assertRaises(Exception) as exc:
index_of(obj, test, value, tests=self._tests)
self.assertIn("the test '@@' was not found", str(exc.exception))
obj, test, value, key = [{"a": 1}], "@@", 1, "a"
with self.assertRaises(Exception) as exc:
index_of(obj, test, value, key, tests=self._tests)
self.assertIn("the test '@@' was not found", str(exc.exception))
def test_fail_mixed_list(self):
obj, test, value, key = [{"a": "b"}, True, 1, "a"], "==", "b", "a"
with self.assertRaises(Exception) as exc:
index_of(obj, test, value, key, tests=self._tests)
self.assertIn("required to be dictionaries", str(exc.exception))
def test_fail_key_not_valid(self):
obj, test, value, key = [{"a": "b"}], "==", "b", [1, 2]
with self.assertRaises(Exception) as exc:
index_of(obj, test, value, key, tests=self._tests)
self.assertIn("Unknown key type", str(exc.exception))
def test_fail_on_missing(self):
obj, test, value, key = [{"a": True}, {"c": False}], "==", True, "a"
with self.assertRaises(Exception) as exc:
index_of(
obj, test, value, key, fail_on_missing=True, tests=self._tests
)
self.assertIn("'a' was not found", str(exc.exception))
def test_just_test(self):
"""Limit to jinja < 2.11 tests"""
objs = [
# ([True], "true", 0),
# ([False], "not false", []),
# ([False, 5], "boolean", 0),
# ([0, False], "false", 1),
([3, 4], "not even", 0),
([3, 4], "even", 1),
([3, 3], "even", []),
([3, 3, 3, 4], "odd", [0, 1, 2]),
# ([3.3, 3.4], "float", [0, 1]),
]
for entry in objs:
obj, test, answer = entry
result = index_of(obj, test, tests=self._tests)
expected = answer
self.assertEqual(result, expected)
def test_simple_lists(self):
objs = [
([1, 2, 3], "==", 2, 1),
(["a", "b", "c"], "eq", "c", 2),
([True, False, 0, 1], "equalto", False, [1, 2]),
([True, False, "0", "1"], "==", False, 1),
([True, False, "", "1"], "==", False, 1),
([True, False, "", "1"], "in", False, 1),
([True, False, "", "1", "a"], "in", [False, "1"], [1, 3]),
([1, 2, 3, "a", "b", "c"], "!=", "c", [0, 1, 2, 3, 4]),
([1, 2, 3], "!<", 3, 2),
]
for entry in objs:
obj, test, value, answer = entry
result = index_of(obj, test, value, tests=self._tests)
expected = answer
self.assertEqual(result, expected)
def test_simple_dict(self):
objs = [
([{"a": 1}], "==", 1, "a", 0),
([{"a": 1}], "==", 1, "b", []),
([{"a": 1}], "==", 2, "a", []),
(
[{"a": 1}, {"a": 1}, {"a": 1}, {"a": 2}],
"==",
1,
"a",
[0, 1, 2],
),
(
[{"a": "abc"}, {"a": "def"}, {"a": "ghi"}, {"a": "jkl"}],
"ansible.builtin.match",
"^a",
"a",
0,
),
(
[{"a": "abc"}, {"a": "def"}, {"a": "ghi"}, {"a": "jkl"}],
"ansible.builtin.search",
"e",
"a",
1,
),
]
for entry in objs:
obj, test, value, key, answer = entry
result = index_of(obj, test, value, key, tests=self._tests)
self.assertEqual(result, answer)