"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: MIT-0
"""

from test.unit.rules import BaseRuleTestCase

import regex as re

from cfnlint.data import CloudSpecs
from cfnlint.helpers import RESOURCE_SPECS, load_resource
from cfnlint.rules.resources.properties.AllowedPattern import (
    AllowedPattern,  # pylint: disable=E0401
)


class TestAllowedPattern(BaseRuleTestCase):
    """Test Allowed Value Property Configuration"""

    def setUp(self):
        """Setup"""
        super(TestAllowedPattern, self).setUp()
        self.collection.register(AllowedPattern())
        self.success_templates = [
            "test/fixtures/templates/good/resources/properties/allowed_pattern.yaml"
        ]

        self.spec = RESOURCE_SPECS["us-east-1"]

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

    def test_template_config(self):
        """Test strict false"""
        self.helper_file_rule_config(
            "test/fixtures/templates/bad/properties_sg_ingress.yaml",
            {"exceptions": ["Special charaters*"]},
            1,
        )

    def test_file_negative_sg_ingress(self):
        """Test failure"""
        self.helper_file_negative(
            "test/fixtures/templates/bad/properties_sg_ingress.yaml", 2
        )

    def test_valid_regex(self):
        """Test Resource Type Value Regex"""
        for r_name, r_values in self.spec.get("ValueTypes").items():
            if r_values.get("AllowedPatternRegex"):
                p_regex = r_values.get("AllowedPatternRegex")
                try:
                    re.compile(p_regex)
                except re.error:
                    self.fail(
                        "Invalid regex value %s specified for ValueType %s"
                        % (p_regex, r_name)
                    )
