""" Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 """ import logging import sys from test.testlib.testcase import BaseTestCase from unittest.mock import call, mock_open, patch import cfnlint.maintenance from cfnlint.rules import CloudFormationLintRule, RulesCollection LOGGER = logging.getLogger("cfnlint.maintenance") LOGGER.addHandler(logging.NullHandler()) class TestUpdateDocumentation(BaseTestCase): """Used for Testing Updating the Documentation""" TEST_TEXT = """ Regular Text ## Rules """ def test_update_docs(self): collection = RulesCollection(include_rules=["I"], include_experimental=True) builtin_module_name = "builtins" mo = mock_open(read_data=self.TEST_TEXT) mo.return_value.__iter__ = lambda self: self mo.return_value.__iter__ = lambda self: iter(self.readline, "") with patch("{}.open".format(builtin_module_name), mo) as mock_builtin_open: cfnlint.maintenance.update_documentation(collection) expected_calls = [ call("\n"), call("Regular Text\n"), call("## Rules\n"), call( "(_This documentation is generated by running `cfn-lint --update-documentation`, do not alter this manually_)\n\n" ), call( "The following **{}** rules are applied by this linter:\n\n".format( len(collection) + 3 ) ), call( "| Rule ID | Title | Description | Config
(Name:Type:Default) | Source | Tags |\n" ), call( "| -------- | ----- | ----------- | ---------- | ------ | ---- |\n" ), call( '| [E0000](../src/cfnlint/rules/__init__.py) | Parsing error found when parsing the template | Checks for JSON/YAML formatting errors in your template | | [Source](https://github.com/aws-cloudformation/cfn-python-lint) | `base` |\n' ), call( '| [E0001](../src/cfnlint/rules/__init__.py) | Error found when transforming the template | Errors found when performing transformation on the template | | [Source](https://github.com/aws-cloudformation/cfn-python-lint) | `base`,`transform` |\n' ), call( '| [E0002](../src/cfnlint/rules/__init__.py) | Error processing rule on the template | Errors found when processing a rule on the template | | [Source](https://github.com/aws-cloudformation/cfn-python-lint) | `base`,`rule` |\n' ), call("\n\\* experimental rules\n"), ] mock_builtin_open.return_value.write.assert_has_calls(expected_calls) self.assertEqual( len(expected_calls), mock_builtin_open.return_value.write.call_count )