"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: MIT-0
"""
from test.unit.rules import BaseRuleTestCase

from cfnlint.rules.functions.Select import Select  # pylint: disable=E0401


class TestRulesSelect(BaseRuleTestCase):
    """Test Rules Get Att"""

    def setUp(self):
        """Setup"""
        super(TestRulesSelect, self).setUp()
        self.collection.register(Select())

    def test_file_positive(self):
        """Test Positive"""
        self.helper_file_positive()

    def test_file_negative(self):
        """Test failure"""
        self.helper_file_negative(
            "test/fixtures/templates/bad/functions_select.yaml", 4
        )

    def test_select_parts(self):
        rule = Select()
        # can't be a list
        self.assertEqual(len(rule._test_index_obj([], [])), 1)
        # can't be a string
        self.assertEqual(len(rule._test_index_obj("a", [])), 1)
        # can be a valid fn
        self.assertEqual(len(rule._test_index_obj({"Ref": "Test"}, [])), 0)
        # can't be an invalid fn
        self.assertEqual(len(rule._test_index_obj({"Foo": "Bar"}, [])), 1)
        # can't be a dict of many values
        self.assertEqual(
            len(rule._test_index_obj({"Ref": "Test", "Foo": "Bar"}, [])), 1
        )

        self.assertEqual(len(rule._test_index_obj({}, [])), 1)

        # supported function
        self.assertEqual(len(rule._test_list_obj({"Ref": "Test"}, [])), 0)
        # Unsupported function
        self.assertEqual(len(rule._test_list_obj({"Foo": "Bar"}, [])), 1)
        # Unsupported type
        self.assertEqual(len(rule._test_list_obj("foo", [])), 1)