import atexit
import shutil
import tempfile
from pathlib import Path
from django.test import TestCase
BASE_PATH = Path(tempfile.mkdtemp(prefix='pydis-site-content-app-tests-'))
# Valid markdown content with YAML metadata
MARKDOWN_WITH_METADATA = """
---
title: TestTitle
description: TestDescription
relevant_links:
Python Discord: https://pythondiscord.com
Discord: https://discord.com
toc: 0
---
# This is a header.
"""
MARKDOWN_WITHOUT_METADATA = """#This is a header."""
# Valid YAML in a _info.yml file
CATEGORY_INFO = """
title: Category Name
description: Description
"""
# The HTML generated from the above markdown data
PARSED_HTML = (
'
'
)
# The YAML metadata parsed from the above markdown data
PARSED_METADATA = {
"title": "TestTitle", "description": "TestDescription",
"relevant_links": {
"Python Discord": "https://pythondiscord.com",
"Discord": "https://discord.com"
},
"toc": 0
}
# The YAML data parsed from the above _info.yml file
PARSED_CATEGORY_INFO = {"title": "Category Name", "description": "Description"}
class MockPagesTestCase(TestCase):
"""
TestCase with a fake filesystem for testing.
Structure (relative to BASE_PATH):
├── _info.yml
├── root.md
├── root_without_metadata.md
├── not_a_page.md
├── tmp.md
├── tmp
| ├── _info.yml
| └── category
| ├── _info.yml
| └── subcategory_without_info
└── category
├── _info.yml
├── with_metadata.md
└── subcategory
├── with_metadata.md
└── without_metadata.md
"""
def setUp(self):
"""Create the fake filesystem."""
Path(f"{BASE_PATH}/_info.yml").write_text(CATEGORY_INFO)
Path(f"{BASE_PATH}/root.md").write_text(MARKDOWN_WITH_METADATA)
Path(f"{BASE_PATH}/root_without_metadata.md").write_text(MARKDOWN_WITHOUT_METADATA)
Path(f"{BASE_PATH}/not_a_page.md").mkdir(exist_ok=True)
Path(f"{BASE_PATH}/not_a_page.md/_info.yml").write_text(CATEGORY_INFO)
Path(f"{BASE_PATH}/category").mkdir(exist_ok=True)
Path(f"{BASE_PATH}/category/_info.yml").write_text(CATEGORY_INFO)
Path(f"{BASE_PATH}/category/with_metadata.md").write_text(MARKDOWN_WITH_METADATA)
Path(f"{BASE_PATH}/category/subcategory").mkdir(exist_ok=True)
Path(f"{BASE_PATH}/category/subcategory/_info.yml").write_text(CATEGORY_INFO)
Path(
f"{BASE_PATH}/category/subcategory/with_metadata.md"
).write_text(MARKDOWN_WITH_METADATA)
Path(
f"{BASE_PATH}/category/subcategory/without_metadata.md"
).write_text(MARKDOWN_WITHOUT_METADATA)
temp = f"{BASE_PATH}/tmp" # noqa: S108
Path(f"{temp}").mkdir(exist_ok=True)
Path(f"{temp}/_info.yml").write_text(CATEGORY_INFO)
Path(f"{temp}.md").write_text(MARKDOWN_WITH_METADATA)
Path(f"{temp}/category").mkdir(exist_ok=True)
Path(f"{temp}/category/_info.yml").write_text(CATEGORY_INFO)
Path(f"{temp}/category/subcategory_without_info").mkdir(exist_ok=True)
@classmethod
def setUpTestData(cls):
# May get called multiple times - ignore erorrs in that case.
atexit.register(shutil.rmtree, BASE_PATH, ignore_errors=True)