diff options
Diffstat (limited to 'pydis_site/apps/api')
| -rw-r--r-- | pydis_site/apps/api/tests/test_rules.py | 38 | ||||
| -rw-r--r-- | pydis_site/apps/api/views.py | 8 | 
2 files changed, 42 insertions, 4 deletions
| diff --git a/pydis_site/apps/api/tests/test_rules.py b/pydis_site/apps/api/tests/test_rules.py index d08c5fae..3ee2d4e0 100644 --- a/pydis_site/apps/api/tests/test_rules.py +++ b/pydis_site/apps/api/tests/test_rules.py @@ -1,3 +1,7 @@ +import itertools +import re +from pathlib import Path +  from django.urls import reverse  from .base import AuthenticatedAPITestCase @@ -33,3 +37,37 @@ class RuleAPITests(AuthenticatedAPITestCase):          url = reverse('api:rules')          response = self.client.get(url + '?link_format=unknown')          self.assertEqual(response.status_code, 400) + + +class RuleCorrectnessTests(AuthenticatedAPITestCase): +    """Verifies that the rules from the API and by the static rules in the content app match.""" + +    @classmethod +    def setUpTestData(cls): +        cls.markdown_rule_re = re.compile(r'^> \d+\. (.*)$') + +    def test_rules_in_markdown_file_roughly_equal_api_rules(self) -> None: +        url = reverse('api:rules') +        api_response = self.client.get(url + '?link_format=md') +        api_rules = tuple(rule for (rule, _tags) in api_response.json()) + +        markdown_rules_path = ( +            Path(__file__).parent.parent.parent / 'content' / 'resources' / 'rules.md' +        ) + +        markdown_rules = [] +        for line in markdown_rules_path.read_text().splitlines(): +            matches = self.markdown_rule_re.match(line) +            if matches is not None: +                markdown_rules.append(matches.group(1)) + +        zipper = itertools.zip_longest(api_rules, markdown_rules) +        for idx, (api_rule, markdown_rule) in enumerate(zipper): +            with self.subTest(f"Rule {idx}"): +                self.assertIsNotNone( +                    markdown_rule, f"The API has more rules than {markdown_rules_path}" +                ) +                self.assertIsNotNone( +                    api_rule, f"{markdown_rules_path} has more rules than the API endpoint" +                ) +                self.assertEqual(markdown_rule, api_rule) diff --git a/pydis_site/apps/api/views.py b/pydis_site/apps/api/views.py index 20431a61..b1b7dc0f 100644 --- a/pydis_site/apps/api/views.py +++ b/pydis_site/apps/api/views.py @@ -120,7 +120,7 @@ class RulesView(APIView):              link_format          )          discord_tos = self._format_link( -            'Terms Of Service', +            'Terms of Service',              'https://discordapp.com/terms',              link_format          ) @@ -149,9 +149,9 @@ class RulesView(APIView):                  ["english", "language"]              ),              ( -                "Do not provide or request help on projects that may break laws, " -                "breach terms of services, or are malicious or inappropriate.", -                ["infraction", "tos", "breach", "malicious", "inappropriate"] +                "Do not provide or request help on projects that may violate terms of service, " +                "or that may be deemed inappropriate, malicious, or illegal.", +                ["infraction", "tos", "breach", "malicious", "inappropriate", "illegal"]              ),              (                  "Do not post unapproved advertising.", | 
