# -*- coding: utf-8 -*-
# Copyright (c) 2019 Ansible Project
# 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 pytest

from ansible.module_utils.common.parameters import list_deprecations


@pytest.fixture
def params():
    return {
        'name': 'bob',
        'dest': '/etc/hosts',
        'state': 'present',
        'value': 5,
    }


def test_list_deprecations():
    argument_spec = {
        'old': {'type': 'str', 'removed_in_version': '2.5'},
        'foo': {'type': 'dict', 'options': {'old': {'type': 'str', 'removed_in_version': 1.0}}},
        'bar': {'type': 'list', 'elements': 'dict', 'options': {'old': {'type': 'str', 'removed_in_version': '2.10'}}},
    }

    params = {
        'name': 'rod',
        'old': 'option',
        'foo': {'old': 'value'},
        'bar': [{'old': 'value'}, {}],
    }
    result = list_deprecations(argument_spec, params)
    assert len(result) == 3
    result.sort(key=lambda entry: entry['msg'])
    assert result[0]['msg'] == """Param 'bar["old"]' is deprecated. See the module docs for more information"""
    assert result[0]['version'] == '2.10'
    assert result[1]['msg'] == """Param 'foo["old"]' is deprecated. See the module docs for more information"""
    assert result[1]['version'] == 1.0
    assert result[2]['msg'] == "Param 'old' is deprecated. See the module docs for more information"
    assert result[2]['version'] == '2.5'
